diff -Nru flatpak-0.11.3/aclocal.m4 flatpak-1.0.7/aclocal.m4 --- flatpak-0.11.3/aclocal.m4 2018-02-19 13:20:05.000000000 +0000 +++ flatpak-1.0.7/aclocal.m4 2019-02-11 12:42:26.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -745,7 +745,7 @@ _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require]) ]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -757,10 +757,10 @@ # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.15' +[am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -776,14 +776,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -835,7 +835,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -866,7 +866,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1057,13 +1057,12 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. - # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], @@ -1071,49 +1070,41 @@ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + AS_CASE([$CONFIG_FILES], + [*\'*], [eval set x "$CONFIG_FILES"], + [*], [set x $CONFIG_FILES]) shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`AS_DIRNAME(["$am_mf"])` + am_filepart=`AS_BASENAME(["$am_mf"])` + AM_RUN_LOG([cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles]) || am_rc=$? done + if test $am_rc -ne 0; then + AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking).]) + fi + AS_UNSET([am_dirpart]) + AS_UNSET([am_filepart]) + AS_UNSET([am_mf]) + AS_UNSET([am_rc]) + rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -1122,18 +1113,17 @@ # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. +# This code is only required when automatic dependency tracking is enabled. +# This creates each '.Po' and '.Plo' makefile fragment that we'll need in +# order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) + [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1220,8 +1210,8 @@ AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. @@ -1288,7 +1278,7 @@ Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -1330,7 +1320,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1351,7 +1341,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1373,7 +1363,7 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1408,7 +1398,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1416,49 +1406,42 @@ # AM_MAKE_INCLUDE() # ----------------- -# Check to see how make treats includes. +# Check whether make has an 'include' directive that can support all +# the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' +[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) + AS_CASE([$?:`cat confinc.out 2>/dev/null`], + ['0:this is the am__doit target'], + [AS_CASE([$s], + [BSD], [am__include='.include' am__quote='"'], + [am__include='include' am__quote=''])]) + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +AC_MSG_RESULT([${_am_result}]) +AC_SUBST([am__include])]) +AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1497,7 +1480,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1526,7 +1509,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1573,7 +1556,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1592,7 +1575,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1673,7 +1656,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1733,7 +1716,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1761,7 +1744,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1780,7 +1763,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, diff -Nru flatpak-0.11.3/app/flatpak-builtins-add-remote.c flatpak-1.0.7/app/flatpak-builtins-add-remote.c --- flatpak-0.11.3/app/flatpak-builtins-add-remote.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-add-remote.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,550 +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 "libglnx/libglnx.h" - -#include "flatpak-builtins.h" -#include "flatpak-builtins-utils.h" -#include "flatpak-utils.h" - -static gboolean opt_no_gpg_verify; -static gboolean opt_do_gpg_verify; -static gboolean opt_do_enumerate; -static gboolean opt_no_enumerate; -static gboolean opt_do_deps; -static gboolean opt_no_deps; -static gboolean opt_if_not_exists; -static gboolean opt_enable; -static gboolean opt_oci; -static gboolean opt_update_metadata; -static gboolean opt_disable; -static int opt_prio = -1; -static char *opt_title; -static char *opt_default_branch; -static char *opt_url; -static char *opt_collection_id = NULL; -static gboolean opt_from; -static char **opt_gpg_import; - - -static GOptionEntry add_options[] = { - { "if-not-exists", 0, 0, G_OPTION_ARG_NONE, &opt_if_not_exists, N_("Do nothing if the provided remote exists"), NULL }, - { "from", 0, 0, G_OPTION_ARG_NONE, &opt_from, N_("LOCATION specifies a configuration file, not the repo location"), NULL }, - { NULL } -}; - -static GOptionEntry modify_options[] = { - { "gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_do_gpg_verify, N_("Enable GPG verification"), NULL }, - { "enumerate", 0, 0, G_OPTION_ARG_NONE, &opt_do_enumerate, N_("Mark the remote as enumerate"), NULL }, - { "use-for-deps", 0, 0, G_OPTION_ARG_NONE, &opt_do_deps, N_("Mark the remote as used for dependencies"), NULL }, - { "url", 0, 0, G_OPTION_ARG_STRING, &opt_url, N_("Set a new url"), N_("URL") }, - { "enable", 0, 0, G_OPTION_ARG_NONE, &opt_enable, N_("Enable the remote"), NULL }, - { "update-metadata", 0, 0, G_OPTION_ARG_NONE, &opt_update_metadata, N_("Update extra metadata from the summary file"), NULL }, - { NULL } -}; - -static GOptionEntry common_options[] = { - { "no-gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_no_gpg_verify, N_("Disable GPG verification"), NULL }, - { "no-enumerate", 0, 0, G_OPTION_ARG_NONE, &opt_no_enumerate, N_("Mark the remote as don't enumerate"), NULL }, - { "no-use-for-deps", 0, 0, G_OPTION_ARG_NONE, &opt_no_deps, N_("Mark the remote as don't use for deps"), NULL }, - { "prio", 0, 0, G_OPTION_ARG_INT, &opt_prio, N_("Set priority (default 1, higher is more prioritized)"), N_("PRIORITY") }, - { "title", 0, 0, G_OPTION_ARG_STRING, &opt_title, N_("A nice name to use for this remote"), N_("TITLE") }, - { "default-branch", 0, 0, G_OPTION_ARG_STRING, &opt_default_branch, N_("Default branch to use for this remote"), N_("BRANCH") }, -#ifdef FLATPAK_ENABLE_P2P - { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), N_("COLLECTION-ID") }, -#endif /* FLATPAK_ENABLE_P2P */ - { "gpg-import", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_import, N_("Import GPG key from FILE (- for stdin)"), N_("FILE") }, - { "disable", 0, 0, G_OPTION_ARG_NONE, &opt_disable, N_("Disable the remote"), NULL }, - { "oci", 0, 0, G_OPTION_ARG_NONE, &opt_oci, N_("Add OCI registry"), NULL }, - { NULL } -}; - - -static GKeyFile * -get_config_from_opts (FlatpakDir *dir, const char *remote_name, gboolean *changed) -{ - 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); - g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); - *changed = TRUE; - } - - if (opt_do_gpg_verify) - { - g_key_file_set_boolean (config, group, "gpg-verify", TRUE); - g_key_file_set_boolean (config, group, "gpg-verify-summary", TRUE); - *changed = TRUE; - } - - if (opt_url) - { - if (g_str_has_prefix (opt_url, "metalink=")) - g_key_file_set_string (config, group, "metalink", opt_url + strlen ("metalink=")); - else - g_key_file_set_string (config, group, "url", opt_url); - *changed = TRUE; - } - - if (opt_collection_id) - { - g_key_file_set_string (config, group, "collection-id", opt_collection_id); - g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); - *changed = TRUE; - } - - if (opt_title) - { - g_key_file_set_string (config, group, "xa.title", opt_title); - g_key_file_set_boolean (config, group, "xa.title-is-set", TRUE); - *changed = TRUE; - } - - if (opt_default_branch) - { - g_key_file_set_string (config, group, "xa.default-branch", opt_default_branch); - g_key_file_set_boolean (config, group, "xa.default-branch-is-set", TRUE); - *changed = TRUE; - } - - if (opt_no_enumerate) - { - g_key_file_set_boolean (config, group, "xa.noenumerate", TRUE); - *changed = TRUE; - } - - if (opt_do_enumerate) - { - g_key_file_set_boolean (config, group, "xa.noenumerate", FALSE); - *changed = TRUE; - } - - if (opt_no_deps) - { - g_key_file_set_boolean (config, group, "xa.nodeps", TRUE); - *changed = TRUE; - } - - if (opt_do_deps) - { - g_key_file_set_boolean (config, group, "xa.nodeps", FALSE); - *changed = TRUE; - } - - if (opt_disable) - { - g_key_file_set_boolean (config, group, "xa.disable", TRUE); - *changed = TRUE; - } - else if (opt_enable) - { - g_key_file_set_boolean (config, group, "xa.disable", FALSE); - *changed = TRUE; - } - - if (opt_oci) - { - g_key_file_set_boolean (config, group, "xa.oci", TRUE); - *changed = TRUE; - } - - if (opt_prio != -1) - { - g_autofree char *prio_as_string = g_strdup_printf ("%d", opt_prio); - g_key_file_set_string (config, group, "xa.prio", prio_as_string); - *changed = TRUE; - } - - return config; -} - -static void -load_options (const char *filename, - GBytes **gpg_data) -{ - g_autoptr(GError) error = NULL; - g_autoptr(GKeyFile) keyfile = g_key_file_new (); - char *str; - gboolean nodeps; - g_autoptr(GBytes) bytes = NULL; - g_autofree char *version = NULL; - - if (g_str_has_prefix (filename, "http:") || - g_str_has_prefix (filename, "https:")) - { - const char *options_data; - gsize options_size; - - bytes = download_uri (filename, &error); - - if (bytes == NULL) - { - g_printerr (_("Can't load uri %s: %s\n"), filename, error->message); - exit (1); - } - - options_data = g_bytes_get_data (bytes, &options_size); - if (!g_key_file_load_from_data (keyfile, options_data, options_size, 0, &error)) - { - g_printerr (_("Can't load uri %s: %s\n"), filename, error->message); - exit (1); - } - } - else - { - if (!g_key_file_load_from_file (keyfile, filename, 0, &error)) - { - g_printerr (_("Can't load file %s: %s\n"), filename, error->message); - exit (1); - } - } - - - if (!g_key_file_has_group (keyfile, FLATPAK_REPO_GROUP)) - { - g_printerr (_("Invalid file format")); - exit (1); - } - - version = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_VERSION_KEY, NULL); - if (version != NULL && strcmp (version, "1") != 0) - { - g_printerr (_("Invalid version %s, only 1 supported"), version); - exit (1); - } - - str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_URL_KEY, NULL); - if (str != NULL) - opt_url = str; - -#ifdef FLATPAK_ENABLE_P2P - str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, FLATPAK_REPO_COLLECTION_ID_KEY, NULL); - if (str != NULL) - opt_collection_id = str; -#endif /* FLATPAK_ENABLE_P2P */ - - str = g_key_file_get_locale_string (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_TITLE_KEY, NULL, NULL); - if (str != NULL) - opt_title = str; - - str = g_key_file_get_locale_string (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_DEFAULT_BRANCH_KEY, NULL, NULL); - if (str != NULL) - opt_default_branch = str; - - nodeps = g_key_file_get_boolean (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_NODEPS_KEY, NULL); - if (nodeps) - { - opt_no_deps = TRUE; - opt_do_deps = FALSE; - } - - str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, - FLATPAK_REPO_GPGKEY_KEY, NULL); - if (str != NULL) - { - guchar *decoded; - gsize decoded_len; - - str = g_strstrip (str); - decoded = g_base64_decode (str, &decoded_len); - if (decoded_len < 10) /* Check some minimal size so we don't get crap */ - { - g_printerr (_("Invalid gpg key")); - exit (1); - } - - *gpg_data = g_bytes_new_take (decoded, decoded_len); - if (!opt_no_gpg_verify) - opt_do_gpg_verify = TRUE; - } -} - -gboolean -flatpak_builtin_add_remote (int argc, char **argv, - GCancellable *cancellable, GError **error) -{ - g_autoptr(GOptionContext) context = NULL; - g_autoptr(GPtrArray) dirs = NULL; - FlatpakDir *dir; - g_autoptr(GFile) file = NULL; - g_auto(GStrv) remotes = NULL; - g_autofree char *remote_url = NULL; - const char *remote_name; - const char *location = NULL; - g_autoptr(GKeyFile) config = NULL; - g_autoptr(GBytes) gpg_data = NULL; - gboolean changed = FALSE; - g_autoptr(GError) local_error = NULL; - - context = g_option_context_new (_("NAME LOCATION - Add a remote repository")); - g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - - g_option_context_add_main_entries (context, common_options, NULL); - - 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); - - if (argc < 3) - return usage_error (context, _("LOCATION must be specified"), error); - - if (argc > 3) - return usage_error (context, _("Too many arguments"), error); - -#ifdef FLATPAK_ENABLE_P2P - if (opt_collection_id != NULL && - !ostree_validate_collection_id (opt_collection_id, &local_error)) - return flatpak_fail (error, _("‘%s’ is not a valid collection ID: %s"), opt_collection_id, local_error->message); - - if (opt_collection_id != NULL && - (opt_no_gpg_verify || opt_gpg_import == NULL || opt_gpg_import[0] == NULL)) - return flatpak_fail (error, _("GPG verification is required if collections are enabled")); -#endif /* FLATPAK_ENABLE_P2P */ - - remote_name = argv[1]; - location = argv[2]; - - remotes = flatpak_dir_list_remotes (dir, cancellable, error); - if (remotes == NULL) - return FALSE; - - if (g_strv_contains ((const char **)remotes, remote_name)) - { - if (opt_if_not_exists) - return TRUE; /* Do nothing */ - - return flatpak_fail (error, _("Remote %s already exists"), remote_name); - } - - if (opt_from || - flatpak_file_arg_has_suffix (location, ".flatpakrepo")) - { - load_options (location, &gpg_data); - if (opt_url == NULL) - return flatpak_fail (error, _("No url specified in flatpakrepo file")); - } - else - { - file = g_file_new_for_commandline_arg (location); - if (g_file_is_native (file)) - remote_url = g_file_get_uri (file); - else - remote_url = g_strdup (location); - opt_url = remote_url; - } - - 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, except for --oci */ - if (!opt_no_gpg_verify && !opt_oci) - opt_do_gpg_verify = TRUE; - - config = get_config_from_opts (dir, remote_name, &changed); - - if (opt_gpg_import != NULL) - { - gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); - if (gpg_data == NULL) - return FALSE; - } - - if (!flatpak_dir_modify_remote (dir, remote_name, config, gpg_data, cancellable, error)) - return FALSE; - - /* Reload previously changed configuration */ - if (!flatpak_dir_recreate_repo (dir, cancellable, error)) - return FALSE; - - /* We can't retrieve the extra metadata until the remote has been added locally, since - ostree_repo_remote_fetch_summary() works with the repository's name, not its URL. - Don't propagate IO failed errors here because we might just be offline - the - remote should already be usable. */ - if (!flatpak_dir_update_remote_configuration (dir, remote_name, cancellable, &local_error)) - { - if (local_error->domain == G_RESOLVER_ERROR || - g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_FAILED)) - { - g_printerr (_("Warning: Could not update extra metadata for '%s': %s\n"), remote_name, local_error->message); - } - else - { - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - } - - return TRUE; -} - -gboolean -flatpak_complete_add_remote (FlatpakCompletion *completion) -{ - g_autoptr(GOptionContext) context = 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, - FLATPAK_BUILTIN_FLAG_ONE_DIR, NULL, NULL, NULL)) - return FALSE; - - switch (completion->argc) - { - case 0: - case 1: - flatpak_complete_options (completion, global_entries); - flatpak_complete_options (completion, common_options); - flatpak_complete_options (completion, add_options); - flatpak_complete_options (completion, user_entries); - - break; - } - - return TRUE; -} - -gboolean -flatpak_builtin_modify_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(GKeyFile) config = NULL; - g_autoptr(GBytes) gpg_data = NULL; - const char *remote_name; - gboolean changed = FALSE; - - context = g_option_context_new (_("NAME - Modify a remote repository")); - g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - - g_option_context_add_main_entries (context, common_options, NULL); - - if (!flatpak_option_context_parse (context, modify_options, &argc, &argv, - FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) - return FALSE; - - if (argc < 2) - return usage_error (context, _("Remote NAME must be specified"), error); - - remote_name = argv[1]; - - 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 (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 (preferred_dir, cancellable, error)) - return FALSE; - } - - config = get_config_from_opts (preferred_dir, remote_name, &changed); - - if (opt_gpg_import != NULL) - { - gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); - if (gpg_data == NULL) - return FALSE; - changed = TRUE; - } - - if (!changed) - return TRUE; - - 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(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, - FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) - return FALSE; - - switch (completion->argc) - { - case 0: - case 1: /* REMOTE */ - flatpak_complete_options (completion, global_entries); - flatpak_complete_options (completion, common_options); - flatpak_complete_options (completion, modify_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; - } - - return TRUE; -} diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-bundle.c flatpak-1.0.7/app/flatpak-builtins-build-bundle.c --- flatpak-0.11.3/app/flatpak-builtins-build-bundle.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-bundle.c 2019-02-11 12:42:20.000000000 +0000 @@ -34,9 +34,9 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-oci-registry.h" -#include "flatpak-chain-input-stream.h" +#include "flatpak-utils-private.h" +#include "flatpak-oci-registry-private.h" +#include "flatpak-chain-input-stream-private.h" #include "flatpak-builtins-utils.h" #include @@ -108,6 +108,110 @@ } static gboolean +get_bundle_appstream_data (GFile *root, + const char *full_branch, + const char *name, + GKeyFile *metadata, + gboolean compress, + GBytes **result, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) xmls_dir = NULL; + g_autofree char *appstream_basename = NULL; + g_autoptr(GFile) appstream_file = NULL; + g_autoptr(GInputStream) xml_in = NULL; + + *result = NULL; + + xmls_dir = g_file_resolve_relative_path (root, "files/share/app-info/xmls"); + appstream_basename = g_strconcat (name, ".xml.gz", NULL); + appstream_file = g_file_get_child (xmls_dir, appstream_basename); + + xml_in = (GInputStream *) g_file_read (appstream_file, cancellable, NULL); + if (xml_in) + { + g_autoptr(FlatpakXml) appstream_root = NULL; + g_autoptr(FlatpakXml) xml_root = flatpak_xml_parse (xml_in, TRUE, + cancellable, error); + if (xml_root == NULL) + return FALSE; + + appstream_root = flatpak_appstream_xml_new (); + if (flatpak_appstream_xml_migrate (xml_root, appstream_root, + full_branch, name, metadata)) + { + g_autoptr(GBytes) xml_data = NULL; + gboolean success = FALSE; + + if (compress) + success = flatpak_appstream_xml_root_to_data (appstream_root, NULL, &xml_data, error); + else + success = flatpak_appstream_xml_root_to_data (appstream_root, &xml_data, NULL, error); + + if (!success) + return FALSE; + + *result = g_steal_pointer (&xml_data); + } + } + + return TRUE; +} + +typedef void (*IterateBundleIconsCallback) (const char *icon_size_name, + GBytes *png_data, + gpointer user_data); + +static gboolean +iterate_bundle_icons (GFile *root, + const char *name, + IterateBundleIconsCallback callback, + gpointer user_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) icons_dir = + g_file_resolve_relative_path (root, + "files/share/app-info/icons/flatpak"); + const char *icon_sizes[] = { "64x64", "128x128" }; + const char *icon_sizes_key[] = { "icon-64", "icon-128" }; + g_autofree char *icon_name = g_strconcat (name, ".png", NULL); + gint i; + + for (i = 0; i < G_N_ELEMENTS (icon_sizes); i++) + { + g_autoptr(GFile) size_dir = g_file_get_child (icons_dir, icon_sizes[i]); + g_autoptr(GFile) icon_file = g_file_get_child (size_dir, icon_name); + g_autoptr(GInputStream) png_in = NULL; + + png_in = (GInputStream *) g_file_read (icon_file, cancellable, NULL); + if (png_in != NULL) + { + g_autoptr(GBytes) png_data = flatpak_read_stream (png_in, FALSE, error); + if (png_data == NULL) + return FALSE; + + callback (icon_sizes_key[i], png_data, user_data); + } + } + + return TRUE; +} + +static void +add_icon_to_metadata (const char *icon_size_name, + GBytes *png_data, + gpointer user_data) +{ + GVariantBuilder *metadata_builder = user_data; + + g_variant_builder_add (metadata_builder, "{sv}", icon_size_name, + g_variant_new_from_bytes (G_VARIANT_TYPE_BYTESTRING, + png_data, TRUE)); +} + +static gboolean build_bundle (OstreeRepo *repo, GFile *file, const char *name, const char *full_branch, const char *from_commit, @@ -117,12 +221,9 @@ GVariantBuilder param_builder; g_autoptr(GKeyFile) keyfile = NULL; - g_autoptr(GFile) xmls_dir = NULL; + g_autoptr(GBytes) xml_data = NULL; g_autoptr(GFile) metadata_file = NULL; - g_autoptr(GFile) appstream_file = NULL; - g_autofree char *appstream_basename = NULL; g_autoptr(GInputStream) in = NULL; - g_autoptr(GInputStream) xml_in = NULL; g_autoptr(GFile) root = NULL; g_autofree char *commit_checksum = NULL; g_autoptr(GBytes) gpg_data = NULL; @@ -143,7 +244,7 @@ * figure out the type. The uint32 is basically a random value, but * it ensures we have both zero and high bits sets, so we don't get * sniffed as text. Also, the last 01 can be used as a version - * later. Furthermore, the use of an uint32 lets use detect + * later. Furthermore, the use of an uint32 lets us detect * byteorder issues. */ g_variant_builder_add (&metadata_builder, "{sv}", "flatpak", @@ -173,59 +274,19 @@ g_variant_new_string (g_bytes_get_data (bytes, NULL))); } - xmls_dir = g_file_resolve_relative_path (root, "files/share/app-info/xmls"); - appstream_basename = g_strconcat (name, ".xml.gz", NULL); - appstream_file = g_file_get_child (xmls_dir, appstream_basename); + if (!get_bundle_appstream_data (root, full_branch, name, keyfile, TRUE, + &xml_data, cancellable, error)) + return FALSE; - xml_in = (GInputStream *) g_file_read (appstream_file, cancellable, NULL); - if (xml_in) + if (xml_data) { - g_autoptr(FlatpakXml) appstream_root = NULL; - g_autoptr(FlatpakXml) xml_root = flatpak_xml_parse (xml_in, TRUE, - cancellable, error); - if (xml_root == NULL) - return FALSE; - - appstream_root = flatpak_appstream_xml_new (); - if (flatpak_appstream_xml_migrate (xml_root, appstream_root, - full_branch, name, keyfile)) - { - g_autoptr(GBytes) xml_data = flatpak_appstream_xml_root_to_data (appstream_root, error); - int i; - g_autoptr(GFile) icons_dir = - g_file_resolve_relative_path (root, - "files/share/app-info/icons/flatpak"); - const char *icon_sizes[] = { "64x64", "128x128" }; - const char *icon_sizes_key[] = { "icon-64", "icon-128" }; - g_autofree char *icon_name = g_strconcat (name, ".png", NULL); - - if (xml_data == NULL) - return FALSE; - - g_variant_builder_add (&metadata_builder, "{sv}", "appdata", - g_variant_new_from_bytes (G_VARIANT_TYPE_BYTESTRING, - xml_data, TRUE)); - - for (i = 0; i < G_N_ELEMENTS (icon_sizes); i++) - { - g_autoptr(GFile) size_dir = g_file_get_child (icons_dir, icon_sizes[i]); - g_autoptr(GFile) icon_file = g_file_get_child (size_dir, icon_name); - g_autoptr(GInputStream) png_in = NULL; - - png_in = (GInputStream *) g_file_read (icon_file, cancellable, NULL); - if (png_in != NULL) - { - g_autoptr(GBytes) png_data = flatpak_read_stream (png_in, FALSE, error); - if (png_data == NULL) - return FALSE; - - g_variant_builder_add (&metadata_builder, "{sv}", icon_sizes_key[i], - g_variant_new_from_bytes (G_VARIANT_TYPE_BYTESTRING, - png_data, TRUE)); - } - } - } + g_variant_builder_add (&metadata_builder, "{sv}", "appdata", + g_variant_new_from_bytes (G_VARIANT_TYPE_BYTESTRING, + xml_data, TRUE)); + if (!iterate_bundle_icons (root, name, add_icon_to_metadata, + &metadata_builder, cancellable, error)) + return FALSE; } if (opt_repo_url) @@ -234,11 +295,7 @@ if (opt_runtime_repo) g_variant_builder_add (&metadata_builder, "{sv}", "runtime-repo", g_variant_new_string (opt_runtime_repo)); -#ifdef FLATPAK_ENABLE_P2P collection_id = ostree_repo_get_collection_id (repo); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ g_variant_builder_add (&metadata_builder, "{sv}", "collection-id", g_variant_new_string (collection_id ? collection_id : "")); @@ -311,6 +368,20 @@ return TRUE; } +static void +add_icon_to_annotations (const char *icon_size_name, + GBytes *png_data, + gpointer user_data) +{ + GHashTable *annotations = user_data; + g_autofree char *encoded = g_base64_encode (g_bytes_get_data (png_data, NULL), + g_bytes_get_size (png_data)); + + g_hash_table_replace (annotations, + g_strconcat ("org.freedesktop.appstream.", icon_size_name, NULL), + g_strconcat ("data:image/png;base64,", encoded, NULL)); +} + static gboolean build_oci (OstreeRepo *repo, GFile *dir, const char *name, const char *ref, @@ -333,6 +404,8 @@ g_autoptr(FlatpakOciManifest) manifest = NULL; g_autoptr(FlatpakOciIndex) index = NULL; g_autoptr(GFile) metadata_file = NULL; + g_autoptr(GKeyFile) keyfile = NULL; + g_autoptr(GBytes) xml_data = NULL; guint64 installed_size = 0; GHashTable *annotations; gsize metadata_size; @@ -400,6 +473,14 @@ if (g_file_load_contents (metadata_file, cancellable, &metadata_contents, &metadata_size, NULL, NULL) && g_utf8_validate (metadata_contents, -1, NULL)) { + keyfile = g_key_file_new (); + + if (!g_key_file_load_from_data (keyfile, + metadata_contents, + metadata_size, + G_KEY_FILE_NONE, error)) + return FALSE; + g_hash_table_replace (annotations, g_strdup ("org.flatpak.metadata"), g_steal_pointer (&metadata_contents)); @@ -416,13 +497,30 @@ g_strdup ("org.flatpak.download-size"), g_strdup_printf ("%" G_GUINT64_FORMAT, layer_desc->size)); + if (!get_bundle_appstream_data (root, ref, name, keyfile, FALSE, + &xml_data, cancellable, error)) + return FALSE; + + if (xml_data) + { + gsize xml_data_len; + + g_hash_table_replace (annotations, + g_strdup ("org.freedesktop.appstream.appdata"), + g_bytes_unref_to_data (g_steal_pointer (&xml_data), &xml_data_len)); + + if (!iterate_bundle_icons (root, name, add_icon_to_annotations, + annotations, cancellable, error)) + return FALSE; + } + manifest_desc = flatpak_oci_registry_store_json (registry, FLATPAK_JSON (manifest), cancellable, error); if (manifest_desc == NULL) return FALSE; flatpak_oci_export_annotations (manifest->annotations, manifest_desc->annotations); - index = flatpak_oci_registry_load_index (registry, NULL, NULL, NULL, NULL); + index = flatpak_oci_registry_load_index (registry, NULL, NULL); if (index == NULL) index = flatpak_oci_index_new (); diff -Nru flatpak-0.11.3/app/flatpak-builtins-build.c flatpak-1.0.7/app/flatpak-builtins-build.c --- flatpak-0.11.3/app/flatpak-builtins-build.c 2018-02-19 10:17:09.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,8 +31,8 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static gboolean opt_runtime; static char *opt_build_dir; @@ -75,6 +75,81 @@ fcntl (g_array_index (fd_array, int, i), F_SETFD, 0); } +static gboolean +find_matching_extension_group_in_metakey (GKeyFile *metakey, + const char *id, + const char *specified_tag, + char **out_extension_group, + GError **error) +{ + g_auto(GStrv) groups = NULL; + g_autofree char *extension_prefix = NULL; + const char *last_seen_group = NULL; + guint n_extension_groups = 0; + GStrv iter = NULL; + + g_return_val_if_fail (out_extension_group != NULL, FALSE); + + groups = g_key_file_get_groups (metakey, NULL); + extension_prefix = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION, + id, + NULL); + + for (iter = groups; *iter != NULL; ++iter) + { + const char *group_name = *iter; + const char *extension_name = NULL; + ; + g_autofree char *extension_tag = NULL; + + if (!g_str_has_prefix (group_name, extension_prefix)) + continue; + + ++n_extension_groups; + extension_name = group_name + strlen (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION); + + flatpak_parse_extension_with_tag (extension_name, + NULL, + &extension_tag); + + /* Check 1: Does this extension have the same tag as the + * specified tag (including if both are NULL)? If so, use it */ + if (g_strcmp0 (extension_tag, specified_tag) == 0) + { + *out_extension_group = g_strdup (group_name); + return TRUE; + } + + /* Check 2: Keep track of this extension group as the last + * seen one. If it was the only one then we can use it. */ + last_seen_group = group_name; + } + + if (n_extension_groups == 1 && last_seen_group != NULL) + { + *out_extension_group = g_strdup (last_seen_group); + return TRUE; + } + else if (n_extension_groups == 0) + { + /* Check 2: No extension groups, this is not an error case as + * we check the parent later. */ + *out_extension_group = NULL; + return TRUE; + } + + g_set_error (error, + G_IO_ERROR, + G_IO_ERROR_FAILED, + "Unable to resolve extension %s to a unique " + "extension point in the parent app or runtime. Consider " + "using the 'tag' key in ExtensionOf to disambiguate which " + "extension point to build against.", + id); + + return FALSE; +} + gboolean flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError **error) { @@ -96,6 +171,7 @@ g_autofree char *runtime = NULL; g_autofree char *runtime_ref = NULL; g_autofree char *extensionof_ref = NULL; + g_autofree char *extensionof_tag = NULL; g_autofree char *extension_point = NULL; g_autofree char *extension_tmpfs_point = NULL; g_autoptr(GKeyFile) metakey = NULL; @@ -120,7 +196,11 @@ gboolean is_extension = FALSE; gboolean is_app_extension = FALSE; g_autofree char *app_info_path = NULL; + g_autofree char *app_extensions = NULL; g_autofree char *runtime_extensions = NULL; + g_autofree char *instance_id_host_dir = NULL; + char pid_str[64]; + g_autofree char *pid_path = NULL; g_autoptr(GFile) app_id_dir = NULL; context = g_option_context_new (_("DIRECTORY [COMMAND [args...]] - Build in directory")); @@ -188,6 +268,9 @@ is_app_extension = TRUE; } + extensionof_tag = g_key_file_get_string (metakey, + FLATPAK_METADATA_GROUP_EXTENSION_OF, + FLATPAK_METADATA_KEY_TAG, NULL); id = g_key_file_get_string (metakey, group, FLATPAK_METADATA_KEY_NAME, error); if (id == NULL) @@ -217,7 +300,7 @@ } else { - runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, cancellable, error); + runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, NULL, cancellable, error); if (runtime_deploy == NULL) return FALSE; @@ -255,14 +338,29 @@ char *x_subdir = NULL; g_autofree char *bare_extension_point = NULL; - extensionof_deploy = flatpak_find_deploy_for_ref (extensionof_ref, cancellable, error); + extensionof_deploy = flatpak_find_deploy_for_ref (extensionof_ref, NULL, cancellable, error); if (extensionof_deploy == NULL) return FALSE; x_metakey = flatpak_deploy_get_metadata (extensionof_deploy); - x_group = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION, id, NULL); - if (!g_key_file_has_group (x_metakey, x_group)) + /* Since we have tagged extensions, it is possible that an extension could + * be listed more than once in the "parent" flatpak. In that case, we should + * try and disambiguate using the following rules: + * + * 1. Use the 'tag=' key in the ExtensionOfSection and if not found: + * 2. Use the only extension point available if there is only one. + * 3. If there are no matching groups, return NULL. + * 4. In all other cases, error out. + */ + if (!find_matching_extension_group_in_metakey (x_metakey, + id, + extensionof_tag, + &x_group, + error)) + return FALSE; + + if (x_group == NULL) { /* Failed, look for subdirectories=true parent */ char *last_dot = strrchr (id, '.'); @@ -270,10 +368,15 @@ if (last_dot != NULL) { char *parent_id = g_strndup (id, last_dot - id); - g_free (x_group); - x_group = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION, - parent_id, NULL); - if (g_key_file_get_boolean (x_metakey, x_group, + if (!find_matching_extension_group_in_metakey (x_metakey, + parent_id, + extensionof_tag, + &x_group, + error)) + return FALSE; + + if (x_group != NULL && + g_key_file_get_boolean (x_metakey, x_group, FLATPAK_METADATA_KEY_SUBDIRECTORIES, NULL)) x_subdir = last_dot + 1; @@ -310,18 +413,29 @@ extension_point = g_build_filename (bare_extension_point, x_subdir_suffix, NULL); } + app_context = flatpak_app_compute_permissions (metakey, + runtime_metakey, + error); + if (app_context == NULL) + return FALSE; + + flatpak_context_allow_host_fs (app_context); + flatpak_context_merge (app_context, arg_context); + 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 | + FLATPAK_RUN_FLAG_DEVEL | FLATPAK_RUN_FLAG_MULTIARCH | FLATPAK_RUN_FLAG_NO_SESSION_HELPER | FLATPAK_RUN_FLAG_SET_PERSONALITY | FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY; if (opt_die_with_parent) run_flags |= FLATPAK_RUN_FLAG_DIE_WITH_PARENT; if (custom_usr) run_flags |= FLATPAK_RUN_FLAG_WRITABLE_ETC; + run_flags |= flatpak_context_get_run_flags (app_context); + /* Unless manually specified, we disable dbus proxy */ if (!flatpak_context_get_needs_session_bus_proxy (arg_context)) run_flags |= FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY; @@ -365,10 +479,7 @@ "--tmpfs", extension_tmpfs_point, NULL); - if (extension_point) - flatpak_bwrap_add_args (bwrap, - "--bind", flatpak_file_get_path_cached (res_files), extension_point, - NULL); + /* We add the actual bind below so that we're not shadowed by other extensions or their tmpfs */ if (extension_point) dest = extension_point; @@ -378,10 +489,10 @@ dest = g_strdup ("/usr"); flatpak_bwrap_add_args (bwrap, - "--setenv", "FLATPAK_DEST", dest, - "--setenv", "FLATPAK_ID", id, - "--setenv", "FLATPAK_ARCH", runtime_ref_parts[2], - NULL); + "--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. @@ -395,28 +506,36 @@ "--bind", flatpak_file_get_path_cached (var_tmp), "/var/tmp", NULL); - app_context = flatpak_app_compute_permissions (metakey, - runtime_metakey, - error); - if (app_context == NULL) - return FALSE; - - flatpak_context_allow_host_fs (app_context); - flatpak_context_merge (app_context, arg_context); - flatpak_run_apply_env_vars (bwrap, app_context); - if (!custom_usr && !(is_extension && !is_app_extension) && + if (is_app) + { + /* We don't actually know the final branchname yet, so use "nobranch" as fallback to avoid unexpected matches. + This means any extension point used at build time must have explicit versions to work. */ + g_autofree char *fake_ref = g_strdup_printf ("app/%s/%s/nobranch", id, runtime_ref_parts[2]); + if (!flatpak_run_add_extension_args (bwrap, metakey, fake_ref, FALSE, &app_extensions, cancellable, error)) + return FALSE; + } + + if (!custom_usr && !flatpak_run_add_extension_args (bwrap, runtime_metakey, runtime_ref, FALSE, &runtime_extensions, cancellable, error)) return FALSE; + /* Mount this after the above extensions so we always win */ + if (extension_point) + flatpak_bwrap_add_args (bwrap, + "--bind", flatpak_file_get_path_cached (res_files), extension_point, + NULL); + if (!flatpak_run_add_app_info_args (bwrap, - app_files, NULL, NULL, + app_files, NULL, app_extensions, runtime_files, runtime_deploy_data, runtime_extensions, id, NULL, runtime_ref, - app_context, + app_id_dir, app_context, NULL, + FALSE, TRUE, &app_info_path, + &instance_id_host_dir, error)) return FALSE; @@ -447,6 +566,9 @@ NULL); } + if (!flatpak_bwrap_bundle_args (bwrap, 1, -1, FALSE, error)) + return FALSE; + flatpak_bwrap_add_args (bwrap, command, NULL); flatpak_bwrap_append_argsv (bwrap, &argv[rest_argv_start + 2], @@ -454,6 +576,10 @@ g_ptr_array_add (bwrap->argv, NULL); + g_snprintf (pid_str, sizeof (pid_str), "%d", getpid ()); + pid_path = g_build_filename (instance_id_host_dir, "pid", NULL); + g_file_set_contents (pid_path, pid_str, -1, NULL); + /* Ensure we unset O_CLOEXEC */ child_setup (bwrap->fds); if (execvpe (flatpak_get_bwrap (), (char **) bwrap->argv->pdata, bwrap->envp) == -1) diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-commit-from.c flatpak-1.0.7/app/flatpak-builtins-build-commit-from.c --- flatpak-0.11.3/app/flatpak-builtins-build-commit-from.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-commit-from.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,8 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" +#include "parse-datetime.h" static char *opt_src_repo; static char *opt_src_ref; @@ -39,21 +40,27 @@ static gboolean opt_update_appstream; static gboolean opt_no_update_summary; static gboolean opt_untrusted; +static gboolean opt_disable_fsync; static gboolean opt_force; static char **opt_gpg_key_ids; static char *opt_gpg_homedir; +static char *opt_endoflife; +static char *opt_timestamp; static GOptionEntry options[] = { { "src-repo", 's', 0, G_OPTION_ARG_STRING, &opt_src_repo, N_("Source repo dir"), N_("SRC-REPO") }, - { "src-ref", 's', 0, G_OPTION_ARG_STRING, &opt_src_ref, N_("Source repo ref"), N_("SRC-REF") }, + { "src-ref", 0, 0, G_OPTION_ARG_STRING, &opt_src_ref, N_("Source repo ref"), N_("SRC-REF") }, { "untrusted", 0, 0, G_OPTION_ARG_NONE, &opt_untrusted, "Do not trust SRC-REPO", NULL }, { "force", 0, 0, G_OPTION_ARG_NONE, &opt_force, "Always commit, even if same content", NULL }, - { "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, N_("One line subject"), N_("SUBJECT") }, + { "subject", 0, 0, G_OPTION_ARG_STRING, &opt_subject, N_("One line subject"), N_("SUBJECT") }, { "body", 'b', 0, G_OPTION_ARG_STRING, &opt_body, N_("Full description"), N_("BODY") }, { "update-appstream", 0, 0, G_OPTION_ARG_NONE, &opt_update_appstream, N_("Update the appstream branch"), NULL }, { "no-update-summary", 0, 0, G_OPTION_ARG_NONE, &opt_no_update_summary, N_("Don't update the summary"), NULL }, { "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_gpg_key_ids, N_("GPG Key ID to sign the commit 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") }, + { "end-of-life", 0, 0, G_OPTION_ARG_STRING, &opt_endoflife, N_("Mark build as end-of-life"), N_("REASON") }, + { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, N_("Override the timestamp of the commit (NOW for current time)"), N_("TIMESTAMP") }, + { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL }, { NULL } }; @@ -109,11 +116,12 @@ static GVariant * new_bytearray (const guchar *data, - gsize len) + 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; } @@ -122,9 +130,9 @@ const char *src_commit, OstreeRepo *dst_repo, const char *dst_commit, - GVariant *dst_commitv, + GVariant *dst_commitv, const char *from, - GError **error) + GError **error) { g_autoptr(GFile) src_delta_file = NULL; g_autoptr(GFile) dst_delta_file = NULL; @@ -167,12 +175,13 @@ 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)) + if (ostree_repo_read_commit_detached_metadata (dst_repo, dst_commit, &dst_detached, NULL, NULL) && + dst_detached != 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, 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); @@ -223,6 +232,8 @@ g_autoptr(GPtrArray) src_refs = NULL; g_autoptr(GPtrArray) resolved_src_refs = NULL; OstreeRepoCommitState src_commit_state; + struct timespec ts; + guint64 timestamp; int i; context = g_option_context_new (_("DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)")); @@ -236,7 +247,7 @@ dst_repo_arg = argv[1]; - dst_refs = (const char **)argv + 2; + dst_refs = (const char **) argv + 2; n_dst_refs = argc - 2; if (opt_src_repo == NULL && n_dst_refs != 1) @@ -248,6 +259,12 @@ if (opt_src_repo == NULL && opt_src_ref == NULL) return flatpak_fail (error, _("Either --src-repo or --src-ref must be specified.")); + if (opt_timestamp) + { + if (!parse_datetime (&ts, opt_timestamp, NULL)) + return flatpak_fail (error, _("Could not parse '%s'"), opt_timestamp); + } + dst_repofile = g_file_new_for_commandline_arg (dst_repo_arg); if (!g_file_query_exists (dst_repofile, cancellable)) return flatpak_fail (error, _("'%s' is not a valid repository"), dst_repo_arg); @@ -256,6 +273,9 @@ if (!ostree_repo_open (dst_repo, cancellable, error)) return FALSE; + if (opt_disable_fsync) + ostree_repo_set_disable_fsync (dst_repo, TRUE); + if (opt_src_repo) { src_repofile = g_file_new_for_commandline_arg (opt_src_repo); @@ -290,7 +310,7 @@ cancellable, error)) return FALSE; - keys = (const char **)g_hash_table_get_keys_as_array (all_src_refs, NULL); + keys = (const char **) g_hash_table_get_keys_as_array (all_src_refs, NULL); for (i = 0; keys[i] != NULL; i++) { @@ -299,7 +319,7 @@ g_ptr_array_add (src_refs, g_strdup (keys[i])); } n_dst_refs = src_refs->len; - dst_refs = (const char **)src_refs->pdata; + dst_refs = (const char **) src_refs->pdata; } else { @@ -326,6 +346,7 @@ GVariantBuilder builder; g_autoptr(OstreeAsyncProgress) progress = NULL; g_auto(GLnxConsoleRef) console = { 0, }; + g_autoptr(GVariant) options = NULL; gboolean res; if (opt_untrusted) @@ -339,13 +360,14 @@ g_variant_builder_add (&builder, "{s@v}", "flags", g_variant_new_variant (g_variant_new_int32 (pullflags))); g_variant_builder_add (&builder, "{s@v}", "refs", - g_variant_new_variant (g_variant_new_strv ((const char *const*) resolved_src_refs->pdata, + g_variant_new_variant (g_variant_new_strv ((const char * const *) resolved_src_refs->pdata, resolved_src_refs->len))); g_variant_builder_add (&builder, "{s@v}", "depth", g_variant_new_variant (g_variant_new_int32 (0))); + options = g_variant_ref_sink (g_variant_builder_end (&builder)); res = ostree_repo_pull_with_options (dst_repo, src_repo_uri, - g_variant_builder_end (&builder), + options, progress, cancellable, error); @@ -366,7 +388,7 @@ if (transaction == NULL) return FALSE; - for (i = 0; i < resolved_src_refs->len; i ++) + for (i = 0; i < resolved_src_refs->len; i++) { const char *dst_ref = dst_refs[i]; const char *resolved_ref = g_ptr_array_index (resolved_src_refs, i); @@ -378,6 +400,7 @@ g_autoptr(OstreeMutableTree) mtree = NULL; g_autoptr(GFile) dst_root = NULL; g_autoptr(GVariant) commitv_metadata = NULL; + g_autoptr(GVariant) metadata = NULL; const char *subject; const char *body; g_autofree char *commit_checksum = NULL; @@ -418,23 +441,19 @@ commitv_metadata = g_variant_get_child_value (src_commitv, 0); - g_variant_get_child (src_commitv, 3, "s", &subject); + g_variant_get_child (src_commitv, 3, "&s", &subject); if (opt_subject) - subject = (const char *)opt_subject; - g_variant_get_child (src_commitv, 4, "s", &body); + subject = (const char *) opt_subject; + g_variant_get_child (src_commitv, 4, "&s", &body); if (opt_body) - body = (const char *)opt_body; + body = (const char *) opt_body; -#ifdef FLATPAK_ENABLE_P2P dst_collection_id = ostree_repo_get_collection_id (dst_repo); -#endif /* FLATPAK_ENABLE_P2P */ /* Copy old metadata */ g_variant_builder_init (&metadata_builder, G_VARIANT_TYPE ("a{sv}")); - /* Bindings. xa.ref is deprecated but added anyway for backwards compatibility. - * Add the bindings even if we are not built with P2P support, since other - * flatpak builds might be. */ + /* Bindings. xa.ref is deprecated but added anyway for backwards compatibility. */ g_variant_builder_add (&metadata_builder, "{sv}", "ostree.collection-binding", g_variant_new_string (dst_collection_id ? dst_collection_id : "")); g_variant_builder_add (&metadata_builder, "{sv}", "ostree.ref-binding", @@ -459,12 +478,25 @@ strcmp (key, "ostree.ref-binding") == 0) continue; + if (opt_endoflife && + strcmp (key, OSTREE_COMMIT_META_KEY_ENDOFLIFE) == 0) + continue; + g_variant_builder_add_value (&metadata_builder, child); } - if (!ostree_repo_write_commit_with_time (dst_repo, dst_parent, subject, body, g_variant_builder_end (&metadata_builder), + if (opt_endoflife && *opt_endoflife) + g_variant_builder_add (&metadata_builder, "{sv}", OSTREE_COMMIT_META_KEY_ENDOFLIFE, + g_variant_new_string (opt_endoflife)); + + timestamp = ostree_commit_get_timestamp (src_commitv); + if (opt_timestamp) + timestamp = ts.tv_sec; + + metadata = g_variant_ref_sink (g_variant_builder_end (&metadata_builder)); + if (!ostree_repo_write_commit_with_time (dst_repo, dst_parent, subject, body, metadata, OSTREE_REPO_FILE (dst_root), - ostree_commit_get_timestamp (src_commitv), + timestamp, &commit_checksum, cancellable, error)) return FALSE; @@ -500,14 +532,12 @@ } } -#ifdef FLATPAK_ENABLE_P2P if (dst_collection_id != NULL) { OstreeCollectionRef ref = { (char *) dst_collection_id, (char *) dst_ref }; ostree_repo_transaction_set_collection_ref (dst_repo, &ref, commit_checksum); } else -#endif /* FLATPAK_ENABLE_P2P */ { ostree_repo_transaction_set_ref (dst_repo, NULL, dst_ref, commit_checksum); } diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-export.c flatpak-1.0.7/app/flatpak-builtins-build-export.c --- flatpak-0.11.3/app/flatpak-builtins-build-export.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-export.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,8 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" +#include "parse-datetime.h" static char *opt_subject; static char *opt_body; @@ -38,6 +39,7 @@ static gboolean opt_runtime; static gboolean opt_update_appstream; static gboolean opt_no_update_summary; +static gboolean opt_disable_fsync; static char **opt_gpg_key_ids; static char **opt_exclude; static char **opt_include; @@ -45,9 +47,8 @@ static char *opt_files; static char *opt_metadata; static char *opt_timestamp = NULL; -#ifdef FLATPAK_ENABLE_P2P +static char *opt_endoflife; static char *opt_collection_id = NULL; -#endif /* FLATPAK_ENABLE_P2P */ static GOptionEntry options[] = { { "subject", 's', 0, G_OPTION_ARG_STRING, &opt_subject, N_("One line subject"), N_("SUBJECT") }, @@ -62,10 +63,10 @@ { "exclude", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_exclude, N_("Files to exclude"), N_("PATTERN") }, { "include", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_include, N_("Excluded files to include"), N_("PATTERN") }, { "gpg-homedir", 0, 0, G_OPTION_ARG_STRING, &opt_gpg_homedir, N_("GPG Homedir to use when looking for keyrings"), N_("HOMEDIR") }, - { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, N_("Override the timestamp of the commit"), N_("ISO-8601-TIMESTAMP") }, -#ifdef FLATPAK_ENABLE_P2P + { "end-of-life", 0, 0, G_OPTION_ARG_STRING, &opt_endoflife, N_("Mark build as end-of-life"), N_("REASON") }, + { "timestamp", 0, 0, G_OPTION_ARG_STRING, &opt_timestamp, N_("Override the timestamp of the commit"), N_("TIMESTAMP") }, { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), "COLLECTION-ID" }, -#endif /* FLATPAK_ENABLE_P2P */ + { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL }, { NULL } }; @@ -181,7 +182,7 @@ * case. So, we canonicalize the mode to writable only by the user, * readable to all, and executable for all for directories and * files that the user can execute. - */ + */ mode = g_file_info_get_attribute_uint32 (file_info, "unix::mode"); if (g_file_info_get_file_type (file_info) == G_FILE_TYPE_DIRECTORY) mode = 0755 | S_IFDIR; @@ -267,26 +268,28 @@ if (!enumerator) return FALSE; - do { - g_autoptr(GFileInfo) info = g_file_enumerator_next_file (enumerator, NULL, NULL); - GFileType type; - const char *name; + do + { + g_autoptr(GFileInfo) info = g_file_enumerator_next_file (enumerator, NULL, NULL); + GFileType type; + const char *name; - if (!info) - return FALSE; + if (!info) + return FALSE; - type = g_file_info_get_file_type (info); - name = g_file_info_get_name (info); + type = g_file_info_get_file_type (info); + name = g_file_info_get_name (info); - if (type == G_FILE_TYPE_REGULAR && strcmp (name, filename) == 0) - return TRUE; - else if (type == G_FILE_TYPE_DIRECTORY) - { - g_autoptr(GFile) dir = g_file_get_child (base, name); - if (find_file_in_tree (dir, filename)) - return TRUE; - } - } while (1); + if (type == G_FILE_TYPE_REGULAR && strcmp (name, filename) == 0) + return TRUE; + else if (type == G_FILE_TYPE_DIRECTORY) + { + g_autoptr(GFile) dir = g_file_get_child (base, name); + if (find_file_in_tree (dir, filename)) + return TRUE; + } + } + while (1); return FALSE; } @@ -310,15 +313,16 @@ } static gboolean -validate_desktop_file (GFile *desktop_file, - GFile *export, - GFile *files, +validate_desktop_file (GFile *desktop_file, + GFile *export, + GFile *files, const char *app_id, - char **icon, - gboolean *activatable, - GError **error) + char **icon, + gboolean *activatable, + GError **error) { g_autofree char *path = g_file_get_path (desktop_file); + g_autoptr(GSubprocess) subprocess = NULL; g_autofree char *stdout_buf = NULL; g_autofree char *stderr_buf = NULL; @@ -394,9 +398,9 @@ static gboolean validate_icon (const char *icon, - GFile *export, + GFile *export, const char *app_id, - GError **error) + GError **error) { g_autoptr(GFile) icondir = NULL; g_autofree char *png = NULL; @@ -416,13 +420,14 @@ } static gboolean -validate_service_file (GFile *service_file, - gboolean activatable, - GFile *files, +validate_service_file (GFile *service_file, + gboolean activatable, + GFile *files, const char *app_id, - GError **error) + GError **error) { g_autofree char *path = g_file_get_path (service_file); + g_autoptr(GKeyFile) key_file = NULL; g_autofree char *name = NULL; g_autofree char *command = NULL; @@ -481,6 +486,7 @@ validate_exports (GFile *export, GFile *files, const char *app_id, GError **error) { g_autofree char *desktop_path = NULL; + g_autoptr(GFile) desktop_file = NULL; g_autofree char *service_path = NULL; g_autoptr(GFile) service_file = NULL; @@ -655,8 +661,8 @@ g_autoptr(GVariant) metadata_dict_v = NULL; gboolean is_runtime = FALSE; gboolean is_extension = FALSE; - guint64 installed_size = 0,download_size = 0; - GTimeVal ts; + guint64 installed_size = 0, download_size = 0; + struct timespec ts; const char *collection_id; context = g_option_context_new (_("LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory")); @@ -685,14 +691,12 @@ else branch = "master"; -#ifdef FLATPAK_ENABLE_P2P if (opt_collection_id != NULL && !ostree_validate_collection_id (opt_collection_id, &my_error)) { flatpak_fail (error, _("‘%s’ is not a valid collection ID: %s"), opt_collection_id, my_error->message); goto out; } -#endif /* FLATPAK_ENABLE_P2P */ if (!flatpak_is_valid_branch (branch, &my_error)) { @@ -772,7 +776,7 @@ body = g_strdup_printf ("Name: %s\n" "Arch: %s\n" "Branch: %s\n" - "Built with: "PACKAGE_STRING"\n", + "Built with: "PACKAGE_STRING "\n", id, arch, branch); full_branch = g_strconcat ((opt_runtime || is_runtime) ? "runtime/" : "app/", id, "/", arch, "/", branch, NULL); @@ -789,7 +793,6 @@ if (!ostree_repo_resolve_rev (repo, full_branch, TRUE, &parent, error)) goto out; -#ifdef FLATPAK_ENABLE_P2P if (opt_collection_id != NULL && g_strcmp0 (ostree_repo_get_collection_id (repo), opt_collection_id) != 0) { @@ -797,27 +800,23 @@ opt_collection_id, ostree_repo_get_collection_id (repo)); goto out; } -#endif /* FLATPAK_ENABLE_P2P */ } else { -#ifdef FLATPAK_ENABLE_P2P if (opt_collection_id != NULL && !ostree_repo_set_collection_id (repo, opt_collection_id, error)) goto out; -#endif /* FLATPAK_ENABLE_P2P */ if (!ostree_repo_create (repo, OSTREE_REPO_MODE_ARCHIVE_Z2, cancellable, error)) goto out; } + if (opt_disable_fsync) + ostree_repo_set_disable_fsync (repo, TRUE); + /* Get the canonical collection ID which we’ll use for the commit. This might * be %NULL if the existing repo doesn’t have one and none was specified on * the command line. */ -#ifdef FLATPAK_ENABLE_P2P collection_id = ostree_repo_get_collection_id (repo); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) goto out; @@ -883,8 +882,7 @@ goto out; /* Binding information. xa.ref is deprecated in favour of the OSTree keys, but - * keep it around for backwards compatibility. Write the bindings even if - * we’re compiled without P2P support, since other flatpak builds might be. */ + * keep it around for backwards compatibility. */ g_variant_dict_insert_value (&metadata_dict, "ostree.collection-binding", g_variant_new_string ((collection_id != NULL) ? collection_id : "")); g_variant_dict_insert_value (&metadata_dict, "ostree.ref-binding", @@ -895,17 +893,17 @@ g_variant_dict_insert_value (&metadata_dict, "xa.installed-size", g_variant_new_uint64 (GUINT64_TO_BE (installed_size))); g_variant_dict_insert_value (&metadata_dict, "xa.download-size", g_variant_new_uint64 (GUINT64_TO_BE (download_size))); + if (opt_endoflife && *opt_endoflife) + g_variant_dict_insert_value (&metadata_dict, OSTREE_COMMIT_META_KEY_ENDOFLIFE, + g_variant_new_string (opt_endoflife)); + metadata_dict_v = g_variant_ref_sink (g_variant_dict_end (&metadata_dict)); /* The timestamp is used for the commit metadata and AppStream data */ if (opt_timestamp != NULL) { - if (!g_time_val_from_iso8601 (opt_timestamp, &ts)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Could not parse '%s'", opt_timestamp); - goto out; - } + if (!parse_datetime (&ts, opt_timestamp, NULL)) + return flatpak_fail (error, _("Could not parse '%s'"), opt_timestamp); } if (opt_timestamp == NULL) @@ -943,14 +941,12 @@ } } -#ifdef FLATPAK_ENABLE_P2P if (collection_id != NULL) { OstreeCollectionRef ref = { (char *) collection_id, full_branch }; ostree_repo_transaction_set_collection_ref (repo, &ref, commit_checksum); } else -#endif /* FLATPAK_ENABLE_P2P */ { ostree_repo_transaction_set_ref (repo, NULL, full_branch, commit_checksum); } diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-finish.c flatpak-1.0.7/app/flatpak-builtins-build-finish.c --- flatpak-0.11.3/app/flatpak-builtins-build-finish.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-finish.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,15 +31,18 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-context-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static char *opt_command; static char *opt_require_version; static char **opt_extra_data; static char **opt_extensions; +static char **opt_remove_extensions; static char **opt_metadata; static gboolean opt_no_exports; +static gboolean opt_no_inherit_permissions; static int opt_extension_prio = G_MININT; static char *opt_sdk; static char *opt_runtime; @@ -50,11 +53,13 @@ { "no-exports", 0, 0, G_OPTION_ARG_NONE, &opt_no_exports, N_("Don't process exports"), NULL }, { "extra-data", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_extra_data, N_("Extra data info") }, { "extension", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_extensions, N_("Add extension point info"), N_("NAME=VARIABLE[=VALUE]") }, + { "remove-extension", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_remove_extensions, N_("Remove extension point info"), N_("NAME") }, { "extension-priority", 0, 0, G_OPTION_ARG_INT, &opt_extension_prio, N_("Set extension priority (only for extensions)"), N_("0") }, { "sdk", 0, 0, G_OPTION_ARG_STRING, &opt_sdk, N_("Change the sdk used for the app"), N_("SDK") }, { "runtime", 0, 0, G_OPTION_ARG_STRING, &opt_runtime, N_("Change the runtime used for the app"), N_("RUNTIME") }, { "metadata", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_metadata, N_("Set generic metadata option"), N_("GROUP=KEY[=VALUE]") }, - { NULL } + { "no-inherit-permissions", 0, 0, G_OPTION_ARG_NONE, &opt_no_inherit_permissions, N_("Don't inherit permissions from runtime"), NULL }, + { NULL } }; static gboolean @@ -63,7 +68,9 @@ const char *source_relpath, int destination_parent_fd, const char *destination_name, - const char *required_prefix, + char **allowed_prefixes, + char **allowed_extensions, + gboolean require_exact_match, GCancellable *cancellable, GError **error) { @@ -126,17 +133,34 @@ g_autofree gchar *child_relpath = g_build_filename (source_relpath, dent->d_name, NULL); if (!export_dir (source_iter.fd, dent->d_name, child_relpath, destination_dfd, dent->d_name, - required_prefix, cancellable, error)) + allowed_prefixes, allowed_extensions, require_exact_match, + cancellable, error)) return FALSE; } else if (S_ISREG (stbuf.st_mode)) { + g_autofree gchar *name_without_extension = NULL; + int i; + source_printable = g_build_filename (source_relpath, dent->d_name, NULL); + for (i = 0; allowed_extensions[i] != NULL; i++) + { + if (g_str_has_suffix (dent->d_name, allowed_extensions[i])) + break; + } - if (!flatpak_has_name_prefix (dent->d_name, required_prefix)) + if (allowed_extensions[i] == NULL) { - g_print (_("Not exporting %s, wrong prefix\n"), source_printable); + g_print (_("Not exporting %s, wrong extension\n"), source_printable); + continue; + } + + name_without_extension = g_strndup (dent->d_name, strlen (dent->d_name) - strlen (allowed_extensions[i])); + + if (!flatpak_name_matches_one_wildcard_prefix (name_without_extension, (const char * const *) allowed_prefixes, require_exact_match)) + { + g_print (_("Not exporting %s, non-allowed export filename\n"), source_printable); continue; } @@ -177,7 +201,9 @@ copy_exports (GFile *source, GFile *destination, const char *source_prefix, - const char *required_prefix, + char **allowed_prefixes, + char **allowed_extensions, + gboolean require_exact_match, GCancellable *cancellable, GError **error) { @@ -187,17 +213,23 @@ /* The fds are closed by this call */ if (!export_dir (AT_FDCWD, flatpak_file_get_path_cached (source), source_prefix, AT_FDCWD, flatpak_file_get_path_cached (destination), - required_prefix, cancellable, error)) + allowed_prefixes, allowed_extensions, require_exact_match, + cancellable, error)) return FALSE; return TRUE; } static gboolean -collect_exports (GFile *base, const char *app_id, GCancellable *cancellable, GError **error) +collect_exports (GFile *base, + const char *app_id, + FlatpakContext *arg_context, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) files = NULL; g_autoptr(GFile) export = NULL; + int i; const char *paths[] = { "share/applications", /* Copy desktop files */ "share/mime/packages", /* Copy MIME Type files */ @@ -206,7 +238,7 @@ "share/gnome-shell/search-providers", /* Search providers */ NULL, }; - int i; + files = g_file_get_child (base, "files"); @@ -220,20 +252,35 @@ for (i = 0; paths[i]; i++) { - g_autoptr(GFile) src = NULL; - src = g_file_resolve_relative_path (files, paths[i]); + const char * path = paths[i]; + g_autoptr(GFile) src = g_file_resolve_relative_path (files, path); + g_auto(GStrv) allowed_prefixes = NULL; + g_auto(GStrv) allowed_extensions = NULL; + gboolean require_exact_match = FALSE; + + if (!flatpak_get_allowed_exports (path, app_id, arg_context, + &allowed_extensions, &allowed_prefixes, &require_exact_match)) + return flatpak_fail (error, "Unexpectedly not allowed to export %s", path); + if (g_file_query_exists (src, cancellable)) { - g_debug ("Exporting from %s", paths[i]); + g_debug ("Exporting from %s", path); g_autoptr(GFile) dest = NULL; g_autoptr(GFile) dest_parent = NULL; - dest = g_file_resolve_relative_path (export, paths[i]); + dest = g_file_resolve_relative_path (export, path); dest_parent = g_file_get_parent (dest); - g_debug ("Ensuring export/%s parent exists", paths[i]); + g_debug ("Ensuring export/%s parent exists", path); if (!flatpak_mkdir_p (dest_parent, cancellable, error)) return FALSE; - g_debug ("Copying from files/%s", paths[i]); - if (!copy_exports (src, dest, paths[i], app_id, cancellable, error)) + g_debug ("Copying from files/%s", path); + if (!copy_exports (src, + dest, + path, + allowed_prefixes, + allowed_extensions, + require_exact_match, + cancellable, + error)) return FALSE; } } @@ -251,6 +298,7 @@ g_autofree char *path = NULL; g_autoptr(GKeyFile) keyfile = NULL; g_autoptr(FlatpakContext) app_context = NULL; + g_autoptr(FlatpakContext) inherited_context = NULL; GError *temp_error = NULL; const char *group; int i; @@ -400,12 +448,61 @@ g_print (_("No executable found\n")); } } + + /* Inherit permissions from runtime by default */ + if (!opt_no_inherit_permissions) + { + g_autofree char *runtime_pref = NULL; + g_autofree char *runtime_ref = NULL; + g_autoptr(GFile) runtime_deploy_dir = NULL; + + runtime_pref = g_key_file_get_string (keyfile, group, FLATPAK_METADATA_KEY_RUNTIME, NULL); + if (runtime_pref != NULL) + { + runtime_ref = g_strconcat ("runtime/", runtime_pref, NULL); + runtime_deploy_dir = flatpak_find_deploy_dir_for_ref (runtime_ref, NULL, cancellable, NULL); + } + + /* This is optional, because some weird uses of flatpak build-finish (like the test suite) + may not have the actual runtime installed. Most will though, as otherwise flatpak build + will not work. */ + if (runtime_deploy_dir != NULL) + { + g_autoptr(GFile) runtime_metadata_file = NULL; + g_autofree char *runtime_metadata_contents = NULL; + gsize runtime_metadata_size; + g_autoptr(GKeyFile) runtime_metakey = NULL; + + + runtime_deploy_dir = flatpak_find_deploy_dir_for_ref (runtime_ref, NULL, cancellable, error); + if (runtime_deploy_dir == NULL) + goto out; + + runtime_metadata_file = g_file_get_child (runtime_deploy_dir, "metadata"); + if (!g_file_load_contents (runtime_metadata_file, cancellable, + &runtime_metadata_contents, &runtime_metadata_size, NULL, error)) + goto out; + + runtime_metakey = g_key_file_new (); + if (!g_key_file_load_from_data (runtime_metakey, runtime_metadata_contents, runtime_metadata_size, 0, error)) + goto out; + + inherited_context = flatpak_context_new (); + if (!flatpak_context_load_metadata (inherited_context, runtime_metakey, error)) + goto out; + + /* non-permissions are inherited at runtime, so no need to inherit them */ + flatpak_context_reset_non_permissions (inherited_context); + } + } } if (opt_require_version) g_key_file_set_string (keyfile, group, "required-flatpak", opt_require_version); app_context = flatpak_context_new (); + if (inherited_context) + flatpak_context_merge (app_context, inherited_context); if (!flatpak_context_load_metadata (app_context, keyfile, error)) goto out; flatpak_context_merge (app_context, arg_context); @@ -469,6 +566,13 @@ g_key_file_set_string (keyfile, elements[0], elements[1], elements[2] ? elements[2] : "true"); } + for (i = 0; opt_remove_extensions != NULL && opt_remove_extensions[i] != NULL; i++) + { + g_autofree char *groupname = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION, opt_remove_extensions[i], NULL); + + g_key_file_remove_group (keyfile, groupname, NULL); + } + for (i = 0; opt_extensions != NULL && opt_extensions[i] != NULL; i++) { g_auto(GStrv) elements = NULL; @@ -568,7 +672,7 @@ if (!is_runtime) { g_debug ("Collecting exports"); - if (!collect_exports (base, id, cancellable, error)) + if (!collect_exports (base, id, arg_context, cancellable, error)) return FALSE; } @@ -602,7 +706,7 @@ case 1: /* DIR */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_context_complete (arg_context, completion); + flatpak_complete_context (completion); flatpak_complete_dir (completion); break; diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-import-bundle.c flatpak-1.0.7/app/flatpak-builtins-build-import-bundle.c --- flatpak-0.11.3/app/flatpak-builtins-build-import-bundle.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-import-bundle.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,8 +30,8 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-oci-registry.h" +#include "flatpak-utils-private.h" +#include "flatpak-oci-registry-private.h" static char *opt_ref; static gboolean opt_oci = FALSE; @@ -58,6 +58,7 @@ g_autofree char *dir_uri = NULL; g_autofree char *target_ref = NULL; const char *oci_digest; + g_autoptr(FlatpakOciRegistry) registry = NULL; g_autoptr(FlatpakOciVersioned) versioned = NULL; FlatpakOciManifest *manifest = NULL; @@ -70,7 +71,7 @@ if (registry == NULL) return NULL; - index = flatpak_oci_registry_load_index (registry, NULL, NULL, cancellable, error); + index = flatpak_oci_registry_load_index (registry, cancellable, error); if (index == NULL) return NULL; diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-init.c flatpak-1.0.7/app/flatpak-builtins-build-init.c --- flatpak-0.11.3/app/flatpak-builtins-build-init.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-init.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,14 +31,17 @@ #include "flatpak-builtins.h" #include "flatpak-builtins-utils.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static char *opt_arch; static char *opt_var; static char *opt_type; static char *opt_sdk_dir; static char **opt_sdk_extensions; +static char **opt_extensions; static char **opt_tags; +static char *opt_extension_tag; static char *opt_base; static char *opt_base_version; static char **opt_base_extensions; @@ -51,10 +54,12 @@ { "base", 0, 0, G_OPTION_ARG_STRING, &opt_base, N_("Initialize apps from named app"), N_("APP") }, { "base-version", 0, 0, G_OPTION_ARG_STRING, &opt_base_version, N_("Specify version for --base"), N_("VERSION") }, { "base-extension", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_base_extensions, N_("Include this base extension"), N_("EXTENSION") }, + { "extension-tag", 0, 0, G_OPTION_ARG_STRING, &opt_extension_tag, N_("Extension tag to use if building extension"), N_("EXTENSION_TAG") }, { "writable-sdk", 'w', 0, G_OPTION_ARG_NONE, &opt_writable_sdk, N_("Initialize /usr with a writable copy of the sdk"), NULL }, { "type", 0, 0, G_OPTION_ARG_STRING, &opt_type, N_("Specify the build type (app, runtime, extension)"), N_("TYPE") }, { "tag", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_tags, N_("Add a tag"), N_("TAG") }, { "sdk-extension", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_sdk_extensions, N_("Include this sdk extension in /usr"), N_("EXTENSION") }, + { "extension", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_extensions, N_("Add extension point info"), N_("NAME=VARIABLE[=VALUE]") }, { "sdk-dir", 0, 0, G_OPTION_ARG_STRING, &opt_sdk_dir, N_("Where to store sdk (defaults to 'usr')"), N_("DIR") }, { "update", 0, 0, G_OPTION_ARG_NONE, &opt_update, N_("Re-initialize the sdk/var"), NULL }, { NULL } @@ -62,7 +67,7 @@ static gboolean ensure_extensions (FlatpakDeploy *src_deploy, const char *default_branch, - char *src_extensions[], GFile *top_dir, GCancellable *cancellable, GError **error) + char *src_extensions[], GFile *top_dir, GCancellable *cancellable, GError **error) { g_autoptr(GKeyFile) metakey = flatpak_deploy_get_metadata (src_deploy); GList *extensions = NULL, *l; @@ -74,14 +79,20 @@ for (i = 0; src_extensions[i] != NULL; i++) { const char *requested_extension = src_extensions[i]; + g_autofree char *requested_extension_name = NULL; gboolean found = FALSE; + /* Remove any '@' from the name */ + flatpak_parse_extension_with_tag (requested_extension, + &requested_extension_name, + NULL); + for (l = extensions; l != NULL; l = l->next) { FlatpakExtension *ext = l->data; - if (strcmp (ext->installed_id, requested_extension) == 0 || - strcmp (ext->id, requested_extension) == 0) + if (strcmp (ext->installed_id, requested_extension_name) == 0 || + strcmp (ext->id, requested_extension_name) == 0) { if (!ext->is_unmaintained) { @@ -128,7 +139,7 @@ if (!found) { g_list_free_full (extensions, (GDestroyNotify) flatpak_extension_free); - return flatpak_fail (error, _("Requested extension %s not installed"), requested_extension); + return flatpak_fail (error, _("Requested extension %s not installed"), requested_extension_name); } } @@ -137,6 +148,17 @@ return TRUE; } +static char * +maybe_format_extension_tag (const char *extension_tag) +{ + if (extension_tag != NULL) + { + return g_strdup_printf ("tag=%s\n", extension_tag); + } + + return g_strdup (""); +} + gboolean flatpak_builtin_build_init (int argc, char **argv, GCancellable *cancellable, GError **error) { @@ -157,6 +179,7 @@ const char *sdk_pref; const char *runtime_pref; const char *default_branch = NULL; + g_autofree char *base_ref = NULL; g_autofree char *runtime_ref = NULL; g_autofree char *var_ref = NULL; g_autofree char *sdk_ref = NULL; @@ -167,6 +190,9 @@ gboolean is_app = FALSE; gboolean is_extension = FALSE; gboolean is_runtime = FALSE; + g_autoptr(GKeyFile) keyfile = g_key_file_new (); + g_autofree char *keyfile_data = NULL; + gsize keyfile_data_len; context = g_option_context_new (_("DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); @@ -204,6 +230,7 @@ if (!flatpak_is_valid_name (app_id, &my_error)) return flatpak_fail (error, _("'%s' is not a valid application name: %s"), app_id, my_error->message); + kinds = FLATPAK_KINDS_RUNTIME; sdk_dir = flatpak_find_installed_pref (sdk_pref, kinds, opt_arch, default_branch, TRUE, FALSE, FALSE, NULL, &sdk_ref, cancellable, error); @@ -286,13 +313,12 @@ if (opt_base) { const char *base_branch; - g_autofree char *base_ref = NULL; g_autoptr(GFile) base_deploy_files = NULL; g_autoptr(FlatpakDeploy) base_deploy = NULL; base_branch = opt_base_version ? opt_base_version : "master"; base_ref = flatpak_build_app_ref (opt_base, base_branch, opt_arch); - base_deploy = flatpak_find_deploy_for_ref (base_ref, cancellable, error); + base_deploy = flatpak_find_deploy_for_ref (base_ref, NULL, cancellable, error); if (base_deploy == NULL) return FALSE; @@ -348,6 +374,11 @@ "sdk=%s\n", sdk_ref + strlen ("runtime/")); + if (base_ref) + g_string_append_printf (metadata_contents, + "base=%s\n", base_ref); + + if (opt_tags != NULL) { g_string_append (metadata_contents, "tags="); @@ -360,14 +391,41 @@ } if (is_extension) - g_string_append_printf (metadata_contents, - "\n" - "[ExtensionOf]\n" - "ref=%s\n", - runtime_ref); + { + g_autofree char *optional_extension_tag = maybe_format_extension_tag (opt_extension_tag); + g_string_append_printf (metadata_contents, + "\n" + "[ExtensionOf]\n" + "ref=%s\n" + "%s", + runtime_ref, + optional_extension_tag); + } + + /* Do the rest of the work as a keyfile, as we need things like full escaping, etc. + * We should probably do everything this way actually... */ + if (!g_key_file_load_from_data (keyfile, metadata_contents->str, metadata_contents->len, 0, NULL)) + return flatpak_fail (error, "Internal error parsing generated keyfile"); + + for (i = 0; opt_extensions != NULL && opt_extensions[i] != NULL; i++) + { + g_auto(GStrv) elements = NULL; + g_autofree char *groupname = NULL; + + elements = g_strsplit (opt_extensions[i], "=", 3); + if (g_strv_length (elements) < 2) + return flatpak_fail (error, _("Too few elements in --extension argument %s, format should be NAME=VAR[=VALUE]"), opt_extensions[i]); + + groupname = g_strconcat (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION, + elements[0], NULL); + + g_key_file_set_string (keyfile, groupname, elements[1], elements[2] ? elements[2] : "true"); + } + + keyfile_data = g_key_file_to_data (keyfile, &keyfile_data_len, NULL); if (!g_file_replace_contents (metadata_file, - metadata_contents->str, metadata_contents->len, NULL, FALSE, + keyfile_data, keyfile_data_len, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, NULL, cancellable, error)) return FALSE; @@ -381,7 +439,6 @@ 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 +464,7 @@ 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 +479,7 @@ 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 +497,7 @@ 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 +512,7 @@ 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 -Nru flatpak-0.11.3/app/flatpak-builtins-build-sign.c flatpak-1.0.7/app/flatpak-builtins-build-sign.c --- flatpak-0.11.3/app/flatpak-builtins-build-sign.c 2017-05-11 15:32:10.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-sign.c 2018-08-08 14:56:20.000000000 +0000 @@ -30,7 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" static char *opt_arch; static gboolean opt_runtime; diff -Nru flatpak-0.11.3/app/flatpak-builtins-build-update-repo.c flatpak-1.0.7/app/flatpak-builtins-build-update-repo.c --- flatpak-0.11.3/app/flatpak-builtins-build-update-repo.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-build-update-repo.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,558 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-utils-private.h" +#include "flatpak-builtins-utils.h" + +static char *opt_title; +static char *opt_redirect_url; +static char *opt_default_branch; +static char *opt_collection_id = NULL; +static gboolean opt_deploy_collection_id = FALSE; +static char **opt_gpg_import; +static char *opt_generate_delta_from; +static char *opt_generate_delta_to; +static char *opt_generate_delta_ref; +static char *opt_gpg_homedir; +static char **opt_gpg_key_ids; +static gboolean opt_prune; +static gboolean opt_generate_deltas; +static gint opt_prune_depth = -1; + +static GOptionEntry options[] = { + { "redirect-url", 0, 0, G_OPTION_ARG_STRING, &opt_redirect_url, N_("Redirect this repo to a new URL"), N_("URL") }, + { "title", 0, 0, G_OPTION_ARG_STRING, &opt_title, N_("A nice name to use for this repository"), N_("TITLE") }, + { "default-branch", 0, 0, G_OPTION_ARG_STRING, &opt_default_branch, N_("Default branch to use for this repository"), N_("BRANCH") }, + { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), N_("COLLECTION-ID") }, + { "deploy-collection-id", 0, 0, G_OPTION_ARG_NONE, &opt_deploy_collection_id, N_("Permanently deploy collection ID to client remote configurations"), NULL }, + { "gpg-import", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_import, N_("Import new default GPG public key from FILE"), N_("FILE") }, + { "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_gpg_key_ids, N_("GPG Key ID to sign the summary 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") }, + { "generate-static-deltas", 0, 0, G_OPTION_ARG_NONE, &opt_generate_deltas, N_("Generate delta files"), NULL }, + { "prune", 0, 0, G_OPTION_ARG_NONE, &opt_prune, N_("Prune unused objects"), NULL }, + { "prune-depth", 0, 0, G_OPTION_ARG_INT, &opt_prune_depth, N_("Only traverse DEPTH parents for each commit (default: -1=infinite)"), N_("DEPTH") }, + { "generate-static-delta-from", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_from, NULL, NULL }, + { "generate-static-delta-to", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_to, NULL, NULL }, + { "generate-static-delta-ref", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_ref, NULL, NULL }, + { NULL } +}; + +static void +_ostree_parse_delta_name (const char *delta_name, + char **out_from, + char **out_to) +{ + g_auto(GStrv) parts = g_strsplit (delta_name, "-", 2); + + if (parts[0] && parts[1]) + { + *out_from = g_steal_pointer (&parts[0]); + *out_to = g_steal_pointer (&parts[1]); + } + else + { + *out_from = NULL; + *out_to = g_steal_pointer (&parts[0]); + } +} + +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 gboolean +_ostree_repo_static_delta_delete (OstreeRepo *self, + const char *delta_id, + GCancellable *cancellable, + GError **error) +{ + gboolean ret = FALSE; + g_autofree char *from = NULL; + g_autofree char *to = NULL; + g_autofree char *deltadir = NULL; + struct stat buf; + int repo_dir_fd = ostree_repo_get_dfd (self); + + _ostree_parse_delta_name (delta_id, &from, &to); + deltadir = _ostree_get_relative_static_delta_path (from, to, NULL); + + if (fstatat (repo_dir_fd, deltadir, &buf, 0) != 0) + { + if (errno == ENOENT) + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Can't find delta %s", delta_id); + else + glnx_set_error_from_errno (error); + + goto out; + } + + if (!glnx_shutil_rm_rf_at (repo_dir_fd, deltadir, + cancellable, error)) + goto out; + + ret = TRUE; +out: + return ret; +} + +static gboolean +generate_one_delta (OstreeRepo *repo, + const char *from, + const char *to, + const char *ref, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariantBuilder) parambuilder = NULL; + g_autoptr(GVariant) params = NULL; + + parambuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); + /* Fall back for 1 meg files */ + g_variant_builder_add (parambuilder, "{sv}", + "min-fallback-size", g_variant_new_uint32 (1)); + params = g_variant_ref_sink (g_variant_builder_end (parambuilder)); + + if (ref == NULL) + ref = ""; + + if (from == NULL) + g_print (_("Generating delta: %s (%.10s)\n"), ref, to); + else + g_print (_("Generating delta: %s (%.10s-%.10s)\n"), ref, from, to); + + if (!ostree_repo_static_delta_generate (repo, OSTREE_STATIC_DELTA_GENERATE_OPT_MAJOR, + from, to, NULL, + params, + cancellable, error)) + { + if (from == NULL) + g_prefix_error (error, _("Failed to generate delta %s (%.10s): "), + ref, to); + else + g_prefix_error (error, _("Failed to generate delta %s (%.10s-%.10s): "), + ref, from, to); + return FALSE; + + } + + return TRUE; +} + + +static void +delta_generation_done (GObject *source_object, + GAsyncResult *result, + gpointer user_data) +{ + int *n_spawned_delta_generate = user_data; + + (*n_spawned_delta_generate)--; +} + +static gboolean +spawn_delete_generation (GMainContext *context, + int *n_spawned_delta_generate, + OstreeRepo *repo, + GVariant *params, + const char *ref, + const char *from, + const char *to, + GError **error) +{ + g_autoptr(GSubprocessLauncher) launcher = g_subprocess_launcher_new (0); + g_autoptr(GSubprocess) subprocess = NULL; + const char *argv[] = { + "/proc/self/exe", + "build-update-repo", + "--generate-static-delta-ref", + ref, + "--generate-static-delta-to", + to, + NULL, NULL, NULL, NULL + }; + int i = 6; + g_autofree char *exe = NULL; + + exe = flatpak_readlink ("/proc/self/exe", NULL); + if (exe) + argv[0] = exe; + + if (from) + { + argv[i++] = "--generate-static-delta-from"; + argv[i++] = from; + } + + argv[i++] = flatpak_file_get_path_cached (ostree_repo_get_path (repo)); + argv[i++] = NULL; + + g_assert (i <= G_N_ELEMENTS (argv)); + + while (*n_spawned_delta_generate > g_get_num_processors ()) + g_main_context_iteration (context, TRUE); + + subprocess = g_subprocess_launcher_spawnv (launcher, argv, error); + if (subprocess == NULL) + return FALSE; + + (*n_spawned_delta_generate)++; + + g_subprocess_wait_async (subprocess, NULL, delta_generation_done, n_spawned_delta_generate); + + return TRUE; +} + +static gboolean +generate_all_deltas (OstreeRepo *repo, + GPtrArray **unwanted_deltas, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GHashTable) all_refs = NULL; + g_autoptr(GHashTable) all_deltas_hash = NULL; + g_autoptr(GHashTable) wanted_deltas_hash = NULL; + g_autoptr(GPtrArray) all_deltas = NULL; + int i; + GHashTableIter iter; + gpointer key, value; + g_autoptr(GVariantBuilder) parambuilder = NULL; + g_autoptr(GVariant) params = NULL; + int n_spawned_delta_generate = 0; + g_autoptr(GMainContextPopDefault) context = NULL; + + g_print ("Generating static deltas\n"); + + parambuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); + /* Fall back for 1 meg files */ + g_variant_builder_add (parambuilder, "{sv}", + "min-fallback-size", g_variant_new_uint32 (1)); + params = g_variant_ref_sink (g_variant_builder_end (parambuilder)); + + if (!ostree_repo_list_static_delta_names (repo, &all_deltas, + cancellable, error)) + return FALSE; + + wanted_deltas_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + all_deltas_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + for (i = 0; i < all_deltas->len; i++) + g_hash_table_insert (all_deltas_hash, + g_strdup (g_ptr_array_index (all_deltas, i)), + NULL); + + if (!ostree_repo_list_refs (repo, NULL, &all_refs, + cancellable, error)) + return FALSE; + + context = flatpak_main_context_new_default (); + + g_hash_table_iter_init (&iter, all_refs); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + const char *ref = key; + const char *commit = value; + g_autoptr(GVariant) variant = NULL; + g_autoptr(GVariant) parent_variant = NULL; + g_autofree char *parent_commit = NULL; + g_autofree char *grandparent_commit = NULL; + + if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, commit, + &variant, NULL)) + { + g_warning ("Couldn't load commit %s", commit); + continue; + } + + /* From empty */ + if (!g_hash_table_contains (all_deltas_hash, commit)) + { + if (!spawn_delete_generation (context, &n_spawned_delta_generate, repo, params, + ref, NULL, commit, + error)) + return FALSE; + } + + /* Mark this one as wanted */ + g_hash_table_insert (wanted_deltas_hash, g_strdup (commit), GINT_TO_POINTER (1)); + + parent_commit = ostree_commit_get_parent (variant); + + if (parent_commit != NULL && + !ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, parent_commit, + &parent_variant, NULL)) + { + g_warning ("Couldn't load parent commit %s", parent_commit); + continue; + } + + /* From parent */ + if (parent_variant != NULL) + { + g_autofree char *from_parent = g_strdup_printf ("%s-%s", parent_commit, commit); + + if (!g_hash_table_contains (all_deltas_hash, from_parent)) + { + if (!spawn_delete_generation (context, &n_spawned_delta_generate, repo, params, + ref, parent_commit, commit, + error)) + return FALSE; + } + + /* Mark parent-to-current as wanted */ + g_hash_table_insert (wanted_deltas_hash, g_strdup (from_parent), GINT_TO_POINTER (1)); + + /* We also want to keep around the parent and the grandparent-to-parent deltas + * because otherwise these will be deleted immediately which may cause a race if + * someone is currently downloading them. + * However, there is no need to generate these if they don't exist. + */ + + g_hash_table_insert (wanted_deltas_hash, g_strdup (parent_commit), GINT_TO_POINTER (1)); + grandparent_commit = ostree_commit_get_parent (parent_variant); + if (grandparent_commit != NULL) + g_hash_table_insert (wanted_deltas_hash, + g_strdup_printf ("%s-%s", grandparent_commit, parent_commit), + GINT_TO_POINTER (1)); + } + } + + while (n_spawned_delta_generate > 0) + g_main_context_iteration (context, TRUE); + + *unwanted_deltas = g_ptr_array_new_with_free_func (g_free); + for (i = 0; i < all_deltas->len; i++) + { + const char *delta = g_ptr_array_index (all_deltas, i); + if (!g_hash_table_contains (wanted_deltas_hash, delta)) + g_ptr_array_add (*unwanted_deltas, g_strdup (delta)); + } + + return TRUE; +} + +gboolean +flatpak_builtin_build_update_repo (int argc, char **argv, + GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GFile) repofile = NULL; + g_autoptr(OstreeRepo) repo = NULL; + const char *location; + g_autoptr(GPtrArray) unwanted_deltas = NULL; + + context = g_option_context_new (_("LOCATION - Update repository metadata")); + 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)) + return FALSE; + + if (argc < 2) + return usage_error (context, _("LOCATION must be specified"), error); + + location = argv[1]; + + repofile = g_file_new_for_commandline_arg (location); + repo = ostree_repo_new (repofile); + + if (!ostree_repo_open (repo, cancellable, error)) + return FALSE; + + if (opt_generate_delta_to) + { + if (!generate_one_delta (repo, opt_generate_delta_from, opt_generate_delta_to, opt_generate_delta_ref, cancellable, error)) + return FALSE; + return TRUE; + } + + if (opt_title && + !flatpak_repo_set_title (repo, opt_title[0] ? opt_title : NULL, error)) + return FALSE; + + if (opt_redirect_url && + !flatpak_repo_set_redirect_url (repo, opt_redirect_url[0] ? opt_redirect_url : NULL, error)) + return FALSE; + + if (opt_default_branch && + !flatpak_repo_set_default_branch (repo, opt_default_branch[0] ? opt_default_branch : NULL, error)) + return FALSE; + + if (opt_collection_id != NULL) + { + /* Only allow a transition from no collection ID to a non-empty collection ID. + * Changing the collection ID between two different non-empty values is too + * dangerous: it will break all clients who have previously pulled from the repository. + * Require the user to recreate the repository from scratch in that case. */ + const char *old_collection_id = ostree_repo_get_collection_id (repo); + const char *new_collection_id = opt_collection_id[0] ? opt_collection_id : NULL; + + if (old_collection_id != NULL && + g_strcmp0 (old_collection_id, new_collection_id) != 0) + return flatpak_fail (error, "The collection ID of an existing repository cannot be changed. " + "Recreate the repository to change or clear its collection ID."); + + if (!flatpak_repo_set_collection_id (repo, new_collection_id, error)) + return FALSE; + } + + if (opt_deploy_collection_id && + !flatpak_repo_set_deploy_collection_id (repo, TRUE, error)) + return FALSE; + + if (opt_gpg_import) + { + g_autoptr(GBytes) gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); + if (gpg_data == NULL) + return FALSE; + + if (!flatpak_repo_set_gpg_keys (repo, gpg_data, error)) + return FALSE; + } + + g_print (_("Updating appstream branch\n")); + if (!flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error)) + return FALSE; + + if (opt_generate_deltas && + !generate_all_deltas (repo, &unwanted_deltas, cancellable, error)) + return FALSE; + + if (unwanted_deltas != NULL) + { + int i; + for (i = 0; i < unwanted_deltas->len; i++) + { + const char *delta = g_ptr_array_index (unwanted_deltas, i); + g_print ("Deleting unwanted delta: %s\n", delta); + g_autoptr(GError) my_error = NULL; + if (!_ostree_repo_static_delta_delete (repo, delta, cancellable, &my_error)) + g_printerr ("Unable to delete delta %s: %s\n", delta, my_error->message); + } + } + + g_print (_("Updating summary\n")); + if (!flatpak_repo_update (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error)) + return FALSE; + + if (opt_prune) + { + gint n_objects_total; + gint n_objects_pruned; + guint64 objsize_total; + g_autofree char *formatted_freed_size = NULL; + + g_print ("Pruning old commits\n"); + if (!ostree_repo_prune (repo, OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY, opt_prune_depth, + &n_objects_total, &n_objects_pruned, &objsize_total, + cancellable, error)) + return FALSE; + + formatted_freed_size = g_format_size_full (objsize_total, 0); + + g_print (_("Total objects: %u\n"), n_objects_total); + if (n_objects_pruned == 0) + g_print (_("No unreachable objects\n")); + else + g_print (_("Deleted %u objects, %s freed\n"), + n_objects_pruned, formatted_freed_size); + } + + return TRUE; +} + + +gboolean +flatpak_complete_build_update_repo (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* LOCATION */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + + flatpak_complete_dir (completion); + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-config.c flatpak-1.0.7/app/flatpak-builtins-config.c --- flatpak-0.11.3/app/flatpak-builtins-config.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-config.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "common/flatpak-dir.h" +#include "common/flatpak-dir-private.h" static gboolean opt_get; static gboolean opt_set; @@ -70,11 +70,12 @@ return g_strjoinv (";", langs); } -typedef struct { +typedef struct +{ const char *name; char *(*parse)(const char *value); char *(*print)(const char *value); - char *(*get_default)(FlatpakDir *dir); + char *(*get_default)(FlatpakDir * dir); } ConfigKey; ConfigKey keys[] = { diff -Nru flatpak-0.11.3/app/flatpak-builtins-create-usb.c flatpak-1.0.7/app/flatpak-builtins-create-usb.c --- flatpak-0.11.3/app/flatpak-builtins-create-usb.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-create-usb.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,808 @@ +/* + * Copyright © 2018 Matthew Leeds + * + * 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: + * Matthew Leeds + */ + +#include "config.h" + +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" + +static char *opt_arch; +static char *opt_destination_repo; +static gboolean opt_runtime; +static gboolean opt_app; + +static GOptionEntry options[] = { + { "app", 0, 0, G_OPTION_ARG_NONE, &opt_app, N_("Look for app with the specified name"), NULL }, + { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to copy"), N_("ARCH") }, + { "destination-repo", 0, 0, G_OPTION_ARG_FILENAME, &opt_destination_repo, "Use custom repository directory within the mount", N_("DEST") }, + { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Look for runtime with the specified name"), NULL }, + { NULL } +}; + +typedef struct CommitAndSubpaths +{ + gchar *commit; + gchar **subpaths; +} CommitAndSubpaths; + +static void +commit_and_subpaths_free (CommitAndSubpaths *c_s) +{ + g_free (c_s->commit); + g_strfreev (c_s->subpaths); + g_free (c_s); +} + +static CommitAndSubpaths * +commit_and_subpaths_new (const char *commit, const char * const *subpaths) +{ + CommitAndSubpaths *c_s = g_new (CommitAndSubpaths, 1); + + c_s->commit = g_strdup (commit); + c_s->subpaths = g_strdupv ((char **) subpaths); + return c_s; +} + +static char ** +get_flatpak_subpaths_from_deploy_subpaths (const char * const *subpaths) +{ + g_autoptr(GPtrArray) resolved_subpaths = NULL; + gsize i; + + if (subpaths == NULL || subpaths[0] == NULL) + return NULL; + + resolved_subpaths = g_ptr_array_new_with_free_func (g_free); + g_ptr_array_add (resolved_subpaths, g_strdup ("/metadata")); + for (i = 0; subpaths[i] != NULL; i++) + g_ptr_array_add (resolved_subpaths, g_build_filename ("/files", subpaths[i], NULL)); + g_ptr_array_add (resolved_subpaths, NULL); + + return (char **)g_ptr_array_free (g_steal_pointer (&resolved_subpaths), FALSE); +} + +/* Add related refs specified in the metadata of @ref to @all_refs, also + * updating @all_collection_ids with any new collection IDs. A warning will be + * printed for related refs that are not installed, and they won't be added to + * the list. */ +static gboolean +add_related (GHashTable *all_refs, + GHashTable *all_collection_ids, + const char *ref, + FlatpakDir *dir, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) deploy_data = NULL; + g_autoptr(FlatpakDeploy) deploy = NULL; + g_autoptr(GKeyFile) metakey = NULL; + g_auto(GStrv) parts = NULL; + const char *commit = NULL; + const char *arch = NULL; + const char *branch = NULL; + GList *extensions, *l; + + g_debug ("Finding related refs for ‘%s’", ref); + + parts = g_strsplit (ref, "/", 0); + arch = parts[2]; + branch = parts[3]; + + deploy_data = flatpak_dir_get_deploy_data (dir, ref, cancellable, error); + if (deploy_data == NULL) + return FALSE; + + commit = flatpak_deploy_data_get_commit (deploy_data); + + deploy = flatpak_dir_load_deployed (dir, ref, commit, cancellable, error); + if (deploy == NULL) + return FALSE; + + metakey = flatpak_deploy_get_metadata (deploy); + + extensions = flatpak_list_extensions (metakey, arch, branch); + for (l = extensions; l; l = l->next) + { + FlatpakExtension *ext = l->data; + g_autoptr(GVariant) ext_deploy_data = NULL; + g_autoptr(OstreeCollectionRef) ext_collection_ref = NULL; + g_autofree char *ext_collection_id = NULL; + g_autofree const char **ext_subpaths = NULL; + g_auto(GStrv) resolved_ext_subpaths = NULL; + const char *ext_remote; + const char *ext_commit = NULL; + CommitAndSubpaths *c_s; + + if (ext->is_unmaintained) + continue; + + g_assert (ext->ref); + + ext_deploy_data = flatpak_dir_get_deploy_data (dir, ext->ref, cancellable, NULL); + if (ext_deploy_data == NULL) + { + g_printerr (_("Warning: Omitting related ref ‘%s’ because it is not installed.\n"), + ext->ref); + continue; + } + + ext_remote = flatpak_deploy_data_get_origin (ext_deploy_data); + if (ext_remote == NULL) + return FALSE; + ext_collection_id = flatpak_dir_get_remote_collection_id (dir, ext_remote); + if (ext_collection_id == NULL) + { + g_printerr (_("Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a collection ID set.\n"), + ext->ref, ext_remote); + continue; + } + + ext_commit = flatpak_deploy_data_get_commit (ext_deploy_data); + ext_subpaths = flatpak_deploy_data_get_subpaths (ext_deploy_data); + resolved_ext_subpaths = get_flatpak_subpaths_from_deploy_subpaths (ext_subpaths); + c_s = commit_and_subpaths_new (ext_commit, (const char * const *)resolved_ext_subpaths); + + g_hash_table_insert (all_collection_ids, g_strdup (ext_collection_id), g_strdup (ext_remote)); + ext_collection_ref = ostree_collection_ref_new (ext_collection_id, ext->ref); + g_hash_table_insert (all_refs, g_steal_pointer (&ext_collection_ref), c_s); + } + + g_list_free_full (extensions, (GDestroyNotify) flatpak_extension_free); + + return TRUE; +} + +/* Add the runtime and its related refs to @all_refs, also updating + * @all_collection_ids with any new collection IDs */ +static gboolean +add_runtime (GHashTable *all_refs, + GHashTable *all_collection_ids, + const char *ref, + FlatpakDir *dir, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) deploy_data = NULL; + g_autoptr(GVariant) runtime_deploy_data = NULL; + g_autoptr(FlatpakDeploy) deploy = NULL; + g_autoptr(GKeyFile) metakey = NULL; + g_autoptr(OstreeCollectionRef) runtime_collection_ref = NULL; + g_autofree char *runtime = NULL; + g_autofree char *runtime_ref = NULL; + g_autofree char *runtime_remote = NULL; + g_autofree char *runtime_collection_id = NULL; + g_autofree const char **runtime_subpaths = NULL; + g_auto(GStrv) resolved_runtime_subpaths = NULL; + const char *commit = NULL; + const char *runtime_commit = NULL; + CommitAndSubpaths *c_s; + + g_debug ("Finding the runtime for ‘%s’", ref); + + deploy_data = flatpak_dir_get_deploy_data (dir, ref, cancellable, error); + if (deploy_data == NULL) + return FALSE; + + commit = flatpak_deploy_data_get_commit (deploy_data); + + deploy = flatpak_dir_load_deployed (dir, ref, commit, cancellable, error); + if (deploy == NULL) + return FALSE; + + metakey = flatpak_deploy_get_metadata (deploy); + + runtime = g_key_file_get_string (metakey, "Application", "runtime", error); + if (!runtime) + return FALSE; + runtime_ref = g_strdup_printf ("runtime/%s", runtime); + runtime_deploy_data = flatpak_dir_get_deploy_data (dir, runtime_ref, cancellable, error); + if (runtime_deploy_data == NULL) + return FALSE; + runtime_remote = flatpak_dir_get_origin (dir, runtime_ref, cancellable, error); + if (runtime_remote == NULL) + return FALSE; + runtime_collection_id = flatpak_dir_get_remote_collection_id (dir, runtime_remote); + if (runtime_collection_id == NULL) + return flatpak_fail (error, + _("Remote ‘%s’ does not have a collection ID set, which is required for P2P distribution of ‘%s’."), + runtime_remote, runtime_ref); + + runtime_commit = flatpak_deploy_data_get_commit (runtime_deploy_data); + runtime_subpaths = flatpak_deploy_data_get_subpaths (runtime_deploy_data); + resolved_runtime_subpaths = get_flatpak_subpaths_from_deploy_subpaths (runtime_subpaths); + c_s = commit_and_subpaths_new (runtime_commit, (const char * const *)resolved_runtime_subpaths); + + g_hash_table_insert (all_collection_ids, g_strdup (runtime_collection_id), g_strdup (runtime_remote)); + runtime_collection_ref = ostree_collection_ref_new (runtime_collection_id, runtime_ref); + g_hash_table_insert (all_refs, g_steal_pointer (&runtime_collection_ref), c_s); + + if (!add_related (all_refs, all_collection_ids, runtime_ref, dir, cancellable, error)) + return FALSE; + + return TRUE; +} + +/* Copied from src/ostree/ot-builtin-create-usb.c in ostree.git, with slight modifications */ +static gboolean +ostree_create_usb (GOptionContext *context, + OstreeRepo *src_repo, + const char *mount_root_path, + struct stat mount_root_stbuf, + int mount_root_dfd, + GHashTable *all_refs, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(OstreeAsyncProgress) progress = NULL; + g_auto(GLnxConsoleRef) console = { 0, }; + guint num_refs = 0; + + /* Open the destination repository on the USB stick or create it if it doesn’t exist. + * Check it’s below @mount_root_path, and that it’s not the same as the source + * repository. */ + const char *dest_repo_path = (opt_destination_repo != NULL) ? opt_destination_repo : ".ostree/repo"; + + if (!glnx_shutil_mkdir_p_at (mount_root_dfd, dest_repo_path, 0755, cancellable, error)) + return FALSE; + + /* Always use the archive repo mode, which works on FAT file systems that + * don't support xattrs, compresses files to save space, doesn't store + * permission info directly in the file attributes, and is at least sometimes + * more performant than bare-user */ + OstreeRepoMode mode = OSTREE_REPO_MODE_ARCHIVE; + + g_debug ("%s: Creating repository in mode %u", G_STRFUNC, mode); + + g_autoptr(OstreeRepo) dest_repo = ostree_repo_create_at (mount_root_dfd, dest_repo_path, + mode, NULL, cancellable, error); + + if (dest_repo == NULL) + return FALSE; + + struct stat dest_repo_stbuf; + + if (!glnx_fstat (ostree_repo_get_dfd (dest_repo), &dest_repo_stbuf, error)) + return FALSE; + + if (dest_repo_stbuf.st_dev != mount_root_stbuf.st_dev) + return usage_error (context, "--destination-repo must be a descendent of MOUNT-PATH", error); + + if (ostree_repo_equal (src_repo, dest_repo)) + return usage_error (context, "--destination-repo must not be the source repository", error); + + if (!ostree_repo_is_writable (dest_repo, error)) + return glnx_prefix_error (error, "Cannot write to repository"); + + /* Copy across all of the collection–refs to the destination repo. We have to + * do it one ref at a time in order to get the subpaths right. */ + + GLNX_HASH_TABLE_FOREACH_KV (all_refs, OstreeCollectionRef *, c_r, CommitAndSubpaths *, c_s) + { + GVariantBuilder builder; + + g_autoptr(GVariant) opts = NULL; + OstreeRepoPullFlags flags = OSTREE_REPO_PULL_FLAGS_MIRROR; + GVariantBuilder refs_builder; + + num_refs++; + + g_variant_builder_init (&refs_builder, G_VARIANT_TYPE ("a(sss)")); + g_variant_builder_add (&refs_builder, "(sss)", + c_r->collection_id, c_r->ref_name, + c_s->commit ? c_s->commit : ""); + + glnx_console_lock (&console); + + if (console.is_tty) + progress = ostree_async_progress_new_and_connect (ostree_repo_pull_default_console_progress_changed, &console); + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); + + g_variant_builder_add (&builder, "{s@v}", "collection-refs", + g_variant_new_variant (g_variant_builder_end (&refs_builder))); + if (c_s->subpaths != NULL) + { + g_variant_builder_add (&builder, "{s@v}", "subdirs", + g_variant_new_variant (g_variant_new_strv ((const char * const *) c_s->subpaths, -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}", "depth", + g_variant_new_variant (g_variant_new_int32 (0))); + opts = g_variant_ref_sink (g_variant_builder_end (&builder)); + + g_autofree char *src_repo_uri = g_file_get_uri (ostree_repo_get_path (src_repo)); + + if (!ostree_repo_pull_with_options (dest_repo, src_repo_uri, + opts, + progress, + cancellable, error)) + { + ostree_repo_abort_transaction (dest_repo, cancellable, NULL); + return FALSE; + } + + if (progress != NULL) + ostree_async_progress_finish (progress); + + glnx_console_unlock (&console); + } + + /* Ensure a summary file is present to make it easier to look up commit checksums. */ + /* FIXME: It should be possible to work without this, but find_remotes_cb() in + * ostree-repo-pull.c currently assumes a summary file (signed or unsigned) is + * present. */ + if (!ostree_repo_regenerate_summary (dest_repo, NULL, cancellable, error)) + return FALSE; + + /* Add the symlinks .ostree/repos.d/@symlink_name → @dest_repo_path, unless + * the @dest_repo_path is a well-known one like ostree/repo, in which case no + * symlink is necessary; #OstreeRepoFinderMount always looks there. */ + if (!g_str_equal (dest_repo_path, "ostree/repo") && + !g_str_equal (dest_repo_path, ".ostree/repo")) + { + if (!glnx_shutil_mkdir_p_at (mount_root_dfd, ".ostree/repos.d", 0755, cancellable, error)) + return FALSE; + + /* Find a unique name for the symlink. If a symlink already targets + * @dest_repo_path, use that and don’t create a new one. */ + GLnxDirFdIterator repos_iter; + gboolean need_symlink = TRUE; + + if (!glnx_dirfd_iterator_init_at (mount_root_dfd, ".ostree/repos.d", TRUE, &repos_iter, error)) + return FALSE; + + while (TRUE) + { + struct dirent *repo_dent; + + if (!glnx_dirfd_iterator_next_dent (&repos_iter, &repo_dent, cancellable, error)) + return FALSE; + + if (repo_dent == NULL) + break; + + /* Does the symlink already point to this repository? (Or is the + * repository itself present in repos.d?) We already guarantee that + * they’re on the same device. */ + if (repo_dent->d_ino == dest_repo_stbuf.st_ino) + { + need_symlink = FALSE; + break; + } + } + + /* If we need a symlink, find a unique name for it and create it. */ + if (need_symlink) + { + /* Relative to .ostree/repos.d. */ + g_autofree char *relative_dest_repo_path = g_build_filename ("..", "..", dest_repo_path, NULL); + guint i; + const guint max_attempts = 100; + + for (i = 0; i < max_attempts; i++) + { + g_autofree char *symlink_path = g_strdup_printf (".ostree/repos.d/%02u-generated", i); + + int ret = TEMP_FAILURE_RETRY (symlinkat (relative_dest_repo_path, mount_root_dfd, symlink_path)); + if (ret < 0 && errno != EEXIST) + return glnx_throw_errno_prefix (error, "symlinkat(%s → %s)", symlink_path, relative_dest_repo_path); + else if (ret >= 0) + break; + } + + if (i == max_attempts) + return glnx_throw (error, "Could not find an unused symlink name for the repository"); + } + } + + /* Report success to the user. */ + g_autofree char *src_repo_path = g_file_get_path (ostree_repo_get_path (src_repo)); + + g_print ("Copied %u/%u refs successfully from ‘%s’ to ‘%s’ repository in ‘%s’.\n", num_refs, num_refs, + src_repo_path, dest_repo_path, mount_root_path); + + return TRUE; +} + +gboolean +flatpak_builtin_create_usb (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(GHashTable) all_refs = NULL; + g_autoptr(GHashTable) all_collection_ids = NULL; + g_autoptr(GHashTable) remote_arch_map = NULL; + FlatpakDir *dir = NULL; + char **prefs = NULL; + unsigned int i, n_prefs; + FlatpakKinds kinds; + OstreeRepo *src_repo; + + context = g_option_context_new (_("MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media")); + 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 (argc < 3) + return usage_error (context, _("MOUNT-PATH and REF must be specified"), error); + + /* Open the USB stick, which must exist. Allow automounting and following symlinks. */ + const char *mount_root_path = argv[1]; + struct stat mount_root_stbuf; + + glnx_autofd int mount_root_dfd = -1; + if (!glnx_opendirat (AT_FDCWD, mount_root_path, TRUE, &mount_root_dfd, error)) + return FALSE; + if (!glnx_fstat (mount_root_dfd, &mount_root_stbuf, error)) + return FALSE; + + prefs = &argv[2]; + n_prefs = argc - 2; + + kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); + + /* This is a mapping from OstreeCollectionRef instances to CommitAndSubpaths + * structs. We need to tell ostree which commit to copy because the deployed + * commit is not necessarily the latest one for a given ref, and we need the + * subpaths because otherwise ostree will try and fail to pull the whole + * commit */ + all_refs = g_hash_table_new_full (ostree_collection_ref_hash, + ostree_collection_ref_equal, + (GDestroyNotify) ostree_collection_ref_free, + (GDestroyNotify) commit_and_subpaths_free); + + /* This maps from each remote name to a set of architectures */ + remote_arch_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_strfreev); + + /* This is a mapping from collection IDs to remote names. It is possible + * for multiple remotes to have the same collection ID, but in that case + * they should be mirrors of each other. */ + all_collection_ids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + + for (i = 0; i < n_prefs; i++) + { + const char *pref = NULL; + FlatpakKinds matched_kinds; + g_autofree char *id = NULL; + g_autofree char *arch = NULL; + g_autofree char *branch = NULL; + g_autoptr(GError) local_error = NULL; + g_autoptr(GError) first_error = NULL; + g_autofree char *installed_ref = NULL; + g_autoptr(GPtrArray) dirs_with_ref = NULL; + FlatpakDir *this_ref_dir = NULL; + g_autofree char *remote = NULL; + g_autofree char *ref_collection_id = NULL; + g_autoptr(OstreeCollectionRef) collection_ref = NULL; + g_auto(GStrv) parts = NULL; + unsigned int j = 0; + const char **arches; + FlatpakKinds installed_ref_kind = 0; + + pref = prefs[i]; + + if (!flatpak_split_partial_ref_arg (pref, kinds, opt_arch, NULL, + &matched_kinds, &id, &arch, &branch, error)) + return FALSE; + + dirs_with_ref = g_ptr_array_new (); + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + g_autofree char *ref = NULL; + FlatpakKinds kind; + + ref = flatpak_dir_find_installed_ref (dir, id, branch, arch, + kinds, &kind, &local_error); + if (ref == NULL) + { + if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) + { + if (first_error == NULL) + first_error = g_steal_pointer (&local_error); + g_clear_error (&local_error); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + else + { + g_ptr_array_add (dirs_with_ref, dir); + if (installed_ref == NULL) + { + installed_ref = g_strdup (ref); + installed_ref_kind = kind; + } + } + } + + if (dirs_with_ref->len == 0) + { + g_assert (first_error != NULL); + /* No match anywhere, return the first NOT_INSTALLED error */ + g_propagate_error (error, g_steal_pointer (&first_error)); + return FALSE; + } + + if (dirs_with_ref->len > 1) + { + g_autoptr(GString) dir_names = g_string_new (""); + for (j = 0; j < dirs_with_ref->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs_with_ref, j); + g_autofree char *dir_name = flatpak_dir_get_name (dir); + if (j > 0) + g_string_append (dir_names, ", "); + g_string_append (dir_names, dir_name); + } + + return flatpak_fail (error, + _("Ref ‘%s’ found in multiple installations: %s. You must specify one."), + pref, dir_names->str); + } + + this_ref_dir = g_ptr_array_index (dirs_with_ref, 0); + if (dir == NULL) + dir = this_ref_dir; + else if (dir != this_ref_dir) + { + g_autofree char *dir_name = flatpak_dir_get_name (dir); + g_autofree char *this_ref_dir_name = flatpak_dir_get_name (this_ref_dir); + + return flatpak_fail (error, + _("Refs must all be in the same installation (found in %s and %s)."), + dir_name, this_ref_dir_name); + } + + g_assert (installed_ref); + parts = g_strsplit (installed_ref, "/", 0); + if (arch == NULL) + arch = g_strdup (parts[2]); + if (branch == NULL) + branch = g_strdup (parts[3]); + + remote = flatpak_dir_get_origin (dir, installed_ref, cancellable, error); + if (remote == NULL) + return FALSE; + + ref_collection_id = flatpak_dir_get_remote_collection_id (dir, remote); + if (ref_collection_id == NULL) + return flatpak_fail (error, + _("Remote ‘%s’ does not have a collection ID set, which is required for P2P distribution of ‘%s’."), + remote, installed_ref); + + arches = g_hash_table_lookup (remote_arch_map, remote); + if (arches == NULL) + { + GPtrArray *arches_array = g_ptr_array_new (); + g_ptr_array_add (arches_array, g_strdup (arch)); + g_ptr_array_add (arches_array, NULL); + g_hash_table_insert (remote_arch_map, g_strdup (remote), g_ptr_array_free (arches_array, FALSE)); + } + else if (!g_strv_contains (arches, arch)) + { + GPtrArray *arches_array = g_ptr_array_new (); + for (const char **iter = arches; *iter != NULL; ++iter) + g_ptr_array_add (arches_array, g_strdup (*iter)); + g_ptr_array_add (arches_array, g_strdup (arch)); + g_ptr_array_add (arches_array, NULL); + g_hash_table_replace (remote_arch_map, g_strdup (remote), g_ptr_array_free (arches_array, FALSE)); + } + + /* Add the main ref */ + { + g_autoptr(GVariant) deploy_data = NULL; + const char *commit; + CommitAndSubpaths *c_s; + + deploy_data = flatpak_dir_get_deploy_data (dir, installed_ref, cancellable, error); + if (deploy_data == NULL) + return FALSE; + commit = flatpak_deploy_data_get_commit (deploy_data); + c_s = commit_and_subpaths_new (commit, NULL); + + g_hash_table_insert (all_collection_ids, g_strdup (ref_collection_id), g_strdup (remote)); + collection_ref = ostree_collection_ref_new (ref_collection_id, installed_ref); + g_hash_table_insert (all_refs, g_steal_pointer (&collection_ref), c_s); + } + + /* Add dependencies and related refs */ + if (!(installed_ref_kind & FLATPAK_KINDS_RUNTIME) && + !add_runtime (all_refs, all_collection_ids, installed_ref, dir, cancellable, error)) + return FALSE; + if (!add_related (all_refs, all_collection_ids, installed_ref, dir, cancellable, error)) + return FALSE; + + } + + g_assert (dir); + src_repo = flatpak_dir_get_repo (dir); + + /* Add ostree-metadata and appstream refs for each collection ID */ + GLNX_HASH_TABLE_FOREACH_KV (all_collection_ids, const char *, collection_id, const char *, remote_name) + { + g_autoptr(OstreeCollectionRef) metadata_collection_ref = NULL; + g_autoptr(OstreeCollectionRef) appstream_collection_ref = NULL; + g_autoptr(OstreeCollectionRef) appstream2_collection_ref = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(GError) local_error = NULL; + g_autofree char *appstream_ref = NULL; + g_autofree char *appstream2_ref = NULL; + const char **remote_arches; + + /* Try to update the repo metadata by creating a FlatpakRemoteState object, + * but don't fail on error because we want this to work offline. */ + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, &local_error); + if (state == NULL) + { + g_printerr (_("Warning: Couldn't update repo metadata for remote ‘%s’: %s\n"), + remote_name, local_error->message); + g_clear_error (&local_error); + } + + /* Add the ostree-metadata ref to the list */ + metadata_collection_ref = ostree_collection_ref_new (collection_id, OSTREE_REPO_METADATA_REF); + g_hash_table_insert (all_refs, g_steal_pointer (&metadata_collection_ref), + commit_and_subpaths_new (NULL, NULL)); + + /* Add whatever appstream data is available for each arch */ + remote_arches = g_hash_table_lookup (remote_arch_map, remote_name); + for (const char **iter = remote_arches; iter != NULL && *iter != NULL; ++iter) + { + const char *current_arch = *iter; + g_autoptr(GPtrArray) dirs = NULL; + g_autoptr(GError) appstream_error = NULL; + g_autoptr(GError) appstream2_error = NULL; + + /* Try to update the appstream data, but don't fail on error because we + * want this to work offline. */ + dirs = g_ptr_array_new (); + g_ptr_array_add (dirs, dir); + if (!update_appstream (dirs, remote_name, current_arch, 0, TRUE, cancellable, &local_error)) + { + g_printerr (_("Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n"), + remote_name, current_arch, local_error->message); + g_clear_error (&local_error); + } + + /* Copy the appstream data if it exists. It's optional because without it + * the USB will still be useful to the flatpak CLI even if GNOME Software + * wouldn't display the contents. */ + appstream_ref = g_strdup_printf ("appstream/%s", current_arch); + appstream_collection_ref = ostree_collection_ref_new (collection_id, appstream_ref); + if (ostree_repo_resolve_collection_ref (src_repo, appstream_collection_ref, FALSE, + OSTREE_REPO_RESOLVE_REV_EXT_NONE, + NULL, cancellable, &appstream_error)) + { + g_hash_table_insert (all_refs, g_steal_pointer (&appstream_collection_ref), + commit_and_subpaths_new (NULL, NULL)); + } + + /* Copy the appstream2 data if it exists. */ + appstream2_ref = g_strdup_printf ("appstream2/%s", current_arch); + appstream2_collection_ref = ostree_collection_ref_new (collection_id, appstream2_ref); + if (ostree_repo_resolve_collection_ref (src_repo, appstream2_collection_ref, FALSE, + OSTREE_REPO_RESOLVE_REV_EXT_NONE, + NULL, cancellable, &appstream2_error)) + { + g_hash_table_insert (all_refs, g_steal_pointer (&appstream2_collection_ref), + commit_and_subpaths_new (NULL, NULL)); + } + else + { + if (appstream_error != NULL) + { + /* Print a warning if both appstream and appstream2 are missing */ + g_printerr (_("Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n"), + remote_name, current_arch, appstream2_error->message, appstream_error->message); + } + else + { + /* Appstream2 is only for efficiency, so just print a debug message */ + g_debug (_("Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n"), + remote_name, current_arch, appstream2_error->message); + } + } + } + } + + /* Now use code copied from `ostree create-usb` to do the actual copying. We + * can't just call out to `ostree` because (a) flatpak doesn't have a + * dependency on the ostree command line tools and (b) we need to only pull + * certain subpaths for partial refs. */ + /* FIXME: Use libostree after fixing https://github.com/ostreedev/ostree/issues/1610 */ + { + g_autoptr(GString) all_refs_str = g_string_new (""); + + GLNX_HASH_TABLE_FOREACH (all_refs, OstreeCollectionRef *, collection_ref) + { + if (!ostree_validate_collection_id (collection_ref->collection_id, error)) + return FALSE; + if (!ostree_validate_rev (collection_ref->ref_name, error)) + return FALSE; + + g_string_append_printf (all_refs_str, "(%s, %s) ", collection_ref->collection_id, collection_ref->ref_name); + } + g_debug ("Copying the following refs: %s", all_refs_str->str); + + if (!ostree_create_usb (context, src_repo, mount_root_path, mount_root_stbuf, + mount_root_dfd, all_refs, cancellable, error)) + return FALSE; + } + + return TRUE; +} + +gboolean +flatpak_complete_create_usb (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: /* MOUNT-PATH */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + flatpak_complete_options (completion, user_entries); + + flatpak_complete_file (completion, "__FLATPAK_DIR"); + + 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, NULL); + } + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-delete-remote.c flatpak-1.0.7/app/flatpak-builtins-delete-remote.c --- flatpak-0.11.3/app/flatpak-builtins-delete-remote.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-delete-remote.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,113 +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 "libglnx/libglnx.h" - -#include "flatpak-builtins.h" -#include "flatpak-builtins-utils.h" - -static gboolean opt_force; - -static GOptionEntry delete_options[] = { - { "force", 0, 0, G_OPTION_ARG_NONE, &opt_force, N_("Remove remote even if in use"), NULL }, - { NULL } -}; - - -gboolean -flatpak_builtin_delete_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; - const char *remote_name; - - context = g_option_context_new (_("NAME - Delete a remote repository")); - g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); - - g_option_context_add_main_entries (context, delete_options, NULL); - - 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, _("NAME must be specified"), error); - - remote_name = argv[1]; - - if (argc > 2) - return usage_error (context, _("Too many arguments"), error); - - 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; - - return TRUE; -} - -gboolean -flatpak_complete_delete_remote (FlatpakCompletion *completion) -{ - g_autoptr(GOptionContext) context = 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, - FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) - return FALSE; - - switch (completion->argc) - { - case 0: - case 1: /* REMOTE */ - flatpak_complete_options (completion, global_entries); - flatpak_complete_options (completion, delete_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; - } - - return TRUE; -} diff -Nru flatpak-0.11.3/app/flatpak-builtins-document-export.c flatpak-1.0.7/app/flatpak-builtins-document-export.c --- flatpak-0.11.3/app/flatpak-builtins-document-export.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-document-export.c 2018-09-03 10:04:51.000000000 +0000 @@ -29,13 +29,13 @@ #include #include "libglnx/libglnx.h" -#include "flatpak-document-dbus.h" +#include "flatpak-document-dbus-generated.h" #include #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static gboolean opt_unique = FALSE; static gboolean opt_transient = FALSE; diff -Nru flatpak-0.11.3/app/flatpak-builtins-document-info.c flatpak-1.0.7/app/flatpak-builtins-document-info.c --- flatpak-0.11.3/app/flatpak-builtins-document-info.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-document-info.c 2018-08-08 14:56:20.000000000 +0000 @@ -29,13 +29,13 @@ #include #include "libglnx/libglnx.h" -#include "flatpak-document-dbus.h" +#include "flatpak-document-dbus-generated.h" #include #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static GOptionEntry options[] = { { NULL } diff -Nru flatpak-0.11.3/app/flatpak-builtins-document-list.c flatpak-1.0.7/app/flatpak-builtins-document-list.c --- flatpak-0.11.3/app/flatpak-builtins-document-list.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-document-list.c 2019-02-11 12:42:20.000000000 +0000 @@ -29,11 +29,11 @@ #include #include "libglnx/libglnx.h" -#include "flatpak-document-dbus.h" +#include "flatpak-document-dbus-generated.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static GOptionEntry options[] = { { NULL } diff -Nru flatpak-0.11.3/app/flatpak-builtins-document-unexport.c flatpak-1.0.7/app/flatpak-builtins-document-unexport.c --- flatpak-0.11.3/app/flatpak-builtins-document-unexport.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-document-unexport.c 2018-08-08 14:56:20.000000000 +0000 @@ -29,13 +29,13 @@ #include #include "libglnx/libglnx.h" -#include "flatpak-document-dbus.h" +#include "flatpak-document-dbus-generated.h" #include #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" static GOptionEntry options[] = { { NULL } diff -Nru flatpak-0.11.3/app/flatpak-builtins-enter.c flatpak-1.0.7/app/flatpak-builtins-enter.c --- flatpak-0.11.3/app/flatpak-builtins-enter.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-enter.c 2019-02-11 12:42:20.000000000 +0000 @@ -32,9 +32,9 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-dbus.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-dbus-generated.h" +#include "flatpak-run-private.h" static GOptionEntry options[] = { diff -Nru flatpak-0.11.3/app/flatpak-builtins.h flatpak-1.0.7/app/flatpak-builtins.h --- flatpak-0.11.3/app/flatpak-builtins.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins.h 2019-02-11 12:42:20.000000000 +0000 @@ -24,8 +24,9 @@ #include #include -#include "flatpak-utils.h" -#include "flatpak-dir.h" +#include "flatpak-complete.h" +#include "flatpak-utils-private.h" +#include "flatpak-dir-private.h" G_BEGIN_DECLS @@ -55,15 +56,15 @@ #define BUILTINPROTO(name) \ gboolean flatpak_builtin_ ## name (int argc, char **argv, GCancellable * cancellable, GError * *error); \ - gboolean flatpak_complete_ ## name (FlatpakCompletion *completion); + gboolean flatpak_complete_ ## name (FlatpakCompletion * completion); -BUILTINPROTO (add_remote) -BUILTINPROTO (modify_remote) -BUILTINPROTO (delete_remote) -BUILTINPROTO (ls_remote) -BUILTINPROTO (info_remote) -BUILTINPROTO (list_remotes) +BUILTINPROTO (remote_add) +BUILTINPROTO (remote_modify) +BUILTINPROTO (remote_delete) +BUILTINPROTO (remote_ls) +BUILTINPROTO (remote_info) +BUILTINPROTO (remote_list) BUILTINPROTO (install) BUILTINPROTO (update) BUILTINPROTO (make_current_app) @@ -73,6 +74,7 @@ BUILTINPROTO (info) BUILTINPROTO (run) BUILTINPROTO (enter) +BUILTINPROTO (ps) BUILTINPROTO (build_init) BUILTINPROTO (build) BUILTINPROTO (build_finish) @@ -86,10 +88,16 @@ BUILTINPROTO (document_unexport) BUILTINPROTO (document_info) BUILTINPROTO (document_list) +BUILTINPROTO (permission_remove) +BUILTINPROTO (permission_list) +BUILTINPROTO (permission_show) +BUILTINPROTO (permission_reset) BUILTINPROTO (override) BUILTINPROTO (repo) BUILTINPROTO (config) BUILTINPROTO (search) +BUILTINPROTO (repair) +BUILTINPROTO (create_usb) #undef BUILTINPROTO diff -Nru flatpak-0.11.3/app/flatpak-builtins-info.c flatpak-1.0.7/app/flatpak-builtins-info.c --- flatpak-0.11.3/app/flatpak-builtins-info.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-info.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,9 +30,9 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" #include "flatpak-builtins-utils.h" -#include "flatpak-run.h" +#include "flatpak-run-private.h" static gboolean opt_user; static gboolean opt_system; @@ -41,8 +41,11 @@ static gboolean opt_show_origin; static gboolean opt_show_size; static gboolean opt_show_metadata; +static gboolean opt_show_runtime; +static gboolean opt_show_sdk; static gboolean opt_show_permissions; static gboolean opt_show_extensions; +static gboolean opt_show_location; static char *opt_arch; static char **opt_installations; static char *opt_file_access; @@ -57,9 +60,12 @@ { "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-runtime", 0, 0, G_OPTION_ARG_NONE, &opt_show_runtime, N_("Show runtime"), NULL }, + { "show-sdk", 0, 0, G_OPTION_ARG_NONE, &opt_show_sdk, N_("Show sdk"), 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 }, + { "show-location", 'l', 0, G_OPTION_ARG_NONE, &opt_show_location, N_("Show location"), NULL }, { NULL } }; @@ -74,7 +80,7 @@ } static gchar * -format_timestamp (guint64 timestamp) +format_timestamp (guint64 timestamp) { GDateTime *dt; gchar *str; @@ -94,12 +100,15 @@ { g_autoptr(GOptionContext) context = NULL; g_autofree char *ref = NULL; - FlatpakDir *dir = NULL; + g_autoptr(FlatpakDir) dir = NULL; g_autoptr(GVariant) deploy_data = NULL; g_autoptr(FlatpakDeploy) deploy = NULL; + g_autoptr(GFile) deploy_dir = NULL; g_autoptr(GKeyFile) metakey = NULL; const char *commit = NULL; const char *alt_id = NULL; + const char *eol; + const char *eol_rebase; const char *pref = NULL; const char *default_branch = NULL; const char *origin = NULL; @@ -115,7 +124,7 @@ gboolean friendly = TRUE; g_autofree const char **subpaths = NULL; - context = g_option_context_new (_("NAME [BRANCH] - Get info about installed app and/or runtime")); + context = g_option_context_new (_("NAME [BRANCH] - Get info about an installed app or runtime")); 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)) @@ -146,7 +155,7 @@ if (deploy_data == NULL) return FALSE; - deploy = flatpak_find_deploy_for_ref (ref, NULL, error); + deploy = flatpak_find_deploy_for_ref (ref, NULL, NULL, error); if (deploy == NULL) return FALSE; @@ -163,12 +172,16 @@ origin = flatpak_deploy_data_get_origin (deploy_data); size = flatpak_deploy_data_get_installed_size (deploy_data); formatted = g_format_size (size); - path = g_file_get_path (flatpak_deploy_get_dir (deploy)); + deploy_dir = flatpak_deploy_get_dir (deploy); + path = g_file_get_path (deploy_dir); subpaths = flatpak_deploy_data_get_subpaths (deploy_data); + eol = flatpak_deploy_data_get_eol (deploy_data); + eol_rebase = flatpak_deploy_data_get_eol_rebase (deploy_data); metakey = flatpak_deploy_get_metadata (deploy); - if (opt_show_ref || opt_show_origin || opt_show_commit || opt_show_size || opt_show_metadata || opt_show_permissions || opt_file_access) + if (opt_show_ref || opt_show_origin || opt_show_commit || opt_show_size || opt_show_metadata || opt_show_permissions || + opt_file_access || opt_show_location || opt_show_runtime || opt_show_sdk) friendly = FALSE; if (friendly) @@ -180,13 +193,13 @@ const gchar *subject = NULL; const gchar *body = NULL; g_autofree char *parent = NULL; - const char *latest; + g_autofree char *latest = NULL; 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"); + latest = g_strdup (_("ref not present in origin")); if (ostree_repo_load_commit (flatpak_dir_get_repo (dir), commit, &commit_v, NULL, NULL)) { @@ -201,9 +214,7 @@ 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); @@ -230,11 +241,18 @@ 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 (eol) + g_print ("%s%s%s %s\n", on, _("end-of-life:"), off, eol); + if (eol_rebase) + g_print ("%s%s%s %s\n", on, _("end-of-life-rebase:"), off, eol_rebase); if (strcmp (parts[0], "app") == 0) { g_autofree char *runtime = NULL; + g_autofree char *sdk = NULL; runtime = g_key_file_get_string (metakey, "Application", "runtime", error); g_print ("%s%s%s %s\n", on, _("Runtime:"), off, runtime ? runtime : "-"); + sdk = g_key_file_get_string (metakey, "Application", "sdk", error); + g_print ("%s%s%s %s\n", on, _("Sdk:"), off, sdk ? sdk : "-"); } if (subpaths[0] != NULL) { @@ -271,6 +289,36 @@ g_print ("%s", formatted); } + if (opt_show_location) + { + maybe_print_space (&first); + g_print ("%s", path); + } + + if (opt_show_runtime) + { + g_autofree char *runtime = NULL; + maybe_print_space (&first); + + if (strcmp (parts[0], "app") == 0) + runtime = g_key_file_get_string (metakey, "Application", "runtime", NULL); + else + runtime = g_key_file_get_string (metakey, "Runtime", "runtime", NULL); + g_print ("%s", runtime ? runtime : "-"); + } + + if (opt_show_sdk) + { + g_autofree char *sdk = NULL; + maybe_print_space (&first); + + if (strcmp (parts[0], "app") == 0) + sdk = g_key_file_get_string (metakey, "Application", "sdk", NULL); + else + sdk = g_key_file_get_string (metakey, "Runtime", "sdk", NULL); + g_print ("%s", sdk ? sdk : "-"); + } + if (!first) g_print ("\n"); @@ -329,51 +377,51 @@ if (opt_show_extensions) { - GList *extensions, *l; + GList *extensions, *l; - extensions = flatpak_list_extensions (metakey, parts[2], parts[3]); - for (l = extensions; l; l = l->next) - { - FlatpakExtension *ext = l->data; - g_autofree const char **subpaths = NULL; - g_autoptr(GVariant) ext_deploy_data = NULL; - g_autofree char *formatted = NULL; - - if (ext->is_unmaintained) - { - commit = "unmaintained"; - origin = NULL; - size = 0; - formatted = g_strdup ("unknown"); - subpaths = NULL; - } - else - { - ext_deploy_data = flatpak_dir_get_deploy_data (dir, ext->ref, cancellable, error); - if (ext_deploy_data == NULL) - return FALSE; - - commit = flatpak_deploy_data_get_commit (ext_deploy_data); - origin = flatpak_deploy_data_get_origin (ext_deploy_data); - size = flatpak_deploy_data_get_installed_size (ext_deploy_data); - formatted = g_format_size (size); - subpaths = flatpak_deploy_data_get_subpaths (ext_deploy_data); - } - - g_print ("\n%s%s%s %s\n", on, _("Extension:"), off, ext->ref); - g_print ("%s%s%s %s\n", on, _("ID:"), off, ext->id); - g_print ("%s%s%s %s\n", on, _("Origin:"), off, origin ? origin : "-"); - g_print ("%s%s%s %s\n", on, _("Commit:"), off, commit); - g_print ("%s%s%s %s%s\n", on, _("Installed size:"), off, subpaths && subpaths[0] ? "<" : "", formatted); - - if (subpaths && subpaths[0]) - { - g_autofree char *subpath_str = NULL; - - subpath_str = g_strjoinv (",", (char **)subpaths); - g_print ("%s%s%s %s\n", on, _("Subpaths:"), off, subpath_str); - } - } + extensions = flatpak_list_extensions (metakey, parts[2], parts[3]); + for (l = extensions; l; l = l->next) + { + FlatpakExtension *ext = l->data; + g_autofree const char **subpaths = NULL; + g_autoptr(GVariant) ext_deploy_data = NULL; + g_autofree char *formatted = NULL; + + if (ext->is_unmaintained) + { + commit = "unmaintained"; + origin = NULL; + size = 0; + formatted = g_strdup ("unknown"); + subpaths = NULL; + } + else + { + ext_deploy_data = flatpak_dir_get_deploy_data (dir, ext->ref, cancellable, error); + if (ext_deploy_data == NULL) + return FALSE; + + commit = flatpak_deploy_data_get_commit (ext_deploy_data); + origin = flatpak_deploy_data_get_origin (ext_deploy_data); + size = flatpak_deploy_data_get_installed_size (ext_deploy_data); + formatted = g_format_size (size); + subpaths = flatpak_deploy_data_get_subpaths (ext_deploy_data); + } + + g_print ("\n%s%s%s %s\n", on, _("Extension:"), off, ext->ref); + g_print ("%s%s%s %s\n", on, _("ID:"), off, ext->id); + g_print ("%s%s%s %s\n", on, _("Origin:"), off, origin ? origin : "-"); + g_print ("%s%s%s %s\n", on, _("Commit:"), off, commit); + g_print ("%s%s%s %s%s\n", on, _("Installed size:"), off, subpaths && subpaths[0] ? "<" : "", formatted); + + if (subpaths && subpaths[0]) + { + g_autofree char *subpath_str = NULL; + + subpath_str = g_strjoinv (",", (char **) subpaths); + g_print ("%s%s%s %s\n", on, _("Subpaths:"), off, subpath_str); + } + } } return TRUE; @@ -390,7 +438,7 @@ context = g_option_context_new (""); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, - FLATPAK_BUILTIN_FLAG_ALL_DIRS, &dirs, NULL, NULL)) + FLATPAK_BUILTIN_FLAG_ALL_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, &dirs, NULL, NULL)) return FALSE; kinds = FLATPAK_KINDS_APP | FLATPAK_KINDS_RUNTIME; diff -Nru flatpak-0.11.3/app/flatpak-builtins-info-remote.c flatpak-1.0.7/app/flatpak-builtins-info-remote.c --- flatpak-0.11.3/app/flatpak-builtins-info-remote.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-info-remote.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,360 +0,0 @@ -/* - * 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 -Nru flatpak-0.11.3/app/flatpak-builtins-install.c flatpak-1.0.7/app/flatpak-builtins-install.c --- flatpak-0.11.3/app/flatpak-builtins-install.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-install.c 2019-02-11 12:42:20.000000000 +0000 @@ -33,10 +33,10 @@ #include "flatpak-builtins.h" #include "flatpak-builtins-utils.h" -#include "flatpak-transaction.h" -#include "flatpak-utils.h" -#include "lib/flatpak-error.h" -#include "flatpak-chain-input-stream.h" +#include "flatpak-cli-transaction.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" +#include "flatpak-chain-input-stream-private.h" static char *opt_arch; static char **opt_gpg_file; @@ -114,141 +114,6 @@ } static gboolean -remote_is_already_configured (FlatpakDir *dir, - const char *url, - const char *collection_id) -{ - g_autofree char *old_remote = NULL; - - old_remote = flatpak_dir_find_remote_by_uri (dir, url, collection_id); - if (old_remote == NULL && flatpak_dir_is_user (dir)) - { - g_autoptr(GPtrArray) system_dirs = NULL; - int i; - - system_dirs = flatpak_dir_get_system_list (NULL, NULL); - if (system_dirs == NULL) - return FALSE; - - for (i = 0; i < system_dirs->len; i++) - { - FlatpakDir *system_dir = g_ptr_array_index (system_dirs, i); - old_remote = flatpak_dir_find_remote_by_uri (system_dir, url, collection_id); - if (old_remote != NULL) - break; - } - } - - return old_remote != NULL; -} - -static gboolean -handle_runtime_repo_deps (FlatpakDir *dir, const char *dep_url, GError **error) -{ - g_autoptr(GBytes) dep_data = NULL; - g_autofree char *runtime_url = NULL; - g_autofree char *new_remote = NULL; - g_autofree char *basename = NULL; - g_autoptr(SoupURI) uri = NULL; - g_auto(GStrv) remotes = NULL; - g_autoptr(GKeyFile) config = NULL; - g_autoptr(GBytes) gpg_key = NULL; - g_autofree char *group = NULL; - g_autofree char *runtime_collection_id = NULL; - char *t; - int i; - - if (opt_no_deps) - return TRUE; - - dep_data = download_uri (dep_url, error); - if (dep_data == NULL) - { - g_prefix_error (error, "Can't load dependent file %s", dep_url); - return FALSE; - } - - uri = soup_uri_new (dep_url); - basename = g_path_get_basename (soup_uri_get_path (uri)); - /* Strip suffix */ - t = strchr (basename, '.'); - if (t != NULL) - *t = 0; - - /* Find a free remote name */ - remotes = flatpak_dir_list_remotes (dir, NULL, NULL); - i = 0; - do - { - g_clear_pointer (&new_remote, g_free); - - if (i == 0) - new_remote = g_strdup (basename); - else - new_remote = g_strdup_printf ("%s-%d", basename, i); - i++; - } - while (remotes != NULL && g_strv_contains ((const char * const*)remotes, new_remote)); - - config = flatpak_dir_parse_repofile (dir, new_remote, FALSE, dep_data, &gpg_key, NULL, error); - if (config == NULL) - { - g_prefix_error (error, "Can't parse dependent file %s: ", dep_url); - return FALSE; - } - - /* See if it already exists */ - group = g_strdup_printf ("remote \"%s\"", new_remote); - runtime_url = g_key_file_get_string (config, group, "url", NULL); - g_assert (runtime_url != NULL); -#ifdef FLATPAK_ENABLE_P2P - runtime_collection_id = g_key_file_get_string (config, group, "collection-id", NULL); -#endif /* FLATPAK_ENABLE_P2P */ - - if (remote_is_already_configured (dir, runtime_url, runtime_collection_id)) - return TRUE; - - if (opt_yes || - flatpak_yes_no_prompt (_("This application depends on runtimes from:\n %s\nConfigure this as new remote '%s'"), - runtime_url, new_remote)) - { - if (opt_yes) - g_print (_("Configuring %s as new remote '%s'"), runtime_url, new_remote); - - if (!flatpak_dir_modify_remote (dir, new_remote, config, gpg_key, NULL, error)) - return FALSE; - if (!flatpak_dir_recreate_repo (dir, NULL, error)) - return FALSE; - } - - return TRUE; -} - -static gboolean -handle_runtime_repo_deps_from_bundle (FlatpakDir *dir, GFile *file, GError **error) -{ - g_autofree char *dep_url = NULL; - g_autoptr(GVariant) metadata = NULL; - - if (opt_no_deps) - return TRUE; - - metadata = flatpak_bundle_load (file, NULL, - NULL, - NULL, - &dep_url, - NULL, - NULL, - NULL, - NULL, - NULL); - if (metadata == NULL || dep_url == NULL) - return TRUE; - - return handle_runtime_repo_deps (dir, dep_url, error); -} - -static gboolean install_bundle (FlatpakDir *dir, GOptionContext *context, int argc, char **argv, @@ -281,102 +146,27 @@ return FALSE; } - if (!handle_runtime_repo_deps_from_bundle (dir, file, error)) - return FALSE; - - if (!flatpak_dir_ensure_repo (dir, cancellable, error)) + transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, error); + if (transaction == NULL) 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_reinstall); + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + flatpak_transaction_set_reinstall (transaction, opt_reinstall); if (!flatpak_transaction_add_install_bundle (transaction, file, gpg_data, error)) return FALSE; - if (!flatpak_transaction_run (transaction, TRUE, cancellable, error)) + if (!flatpak_cli_transaction_run (transaction, cancellable, error)) return FALSE; return TRUE; } static gboolean -handle_suggested_remote_name (FlatpakDir *dir, GBytes *data, GError **error) -{ - g_autoptr(GKeyFile) keyfile = g_key_file_new (); - g_autofree char *suggested_name = NULL; - g_autofree char *url = NULL; - g_autofree char *collection_id = NULL; - g_autoptr(GKeyFile) config = NULL; - g_autoptr(GBytes) gpg_key = NULL; - - if (!g_key_file_load_from_data (keyfile, g_bytes_get_data (data, NULL), g_bytes_get_size (data), - 0, error)) - return FALSE; - - suggested_name = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, - FLATPAK_REF_SUGGEST_REMOTE_NAME_KEY, NULL); - if (suggested_name == NULL) - return TRUE; - - url = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, - FLATPAK_REF_URL_KEY, NULL); - if (url == NULL) - return TRUE; - -#ifdef FLATPAK_ENABLE_P2P - collection_id = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_COLLECTION_ID_KEY, NULL); -#endif /* FLATPAK_ENABLE_P2P */ - - if (remote_is_already_configured (dir, url, collection_id)) - return TRUE; - - /* The name is already used, ignore */ - if (ostree_repo_remote_get_url (flatpak_dir_get_repo (dir), suggested_name, NULL, NULL)) - return TRUE; - - if (opt_yes || - 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) - g_print (_("Configuring %s as new remote '%s'"), url, suggested_name); - - config = flatpak_dir_parse_repofile (dir, suggested_name, TRUE, data, &gpg_key, NULL, error); - if (config == NULL) - return FALSE; - - if (!flatpak_dir_modify_remote (dir, suggested_name, config, gpg_key, NULL, error)) - return FALSE; - - if (!flatpak_dir_recreate_repo (dir, NULL, error)) - return FALSE; - } - - return TRUE; -} - -static gboolean -handle_runtime_repo_deps_from_keyfile (FlatpakDir *dir, GBytes *data, GError **error) -{ - g_autoptr(GKeyFile) keyfile = g_key_file_new (); - g_autofree char *dep_url = NULL; - - if (opt_no_deps) - return TRUE; - - if (!g_key_file_load_from_data (keyfile, g_bytes_get_data (data, NULL), g_bytes_get_size (data), - 0, error)) - return FALSE; - - dep_url = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, - FLATPAK_REF_RUNTIME_REPO_KEY, NULL); - if (dep_url == NULL) - return TRUE; - - return handle_runtime_repo_deps (dir, dep_url, error); -} - -static gboolean install_from (FlatpakDir *dir, GOptionContext *context, int argc, char **argv, @@ -388,10 +178,6 @@ g_autofree char *data = NULL; gsize data_len; const char *filename; - g_autofree char *remote = NULL; - g_autofree char *ref = NULL; - const char *slash; - FlatpakDir *clone; g_autoptr(FlatpakTransaction) transaction = NULL; if (argc < 2) @@ -423,34 +209,22 @@ file_data = g_bytes_new_take (g_steal_pointer (&data), data_len); } - /* Handle this before the runtime deps, because they might be the same */ - if (!handle_suggested_remote_name (dir, file_data, error)) + transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, error); + if (transaction == NULL) return FALSE; - if (!handle_runtime_repo_deps_from_keyfile (dir, file_data, error)) - return FALSE; - - if (!flatpak_dir_create_remote_for_ref_file (dir, file_data, opt_arch, &remote, &ref, error)) - return FALSE; - - /* Need to pick up the new config, in case it was applied in the system helper. */ - clone = flatpak_dir_clone (dir); - if (!flatpak_dir_ensure_repo (clone, cancellable, error)) - return FALSE; - - slash = strchr (ref, '/'); - 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_reinstall); - - if (!flatpak_transaction_add_install (transaction, remote, ref, (const char **)opt_subpaths, error)) - return FALSE; + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + flatpak_transaction_set_reinstall (transaction, opt_reinstall); + flatpak_transaction_set_default_arch (transaction, opt_arch); - if (!flatpak_transaction_update_metadata (transaction, FALSE, cancellable, error)) + if (!flatpak_transaction_add_install_flatpakref (transaction, file_data, error)) return FALSE; - if (!flatpak_transaction_run (transaction, TRUE, cancellable, error)) + if (!flatpak_cli_transaction_run (transaction, cancellable, error)) return FALSE; return TRUE; @@ -470,15 +244,17 @@ g_autofree char *default_branch = NULL; FlatpakKinds kinds; g_autoptr(FlatpakTransaction) transaction = NULL; + g_autoptr(FlatpakDir) dir_with_remote = NULL; 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, - FLATPAK_BUILTIN_FLAG_ONE_DIR, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; + /* Start with the default or specified dir, this is fine for opt_bundle or opt_from */ dir = g_ptr_array_index (dirs, 0); if (!opt_bundle && !opt_from && argc >= 2) @@ -506,7 +282,18 @@ remote = remote_url; } else - remote = argv[1]; + { + remote = argv[1]; + + /* If the remote was used, and no single dir was specified, find which one based on the remote */ + if (dirs->len > 1) + { + if (!flatpak_resolve_duplicate_remotes (dirs, remote, &dir_with_remote, cancellable, error)) + return FALSE; + dir = dir_with_remote; + } + } + prefs = &argv[2]; n_prefs = argc - 2; @@ -520,8 +307,16 @@ default_branch = flatpak_dir_get_remote_default_branch (dir, remote); 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_reinstall); + transaction = flatpak_cli_transaction_new (dir, opt_yes, TRUE, error); + if (transaction == NULL) + return FALSE; + + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + flatpak_transaction_set_reinstall (transaction, opt_reinstall); for (i = 0; i < n_prefs; i++) { @@ -548,15 +343,11 @@ if (ref == NULL) return FALSE; - if (!flatpak_transaction_add_install (transaction, remote, ref, (const char **)opt_subpaths, error)) + if (!flatpak_cli_transaction_add_install (transaction, remote, ref, (const char **) opt_subpaths, error)) return FALSE; } - if (!opt_no_pull && - !flatpak_transaction_update_metadata (transaction, FALSE, cancellable, error)) - return FALSE; - - if (!flatpak_transaction_run (transaction, TRUE, cancellable, error)) + if (!flatpak_cli_transaction_run (transaction, cancellable, error)) return FALSE; return TRUE; diff -Nru flatpak-0.11.3/app/flatpak-builtins-list.c flatpak-1.0.7/app/flatpak-builtins-list.c --- flatpak-0.11.3/app/flatpak-builtins-list.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-list.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" #include "flatpak-table-printer.h" static gboolean opt_show_details; @@ -53,14 +53,15 @@ typedef struct { FlatpakDir *dir; - GStrv app_refs; - GStrv runtime_refs; + GStrv app_refs; + GStrv runtime_refs; } RefsData; static RefsData * refs_data_new (FlatpakDir *dir, const GStrv app_refs, const GStrv runtime_refs) { RefsData *refs_data = g_new0 (RefsData, 1); + refs_data->dir = g_object_ref (dir); refs_data->app_refs = g_strdupv ((char **) app_refs); refs_data->runtime_refs = g_strdupv ((char **) runtime_refs); @@ -116,7 +117,7 @@ } static gboolean -print_table_for_refs (gboolean print_apps, GPtrArray* refs_array, const char *arch, GCancellable *cancellable, GError **error) +print_table_for_refs (gboolean print_apps, GPtrArray * refs_array, const char *arch, GCancellable *cancellable, GError **error) { FlatpakTablePrinter *printer = flatpak_table_printer_new (); int i; @@ -159,6 +160,8 @@ g_autoptr(GVariant) deploy_data = NULL; const char *active; const char *alt_id; + const char *eol; + const char *eol_rebase; g_autofree char *latest = NULL; g_autofree char *size_s = NULL; guint64 size = 0; @@ -195,6 +198,8 @@ active = flatpak_deploy_data_get_commit (deploy_data); alt_id = flatpak_deploy_data_get_alt_id (deploy_data); + eol = flatpak_deploy_data_get_eol (deploy_data); + eol_rebase = flatpak_deploy_data_get_eol_rebase (deploy_data); latest = flatpak_dir_read_latest (dir, repo, ref, NULL, NULL, NULL); if (latest) @@ -237,10 +242,7 @@ } if (alt_id) - { - g_autofree char *alt_id_str = g_strdup_printf ("alt-id=%.12s", alt_id); - flatpak_table_printer_append_with_comma (printer, alt_id_str); - } + flatpak_table_printer_append_with_comma_printf (printer, "alt-id=%.12s", alt_id); if (strcmp (parts[0], "app") == 0) { @@ -261,6 +263,12 @@ { flatpak_table_printer_append_with_comma (printer, "partial"); } + + if (eol) + flatpak_table_printer_append_with_comma_printf (printer, "eol=%s", eol); + if (eol_rebase) + flatpak_table_printer_append_with_comma_printf (printer, "eol-rebase=%s", eol_rebase); + flatpak_table_printer_finish_row (printer); } } @@ -306,7 +314,7 @@ g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); if (!flatpak_option_context_parse (context, options, &argc, &argv, - FLATPAK_BUILTIN_FLAG_ALL_DIRS, + FLATPAK_BUILTIN_FLAG_ALL_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, &dirs, cancellable, error)) return FALSE; diff -Nru flatpak-0.11.3/app/flatpak-builtins-list-remotes.c flatpak-1.0.7/app/flatpak-builtins-list-remotes.c --- flatpak-0.11.3/app/flatpak-builtins-list-remotes.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-list-remotes.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,172 +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 "libglnx/libglnx.h" - -#include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-table-printer.h" - -static gboolean opt_show_details; -static gboolean opt_show_disabled; - -static GOptionEntry options[] = { - { "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 } -}; - -gboolean -flatpak_builtin_list_remotes (int argc, char **argv, GCancellable *cancellable, GError **error) -{ - g_autoptr(GOptionContext) context = NULL; - g_autoptr(GPtrArray) dirs = NULL; - guint i = 0, j; - FlatpakTablePrinter *printer; - - 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_STANDARD_DIRS, &dirs, cancellable, error)) - return FALSE; - - if (argc > 1) - return usage_error (context, _("Too many arguments"), error); - - printer = flatpak_table_printer_new (); - - j = 0; - flatpak_table_printer_set_column_title (printer, j++, _("Name")); - if (opt_show_details) - { - flatpak_table_printer_set_column_title (printer, j++, _("Title")); - flatpak_table_printer_set_column_title (printer, j++, _("URL")); - flatpak_table_printer_set_column_title (printer, j++, _("Priority")); - } - flatpak_table_printer_set_column_title (printer, j++, _("Options")); - - for (j = 0; j < dirs->len; j++) - { - FlatpakDir *dir = g_ptr_array_index (dirs, j); - g_auto(GStrv) remotes = NULL; - - remotes = flatpak_dir_list_remotes (dir, cancellable, error); - if (remotes == NULL) - return FALSE; - - for (i = 0; remotes[i] != NULL; i++) - { - char *remote_name = remotes[i]; - gboolean disabled; - g_autofree char *remote_url = NULL; - g_autofree char *title = NULL; - int prio; - g_autofree char *prio_as_string = NULL; - gboolean gpg_verify = TRUE; - - disabled = flatpak_dir_get_remote_disabled (dir, remote_name); - if (disabled && !opt_show_disabled) - continue; - - flatpak_table_printer_add_column (printer, remote_name); - - if (opt_show_details) - { - title = flatpak_dir_get_remote_title (dir, remote_name); - if (title) - flatpak_table_printer_add_column (printer, title); - else - flatpak_table_printer_add_column (printer, "-"); - - if (ostree_repo_remote_get_url (flatpak_dir_get_repo (dir), remote_name, &remote_url, NULL)) - flatpak_table_printer_add_column (printer, remote_url); - else - flatpak_table_printer_add_column (printer, "-"); - - 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); - } - - flatpak_table_printer_add_column (printer, ""); /* Options */ - - if (dirs->len > 1) - { - g_autofree char *dir_id = flatpak_dir_get_name (dir); - flatpak_table_printer_append_with_comma (printer, dir_id); - } - - if (disabled) - flatpak_table_printer_append_with_comma (printer, "disabled"); - - if (flatpak_dir_get_remote_oci (dir, remote_name)) - flatpak_table_printer_append_with_comma (printer, "oci"); - - if (flatpak_dir_get_remote_noenumerate (dir, remote_name)) - flatpak_table_printer_append_with_comma (printer, "no-enumerate"); - - ostree_repo_remote_get_gpg_verify (flatpak_dir_get_repo (dir), remote_name, - &gpg_verify, NULL); - if (!gpg_verify) - flatpak_table_printer_append_with_comma (printer, "no-gpg-verify"); - - flatpak_table_printer_finish_row (printer); - } - } - - flatpak_table_printer_print (printer); - flatpak_table_printer_free (printer); - - return TRUE; -} - -gboolean -flatpak_complete_list_remotes (FlatpakCompletion *completion) -{ - g_autoptr(GOptionContext) context = NULL; - - context = g_option_context_new (""); - 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: - flatpak_complete_options (completion, global_entries); - flatpak_complete_options (completion, options); - flatpak_complete_options (completion, user_entries); - - break; - } - - return TRUE; -} diff -Nru flatpak-0.11.3/app/flatpak-builtins-ls-remote.c flatpak-1.0.7/app/flatpak-builtins-ls-remote.c --- flatpak-0.11.3/app/flatpak-builtins-ls-remote.c 2018-02-07 09:00:11.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-ls-remote.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,364 +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 "libglnx/libglnx.h" - -#include "flatpak-builtins.h" -#include "flatpak-builtins-utils.h" -#include "flatpak-utils.h" -#include "flatpak-table-printer.h" - -static gboolean opt_show_details; -static gboolean opt_runtime; -static gboolean opt_app; -static gboolean opt_all; -static gboolean opt_only_updates; -static char *opt_arch; - -static GOptionEntry options[] = { - { "show-details", 'd', 0, G_OPTION_ARG_NONE, &opt_show_details, N_("Show arches and branches"), NULL }, - { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Show only runtimes"), NULL }, - { "app", 0, 0, G_OPTION_ARG_NONE, &opt_app, N_("Show only apps"), NULL }, - { "updates", 0, 0, G_OPTION_ARG_NONE, &opt_only_updates, N_("Show only those where updates are available"), NULL }, - { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Limit to this arch (* for all)"), N_("ARCH") }, - { "all", 'a', 0, G_OPTION_ARG_NONE, &opt_all, N_("List all refs (including locale/debug)"), NULL }, - { 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(GPtrArray) dirs = NULL; - GHashTableIter refs_iter; - GHashTableIter iter; - gpointer refs_key; - gpointer refs_value; - gpointer key; - gpointer value; - guint n_keys; - g_autofree const char **keys = NULL; - int i; - const char **arches = flatpak_get_arches (); - const char *opt_arches[] = {NULL, 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, (GDestroyNotify)remote_dir_pair_free); - - 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, - FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) - return FALSE; - - if (!opt_app && !opt_runtime) - opt_app = opt_runtime = TRUE; - - if (argc > 2) - return usage_error (context, _("Too many arguments"), error); - - has_remote = (argc == 2); - - if (has_remote) - { - g_autoptr(FlatpakDir) preferred_dir = NULL; - g_autoptr(GHashTable) refs = NULL; - RemoteDirPair *remote_dir_pair = NULL; - - 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; - - 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_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) - { - if (strcmp (opt_arch, "*") == 0) - arches = NULL; - else - { - opt_arches[0] = opt_arch; - arches = opt_arches; - } - } - - FlatpakTablePrinter *printer = flatpak_table_printer_new (); - - i = 0; - flatpak_table_printer_set_column_title (printer, i++, _("Ref")); - if (!has_remote) - flatpak_table_printer_set_column_title (printer, i++, _("Origin")); - flatpak_table_printer_set_column_title (printer, i++, _("Commit")); - flatpak_table_printer_set_column_title (printer, i++, _("Installed size")); - flatpak_table_printer_set_column_title (printer, i++, _("Download size")); - - g_hash_table_iter_init (&refs_iter, refs_hash); - while (g_hash_table_iter_next (&refs_iter, &refs_key, &refs_value)) - { - GHashTable *refs = refs_key; - 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; - 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); - } - - g_hash_table_iter_init (&iter, refs); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *ref = key; - const char *checksum = value; - const char *name = NULL; - g_auto(GStrv) parts = NULL; - - parts = flatpak_decompose_ref (ref, NULL); - if (parts == NULL) - { - g_debug ("Invalid remote ref %s", ref); - continue; - } - - if (opt_only_updates) - { - g_autoptr(GVariant) deploy_data = flatpak_dir_get_deploy_data (dir, ref, cancellable, NULL); - - 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; - } - - if (arches != NULL && !g_strv_contains (arches, parts[2])) - continue; - - if (strcmp (parts[0], "runtime") == 0 && !opt_runtime) - continue; - - if (strcmp (parts[0], "app") == 0 && !opt_app) - continue; - - if (!opt_show_details) - name = parts[1]; - else - name = ref; - - if (!opt_all && - strcmp (parts[0], "runtime") == 0 && - flatpak_id_has_subref_suffix (parts[1])) - { - g_autofree char *prefix_partial_ref = NULL; - char *last_dot = strrchr (parts[1], '.'); - - *last_dot = 0; - prefix_partial_ref = g_strconcat (parts[1], "/", parts[2], "/", parts[3], NULL); - *last_dot = '.'; - - if (g_hash_table_lookup (pref_hash, prefix_partial_ref)) - continue; - } - - if (!opt_all && opt_arch == NULL && - /* Hide non-primary arches if the primary arch exists */ - strcmp (arches[0], parts[2]) != 0) - { - g_autofree char *alt_arch_ref = g_strconcat (parts[0], "/", parts[1], "/", arches[0], "/", parts[3], NULL); - if (g_hash_table_lookup (refs, alt_arch_ref)) - continue; - } - - if (g_hash_table_lookup (names, name) == NULL) - g_hash_table_insert (names, g_strdup (name), g_strdup (checksum)); - } - keys = (const char **) g_hash_table_get_keys_as_array (names, &n_keys); - g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); - - for (i = 0; i < n_keys; i++) - { - flatpak_table_printer_add_column (printer, keys[i]); - - if (!has_remote) - flatpak_table_printer_add_column (printer, remote); - - if (opt_show_details) - { - g_autofree char *value = NULL; - g_autoptr(GVariant) refdata = NULL; - g_autoptr(GError) local_error = NULL; - guint64 installed_size; - guint64 download_size; - const char *metadata; - - value = g_strdup ((char *) g_hash_table_lookup (names, keys[i])); - value[MIN (strlen (value), 12)] = 0; - flatpak_table_printer_add_column (printer, value); - - if (!flatpak_dir_lookup_repo_metadata (dir, remote, cancellable, &local_error, - "xa.cache", "v", &refdata)) - { - if (local_error == NULL) - flatpak_fail (&local_error, _("No ref information available in repository")); - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - - if (g_variant_lookup (refdata, keys[i], "(tt&s)", &installed_size, &download_size, &metadata)) - { - g_autofree char *installed = g_format_size (GUINT64_FROM_BE (installed_size)); - g_autofree char *download = g_format_size (GUINT64_FROM_BE (download_size)); - - flatpak_table_printer_add_decimal_column (printer, installed); - flatpak_table_printer_add_decimal_column (printer, download); - } - } - flatpak_table_printer_finish_row (printer); - } - } - - flatpak_table_printer_print (printer); - flatpak_table_printer_free (printer); - - return TRUE; -} - -gboolean -flatpak_complete_ls_remote (FlatpakCompletion *completion) -{ - g_autoptr(GOptionContext) context = NULL; - g_autoptr(GPtrArray) dirs = NULL; - 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; - - 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; - } - - return TRUE; -} diff -Nru flatpak-0.11.3/app/flatpak-builtins-make-current.c flatpak-1.0.7/app/flatpak-builtins-make-current.c --- flatpak-0.11.3/app/flatpak-builtins-make-current.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-make-current.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" static char *opt_arch; diff -Nru flatpak-0.11.3/app/flatpak-builtins-override.c flatpak-1.0.7/app/flatpak-builtins-override.c --- flatpak-0.11.3/app/flatpak-builtins-override.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-override.c 2019-02-11 12:42:20.000000000 +0000 @@ -32,10 +32,15 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" + +static gboolean opt_reset; +static gboolean opt_show; static GOptionEntry options[] = { + { "reset", 0, 0, G_OPTION_ARG_NONE, &opt_reset, N_("Remove existing overrides"), NULL }, + { "show", 0, 0, G_OPTION_ARG_NONE, &opt_show, N_("Show existing overrides"), NULL }, { NULL } }; @@ -76,6 +81,9 @@ else app = NULL; + if (opt_reset) + return flatpak_remove_override_keyfile (app, flatpak_dir_is_user (dir), &my_error); + metakey = flatpak_load_override_keyfile (app, flatpak_dir_is_user (dir), &my_error); if (metakey == NULL) { @@ -87,6 +95,18 @@ metakey = g_key_file_new (); } + if (opt_show) + { + g_autofree char *data = NULL; + + data = g_key_file_to_data (metakey, NULL, error); + if (data == NULL) + return FALSE; + + g_print ("%s", data); + return TRUE; + } + overrides = flatpak_context_new (); if (!flatpak_context_load_metadata (overrides, metakey, error)) return FALSE; @@ -125,7 +145,7 @@ case 1: /* NAME */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_context_complete (arg_context, completion); + flatpak_complete_context (completion); for (i = 0; i < dirs->len; i++) { diff -Nru flatpak-0.11.3/app/flatpak-builtins-permission-list.c flatpak-1.0.7/app/flatpak-builtins-permission-list.c --- flatpak-0.11.3/app/flatpak-builtins-permission-list.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-permission-list.c 2018-09-26 08:39:05.000000000 +0000 @@ -0,0 +1,259 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" +#include "flatpak-permission-dbus-generated.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" + +static GOptionEntry options[] = { + { NULL } +}; + +static char ** +get_ids_for_table (XdpDbusPermissionStore *store, + const char *table) +{ + char **ids = NULL; + + xdp_dbus_permission_store_call_list_sync (store, table, &ids, NULL, NULL); + + return ids; +} + +static gboolean +list_table (XdpDbusPermissionStore *store, + const char *table, + const char *id, + FlatpakTablePrinter *printer, + GError **error) +{ + const char *one_id[2]; + char **ids; + int i; + + if (id) + { + one_id[0] = id; + one_id[1] = NULL; + ids = (char **) one_id; + } + else + { + if (!xdp_dbus_permission_store_call_list_sync (store, table, &ids, NULL, error)) + return FALSE; + } + + for (i = 0; ids[i]; i++) + { + g_autoptr(GVariant) permissions = NULL; + g_autoptr(GVariant) data = NULL; + g_autoptr(GVariant) d = NULL; + g_autofree char *txt = NULL; + GVariantIter iter; + char *key; + GVariantIter *val; + + if (!xdp_dbus_permission_store_call_lookup_sync (store, table, ids[i], &permissions, &data, NULL, error)) + return FALSE; + + d = g_variant_get_child_value (data, 0); + txt = g_variant_print (d, FALSE); + + if (g_variant_iter_init (&iter, permissions) == 0 && id != 0) + { + flatpak_table_printer_add_column (printer, table); + flatpak_table_printer_add_column (printer, ids[i]); + flatpak_table_printer_add_column (printer, ""); + flatpak_table_printer_add_column (printer, ""); + flatpak_table_printer_add_column (printer, txt); + flatpak_table_printer_finish_row (printer); + } + + while (g_variant_iter_loop (&iter, "{sas}", &key, &val)) + { + char *p; + + flatpak_table_printer_add_column (printer, table); + flatpak_table_printer_add_column (printer, ids[i]); + flatpak_table_printer_add_column (printer, key); + flatpak_table_printer_add_column (printer, ""); + + while (g_variant_iter_loop (val, "s", &p)) + { + flatpak_table_printer_append_with_comma (printer, p); + } + + flatpak_table_printer_add_column (printer, txt); + flatpak_table_printer_finish_row (printer); + } + } + + return TRUE; +} + +gboolean +flatpak_builtin_permission_list (int argc, char **argv, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + const char *table; + const char *id; + FlatpakTablePrinter *printer = NULL; + + context = g_option_context_new (_("[TABLE] [ID] - List permissions")); + 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)) + return FALSE; + + if (argc < 2) + table = NULL; + else + table = argv[1]; + + if (argc < 3) + id = NULL; + else + id = argv[2]; + + if (argc > 3) + return usage_error (context, _("Too many arguments"), error); + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, error); + if (store == NULL) + return FALSE; + + printer = flatpak_table_printer_new (); + int i; + + i = 0; + flatpak_table_printer_set_column_title (printer, i++, _("Table")); + flatpak_table_printer_set_column_title (printer, i++, _("Object")); + flatpak_table_printer_set_column_title (printer, i++, _("App")); + flatpak_table_printer_set_column_title (printer, i++, _("Permissions")); + flatpak_table_printer_set_column_title (printer, i++, _("Data")); + + if (table) + { + if (!list_table (store, table, id, printer, error)) + return FALSE; + } + else + { + int i; + g_auto(GStrv) tables = get_permission_tables (store); + + for (i = 0; tables[i]; i++) + { + if (!list_table (store, tables[i], NULL, printer, error)) + return FALSE; + } + } + + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + return TRUE; +} + +gboolean +flatpak_complete_permission_list (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + int i; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, NULL); + + if (store == NULL) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* TABLE */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + + { + g_auto(GStrv) tables = get_permission_tables (store); + for (i = 0; tables != NULL && tables[i] != NULL; i++) + { + flatpak_complete_word (completion, "%s ", tables[i]); + } + } + + break; + + case 2: + { + g_auto(GStrv) ids = get_ids_for_table (store, completion->argv[1]); + for (i = 0; ids != NULL && ids[i] != NULL; i++) + { + flatpak_complete_word (completion, "%s ", ids[i]); + } + } + + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-permission-remove.c flatpak-1.0.7/app/flatpak-builtins-permission-remove.c --- flatpak-0.11.3/app/flatpak-builtins-permission-remove.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-permission-remove.c 2018-09-26 08:39:05.000000000 +0000 @@ -0,0 +1,175 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" +#include "flatpak-permission-dbus-generated.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" + +static GOptionEntry options[] = { + { NULL } +}; + +static char ** +get_ids_for_table (XdpDbusPermissionStore *store, + const char *table) +{ + char **ids = NULL; + + xdp_dbus_permission_store_call_list_sync (store, table, &ids, NULL, NULL); + + return ids; +} + +static gboolean +remove_item (XdpDbusPermissionStore *store, + const char *table, + const char *id, + GError **error) +{ + /* FIXME some portals cache their permission tables and assume that they're + * the only writers, so they may miss these changes. + * See https://github.com/flatpak/xdg-desktop-portal/issues/197 + */ + if (!xdp_dbus_permission_store_call_delete_sync (store, table, id, NULL, error)) + return FALSE; + + return TRUE; +} + +gboolean +flatpak_builtin_permission_remove (int argc, char **argv, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + const char *table; + const char *id; + + context = g_option_context_new (_("TABLE ID - Remove item from permission store")); + 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)) + return FALSE; + + if (argc < 3) + return usage_error (context, _("Too few arguments"), error); + + if (argc > 3) + return usage_error (context, _("Too many arguments"), error); + + table = argv[1]; + id = argv[2]; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, error); + if (store == NULL) + return FALSE; + + if (!remove_item (store, table, id, error)) + return FALSE; + + return TRUE; +} + +gboolean +flatpak_complete_permission_remove (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + int i; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, NULL); + + if (store == NULL) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* TABLE */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + + { + g_auto(GStrv) tables = get_permission_tables (store); + for (i = 0; tables != NULL && tables[i] != NULL; i++) + { + flatpak_complete_word (completion, "%s ", tables[i]); + } + } + + break; + + case 2: + { + g_auto(GStrv) ids = get_ids_for_table (store, completion->argv[1]); + for (i = 0; ids != NULL && ids[i] != NULL; i++) + { + flatpak_complete_word (completion, "%s ", ids[i]); + } + } + + break; + + default: + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-permission-reset.c flatpak-1.0.7/app/flatpak-builtins-permission-reset.c --- flatpak-0.11.3/app/flatpak-builtins-permission-reset.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-permission-reset.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,184 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" +#include "flatpak-permission-dbus-generated.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" + +static GOptionEntry options[] = { + { NULL } +}; + +static gboolean +remove_for_app (XdpDbusPermissionStore *store, + const char *table, + const char *app_id, + GError **error) +{ + char **ids; + int i; + + /* FIXME some portals cache their permission tables and assume that they're + * the only writers, so they may miss these changes. + * See https://github.com/flatpak/xdg-desktop-portal/issues/197 + */ + + if (!xdp_dbus_permission_store_call_list_sync (store, table, &ids, NULL, error)) + return FALSE; + + for (i = 0; ids[i]; i++) + { + g_autoptr(GVariant) permissions = NULL; + g_autoptr(GVariant) data = NULL; + GVariantIter iter; + char *key; + GVariant *value; + GVariantBuilder builder; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sas}")); + + if (!xdp_dbus_permission_store_call_lookup_sync (store, table, ids[i], + &permissions, &data, + NULL, error)) + return FALSE; + + g_variant_iter_init (&iter, permissions); + while (g_variant_iter_loop (&iter, "{s@as}", &key, &value)) + { + if (strcmp (key, app_id) == 0) + continue; + + g_variant_builder_add (&builder, "{s@as}", key, value); + } + + if (!xdp_dbus_permission_store_call_set_sync (store, table, TRUE, ids[i], + g_variant_builder_end (&builder), + data ? data : g_variant_new_byte (0), + NULL, error)) + return FALSE; + } + + return TRUE; +} + +gboolean +flatpak_builtin_permission_reset (int argc, char **argv, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + const char *app_id; + int i; + g_auto(GStrv) tables = NULL; + + context = g_option_context_new (_("APP_ID - Reset permissions for an app")); + 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)) + return FALSE; + + if (argc != 2) + return usage_error (context, _("Wrong number of arguments"), error); + + app_id = argv[1]; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, error); + if (store == NULL) + return FALSE; + + tables = get_permission_tables (store); + for (i = 0; tables[i]; i++) + { + if (!remove_for_app (store, tables[i], app_id, error)) + return FALSE; + } + + return TRUE; +} + +gboolean +flatpak_complete_permission_reset (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, NULL); + + if (store == NULL) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* APP_ID */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + + flatpak_complete_partial_ref (completion, FLATPAK_KINDS_APP, FALSE, flatpak_dir_get_user (), NULL); + flatpak_complete_partial_ref (completion, FLATPAK_KINDS_APP, FALSE, flatpak_dir_get_system_default (), NULL); + + break; + + default: + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-permission-show.c flatpak-1.0.7/app/flatpak-builtins-permission-show.c --- flatpak-0.11.3/app/flatpak-builtins-permission-show.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-permission-show.c 2018-09-26 08:39:05.000000000 +0000 @@ -0,0 +1,200 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" +#include "flatpak-permission-dbus-generated.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" + +static GOptionEntry options[] = { + { NULL } +}; + +static gboolean +list_for_app (XdpDbusPermissionStore *store, + const char *table, + const char *app_id, + FlatpakTablePrinter *printer, + GError **error) +{ + char **ids; + int i; + + if (!xdp_dbus_permission_store_call_list_sync (store, table, &ids, NULL, error)) + return FALSE; + + for (i = 0; ids[i]; i++) + { + g_autoptr(GVariant) permissions = NULL; + g_autoptr(GVariant) data = NULL; + g_autoptr(GVariant) d = NULL; + g_autofree char *txt = NULL; + GVariantIter iter; + char *key; + GVariantIter *val; + + if (!xdp_dbus_permission_store_call_lookup_sync (store, table, ids[i], &permissions, &data, NULL, error)) + return FALSE; + + d = g_variant_get_child_value (data, 0); + txt = g_variant_print (d, FALSE); + + g_variant_iter_init (&iter, permissions); + while (g_variant_iter_loop (&iter, "{sas}", &key, &val)) + { + char *p; + + if (strcmp (key, app_id) != 0) + continue; + + flatpak_table_printer_add_column (printer, table); + flatpak_table_printer_add_column (printer, ids[i]); + flatpak_table_printer_add_column (printer, key); + flatpak_table_printer_add_column (printer, ""); + + while (g_variant_iter_loop (val, "s", &p)) + { + flatpak_table_printer_append_with_comma (printer, p); + } + + flatpak_table_printer_add_column (printer, txt); + flatpak_table_printer_finish_row (printer); + } + } + + return TRUE; +} + +gboolean +flatpak_builtin_permission_show (int argc, char **argv, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + const char *app_id; + FlatpakTablePrinter *printer = NULL; + int i; + g_auto(GStrv) tables = NULL; + + context = g_option_context_new (_("APP_ID - Show permissions for an app")); + 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)) + return FALSE; + + if (argc != 2) + return usage_error (context, _("Wrong number of arguments"), error); + + app_id = argv[1]; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, error); + if (store == NULL) + return FALSE; + + printer = flatpak_table_printer_new (); + + i = 0; + flatpak_table_printer_set_column_title (printer, i++, _("Table")); + flatpak_table_printer_set_column_title (printer, i++, _("Object")); + flatpak_table_printer_set_column_title (printer, i++, _("App")); + flatpak_table_printer_set_column_title (printer, i++, _("Permissions")); + flatpak_table_printer_set_column_title (printer, i++, _("Data")); + + tables = get_permission_tables (store); + for (i = 0; tables[i]; i++) + { + if (!list_for_app (store, tables[i], app_id, printer, error)) + return FALSE; + } + + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + return TRUE; +} + +gboolean +flatpak_complete_permission_show (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GDBusConnection) session_bus = NULL; + XdpDbusPermissionStore *store = NULL; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + if (session_bus == NULL) + return FALSE; + + store = xdp_dbus_permission_store_proxy_new_sync (session_bus, 0, + "org.freedesktop.impl.portal.PermissionStore", + "/org/freedesktop/impl/portal/PermissionStore", + NULL, NULL); + + if (store == NULL) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* APP_ID */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + + flatpak_complete_partial_ref (completion, FLATPAK_KINDS_APP, FALSE, flatpak_dir_get_user (), NULL); + flatpak_complete_partial_ref (completion, FLATPAK_KINDS_APP, FALSE, flatpak_dir_get_system_default (), NULL); + + break; + + default: + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-ps.c flatpak-1.0.7/app/flatpak-builtins-ps.c --- flatpak-0.11.3/app/flatpak-builtins-ps.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-ps.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,330 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include + +#include + +#include "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-table-printer.h" +#include "flatpak-instance-private.h" + +static gboolean opt_show_cols; +static const char **opt_cols; + +static GOptionEntry options[] = { + { "show-columns", 0, 0, G_OPTION_ARG_NONE, &opt_show_cols, N_("Show available columns"), NULL }, + { "columns", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_cols, N_("What information to show"), N_("FIELD,…") }, + { NULL } +}; + +static struct { + const char *name; + const char *title; + const char *desc; + int len; +} all_columns[] = { + { "application", N_("Application"), N_("Show the application ID"), 0 }, + { "arch", N_("Architecture"), N_("Show the architecture"), 0 }, + { "branch", N_("Branch"), N_("Show the application branch"), 0 }, + { "commit", N_("Commit"), N_("Show the application commit"), 12 }, + { "runtime", N_("Runtime"), N_("Show the runtime ID"), 0 }, + { "runtime-branch", N_("Runtime Branch"), N_("Show the runtime branch"), 0 }, + { "runtime-commit", N_("Runtime Commit"), N_("Show the runtime commit"), 12 }, + { "pid", N_("PID"), N_("Show the PID of the wrapper process"), 0 }, + { "child-pid", N_("Child PID"), N_("Show the PID of the sandbox process"), 0 }, +}; + +#define ALL_COLUMNS "pid,child-pid,application,arch,branch,runtime,runtime-branch" +#define DEFAULT_COLUMNS "pid,application,runtime" + +static int +find_column (const char *name, + GError **error) +{ + int i; + int candidate; + + candidate = -1; + for (i = 0; i < G_N_ELEMENTS (all_columns); i++) + { + if (g_str_equal (all_columns[i].name, name)) + { + return i; + } + else if (g_str_has_prefix (all_columns[i].name, name)) + { + if (candidate == -1) + { + candidate = i; + } + else + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Ambiguous column: %s"), name); + return -1; + } + } + } + + if (candidate >= 0) + return candidate; + + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Unknown column: %s"), name); + return -1; +} + +static char * +column_help (void) +{ + GString *s = g_string_new (""); + int len; + int i; + + g_string_append (s, _("Available columns:\n")); + + len = 0; + for (i = 0; i < G_N_ELEMENTS (all_columns); i++) + len = MAX (len, strlen (all_columns[i].name)); + + len += 4; + for (i = 0; i < G_N_ELEMENTS (all_columns); i++) + g_string_append_printf (s, " %-*s %s\n", len, all_columns[i].name, all_columns[i].desc); + + g_string_append_printf (s, " %-*s %s\n", len, "all", _("Show all columns")); + g_string_append_printf (s, " %-*s %s\n", len, "help", _("Show available columns")); + + return g_string_free (s, FALSE); +} + +static void +show_columns (void) +{ + g_autofree char *col_help = column_help (); + g_print ("%s", col_help); +} + +static gboolean +enumerate_instances (const char *columns, + GError **error) +{ + g_autoptr(GPtrArray) instances = NULL; + FlatpakTablePrinter *printer; + g_auto(GStrv) cols = NULL; + g_autofree int *col_idx = NULL; + int n_cols; + int i, j; + + cols = g_strsplit (columns, ",", 0); + n_cols = g_strv_length (cols); + col_idx = g_new (int, n_cols); + for (i = 0; i < n_cols; i++) + { + col_idx[i] = find_column (cols[i], error); + if (col_idx[i] == -1) + { + return FALSE; + } + } + + printer = flatpak_table_printer_new (); + flatpak_table_printer_set_column_title (printer, 0, _("Instance")); + + for (i = 0; i < n_cols; i++) + flatpak_table_printer_set_column_title (printer, i + 1, all_columns[col_idx[i]].title); + + instances = flatpak_instance_get_all (); + if (instances->len == 0) + { + /* nothing to show */ + return TRUE; + } + + for (j = 0; j < instances->len; j++) + { + FlatpakInstance *instance = (FlatpakInstance *)g_ptr_array_index (instances, j); + + flatpak_table_printer_add_column (printer, flatpak_instance_get_id (instance)); + + for (i = 0; i < n_cols; i++) + { + g_autofree char *freeme = NULL; + const char *col = NULL; + int idx = col_idx[i]; + int len; + + if (strcmp (all_columns[idx].name, "pid") == 0) + col = freeme = g_strdup_printf ("%d", flatpak_instance_get_pid (instance)); + else if (strcmp (all_columns[idx].name, "child-pid") == 0) + col = freeme = g_strdup_printf ("%d", flatpak_instance_get_child_pid (instance)); + else if (strcmp (all_columns[idx].name, "application") == 0) + col = flatpak_instance_get_app (instance); + else if (strcmp (all_columns[idx].name, "arch") == 0) + col = flatpak_instance_get_arch (instance); + else if (strcmp (all_columns[idx].name, "commit") == 0) + col = flatpak_instance_get_commit (instance); + else if (strcmp (all_columns[idx].name, "runtime") == 0) + { + const char *full_ref = flatpak_instance_get_runtime (instance); + if (full_ref != NULL) + { + g_auto(GStrv) ref = flatpak_decompose_ref (full_ref, NULL); + col = freeme = g_strdup (ref[1]); + } + } + else if (strcmp (all_columns[idx].name, "runtime-branch") == 0) + { + const char *full_ref = flatpak_instance_get_runtime (instance); + if (full_ref != NULL) + { + g_auto(GStrv) ref = flatpak_decompose_ref (full_ref, NULL); + col = freeme = g_strdup (ref[3]); + } + } + else if (strcmp (all_columns[idx].name, "runtime-commit") == 0) + col = flatpak_instance_get_runtime_commit (instance); + + len = all_columns[idx].len; + if (len == 0) + flatpak_table_printer_add_column (printer, col); + else + flatpak_table_printer_add_column_len (printer, col, len); + } + + flatpak_table_printer_finish_row (printer); + } + + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + return TRUE; +} + +static gboolean +list_has (const char *list, + const char *term) +{ + const char *p; + int len; + + p = strstr (list, term); + len = strlen (term); + if (p && + (p == list || p[-1] == ',') && + (p[len] == '\0' || p[len] == ',')) + return TRUE; + return FALSE; +} + +gboolean +flatpak_builtin_ps (int argc, + char **argv, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autofree char *col_help = NULL; + g_autofree char *cols = NULL; + + context = g_option_context_new (_(" - Enumerate running sandboxes")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + col_help = column_help (); + g_option_context_set_description (context, col_help); + + if (!flatpak_option_context_parse (context, options, &argc, &argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, cancellable, error)) + return FALSE; + + if (argc > 1) + { + usage_error (context, _("Extra arguments given"), error); + return FALSE; + } + + if (opt_show_cols) + { + show_columns (); + return TRUE; + } + + if (opt_cols) + { + gboolean show_all = FALSE; + int i; + + for (i = 0; opt_cols[i]; i++) + { + if (list_has (opt_cols[i], "help")) + { + show_columns (); + return TRUE; + } + if (list_has (opt_cols[i], "all")) + { + show_all = TRUE; + break; + } + } + + if (show_all) + { + cols = g_strdup (ALL_COLUMNS); + } + else + { + cols = g_strjoinv (",", (char **)opt_cols); + } + } + else + cols = g_strdup (DEFAULT_COLUMNS); + + return enumerate_instances (cols, error); +} + +gboolean +flatpak_complete_ps (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + + context = g_option_context_new (""); + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + break; + + default: + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-remote-add.c flatpak-1.0.7/app/flatpak-builtins-remote-add.c --- flatpak-0.11.3/app/flatpak-builtins-remote-add.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-add.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,419 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils-private.h" + +static gboolean opt_no_gpg_verify; +static gboolean opt_do_gpg_verify; +static gboolean opt_do_enumerate; +static gboolean opt_no_enumerate; +static gboolean opt_do_deps; +static gboolean opt_no_deps; +static gboolean opt_if_not_exists; +static gboolean opt_disable; +static int opt_prio = -1; +static char *opt_title; +static char *opt_default_branch; +static char *opt_url; +static char *opt_collection_id = NULL; +static gboolean opt_from; +static char **opt_gpg_import; + + +static GOptionEntry add_options[] = { + { "if-not-exists", 0, 0, G_OPTION_ARG_NONE, &opt_if_not_exists, N_("Do nothing if the provided remote exists"), NULL }, + { "from", 0, 0, G_OPTION_ARG_NONE, &opt_from, N_("LOCATION specifies a configuration file, not the repo location"), NULL }, + { NULL } +}; + +static GOptionEntry common_options[] = { + { "no-gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_no_gpg_verify, N_("Disable GPG verification"), NULL }, + { "no-enumerate", 0, 0, G_OPTION_ARG_NONE, &opt_no_enumerate, N_("Mark the remote as don't enumerate"), NULL }, + { "no-use-for-deps", 0, 0, G_OPTION_ARG_NONE, &opt_no_deps, N_("Mark the remote as don't use for deps"), NULL }, + { "prio", 0, 0, G_OPTION_ARG_INT, &opt_prio, N_("Set priority (default 1, higher is more prioritized)"), N_("PRIORITY") }, + { "title", 0, 0, G_OPTION_ARG_STRING, &opt_title, N_("A nice name to use for this remote"), N_("TITLE") }, + { "default-branch", 0, 0, G_OPTION_ARG_STRING, &opt_default_branch, N_("Default branch to use for this remote"), N_("BRANCH") }, + { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), N_("COLLECTION-ID") }, + { "gpg-import", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_import, N_("Import GPG key from FILE (- for stdin)"), N_("FILE") }, + { "disable", 0, 0, G_OPTION_ARG_NONE, &opt_disable, N_("Disable the remote"), NULL }, + { NULL } +}; + + +static GKeyFile * +get_config_from_opts (FlatpakDir *dir, const char *remote_name, gboolean *changed) +{ + 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); + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + *changed = TRUE; + } + + if (opt_do_gpg_verify) + { + g_key_file_set_boolean (config, group, "gpg-verify", TRUE); + g_key_file_set_boolean (config, group, "gpg-verify-summary", TRUE); + *changed = TRUE; + } + + if (opt_url) + { + if (g_str_has_prefix (opt_url, "metalink=")) + g_key_file_set_string (config, group, "metalink", opt_url + strlen ("metalink=")); + else + g_key_file_set_string (config, group, "url", opt_url); + *changed = TRUE; + } + + if (opt_collection_id) + { + g_key_file_set_string (config, group, "collection-id", opt_collection_id); + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + *changed = TRUE; + } + + if (opt_title) + { + g_key_file_set_string (config, group, "xa.title", opt_title); + g_key_file_set_boolean (config, group, "xa.title-is-set", TRUE); + *changed = TRUE; + } + + if (opt_default_branch) + { + g_key_file_set_string (config, group, "xa.default-branch", opt_default_branch); + g_key_file_set_boolean (config, group, "xa.default-branch-is-set", TRUE); + *changed = TRUE; + } + + if (opt_no_enumerate) + { + g_key_file_set_boolean (config, group, "xa.noenumerate", TRUE); + *changed = TRUE; + } + + if (opt_do_enumerate) + { + g_key_file_set_boolean (config, group, "xa.noenumerate", FALSE); + *changed = TRUE; + } + + if (opt_no_deps) + { + g_key_file_set_boolean (config, group, "xa.nodeps", TRUE); + *changed = TRUE; + } + + if (opt_do_deps) + { + g_key_file_set_boolean (config, group, "xa.nodeps", FALSE); + *changed = TRUE; + } + + if (opt_disable) + { + g_key_file_set_boolean (config, group, "xa.disable", TRUE); + *changed = TRUE; + } + + if (opt_prio != -1) + { + g_autofree char *prio_as_string = g_strdup_printf ("%d", opt_prio); + g_key_file_set_string (config, group, "xa.prio", prio_as_string); + *changed = TRUE; + } + + return config; +} + +static void +load_options (const char *filename, + GBytes **gpg_data) +{ + g_autoptr(GError) error = NULL; + g_autoptr(GKeyFile) keyfile = g_key_file_new (); + char *str; + gboolean nodeps; + g_autoptr(GBytes) bytes = NULL; + g_autofree char *version = NULL; + + if (g_str_has_prefix (filename, "http:") || + g_str_has_prefix (filename, "https:")) + { + const char *options_data; + gsize options_size; + + bytes = download_uri (filename, &error); + + if (bytes == NULL) + { + g_printerr (_("Can't load uri %s: %s\n"), filename, error->message); + exit (1); + } + + options_data = g_bytes_get_data (bytes, &options_size); + if (!g_key_file_load_from_data (keyfile, options_data, options_size, 0, &error)) + { + g_printerr (_("Can't load uri %s: %s\n"), filename, error->message); + exit (1); + } + } + else + { + if (!g_key_file_load_from_file (keyfile, filename, 0, &error)) + { + g_printerr (_("Can't load file %s: %s\n"), filename, error->message); + exit (1); + } + } + + + if (!g_key_file_has_group (keyfile, FLATPAK_REPO_GROUP)) + { + g_printerr (_("Invalid file format")); + exit (1); + } + + version = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_VERSION_KEY, NULL); + if (version != NULL && strcmp (version, "1") != 0) + { + g_printerr (_("Invalid version %s, only 1 supported"), version); + exit (1); + } + + str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_URL_KEY, NULL); + if (str != NULL) + opt_url = str; + + str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, FLATPAK_REPO_COLLECTION_ID_KEY, NULL); + if (str != NULL) + opt_collection_id = str; + + str = g_key_file_get_locale_string (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_TITLE_KEY, NULL, NULL); + if (str != NULL) + opt_title = str; + + str = g_key_file_get_locale_string (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_DEFAULT_BRANCH_KEY, NULL, NULL); + if (str != NULL) + opt_default_branch = str; + + nodeps = g_key_file_get_boolean (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_NODEPS_KEY, NULL); + if (nodeps) + { + opt_no_deps = TRUE; + opt_do_deps = FALSE; + } + + str = g_key_file_get_string (keyfile, FLATPAK_REPO_GROUP, + FLATPAK_REPO_GPGKEY_KEY, NULL); + if (str != NULL) + { + guchar *decoded; + gsize decoded_len; + + str = g_strstrip (str); + decoded = g_base64_decode (str, &decoded_len); + if (decoded_len < 10) /* Check some minimal size so we don't get crap */ + { + g_printerr (_("Invalid gpg key")); + exit (1); + } + + *gpg_data = g_bytes_new_take (decoded, decoded_len); + if (!opt_no_gpg_verify) + opt_do_gpg_verify = TRUE; + } +} + +gboolean +flatpak_builtin_remote_add (int argc, char **argv, + GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir; + g_autoptr(GFile) file = NULL; + g_auto(GStrv) remotes = NULL; + g_autofree char *remote_url = NULL; + const char *remote_name; + const char *location = NULL; + g_autoptr(GKeyFile) config = NULL; + g_autoptr(GBytes) gpg_data = NULL; + gboolean changed = FALSE; + g_autoptr(GError) local_error = NULL; + gboolean is_oci; + + context = g_option_context_new (_("NAME LOCATION - Add a remote repository")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + g_option_context_add_main_entries (context, common_options, NULL); + + 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); + + if (argc < 3) + return usage_error (context, _("LOCATION must be specified"), error); + + if (argc > 3) + return usage_error (context, _("Too many arguments"), error); + + if (opt_collection_id != NULL && + !ostree_validate_collection_id (opt_collection_id, &local_error)) + return flatpak_fail (error, _("‘%s’ is not a valid collection ID: %s"), opt_collection_id, local_error->message); + + if (opt_collection_id != NULL && + (opt_no_gpg_verify || opt_gpg_import == NULL || opt_gpg_import[0] == NULL)) + return flatpak_fail (error, _("GPG verification is required if collections are enabled")); + + remote_name = argv[1]; + location = argv[2]; + + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + if (g_strv_contains ((const char **) remotes, remote_name)) + { + if (opt_if_not_exists) + return TRUE; /* Do nothing */ + + return flatpak_fail (error, _("Remote %s already exists"), remote_name); + } + + if (opt_from || + flatpak_file_arg_has_suffix (location, ".flatpakrepo")) + { + load_options (location, &gpg_data); + if (opt_url == NULL) + return flatpak_fail (error, _("No url specified in flatpakrepo file")); + } + else + { + file = g_file_new_for_commandline_arg (location); + if (g_file_is_native (file)) + remote_url = g_file_get_uri (file); + else + remote_url = g_strdup (location); + opt_url = remote_url; + } + + /* Default to gpg verify, except for OCI registries */ + is_oci = opt_url && g_str_has_prefix (opt_url, "oci+"); + if (!opt_no_gpg_verify && !is_oci) + opt_do_gpg_verify = TRUE; + + config = get_config_from_opts (dir, remote_name, &changed); + + if (opt_gpg_import != NULL) + { + gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); + if (gpg_data == NULL) + return FALSE; + } + + if (!flatpak_dir_modify_remote (dir, remote_name, config, gpg_data, cancellable, error)) + return FALSE; + + /* Reload previously changed configuration */ + if (!flatpak_dir_recreate_repo (dir, cancellable, error)) + return FALSE; + + /* We can't retrieve the extra metadata until the remote has been added locally, since + ostree_repo_remote_fetch_summary() works with the repository's name, not its URL. + Don't propagate IO failed errors here because we might just be offline - the + remote should already be usable. */ + if (!flatpak_dir_update_remote_configuration (dir, remote_name, cancellable, &local_error)) + { + if (local_error->domain == G_RESOLVER_ERROR || + g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_FAILED)) + { + g_printerr (_("Warning: Could not update extra metadata for '%s': %s\n"), remote_name, local_error->message); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + + return TRUE; +} + +gboolean +flatpak_complete_remote_add (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = 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, + FLATPAK_BUILTIN_FLAG_ONE_DIR, NULL, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, common_options); + flatpak_complete_options (completion, add_options); + flatpak_complete_options (completion, user_entries); + + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-remote-delete.c flatpak-1.0.7/app/flatpak-builtins-remote-delete.c --- flatpak-0.11.3/app/flatpak-builtins-remote-delete.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-delete.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,113 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" + +static gboolean opt_force; + +static GOptionEntry delete_options[] = { + { "force", 0, 0, G_OPTION_ARG_NONE, &opt_force, N_("Remove remote even if in use"), NULL }, + { NULL } +}; + + +gboolean +flatpak_builtin_remote_delete (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = 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")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + g_option_context_add_main_entries (context, delete_options, NULL); + + 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, _("NAME must be specified"), error); + + remote_name = argv[1]; + + if (argc > 2) + return usage_error (context, _("Too many arguments"), error); + + 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; + + return TRUE; +} + +gboolean +flatpak_complete_remote_delete (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = 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, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* REMOTE */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, delete_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; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-remote-info.c flatpak-1.0.7/app/flatpak-builtins-remote-info.c --- flatpak-0.11.3/app/flatpak-builtins-remote-info.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-info.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,399 @@ +/* + * 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-private.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 gboolean opt_show_runtime; +static gboolean opt_show_sdk; + +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 }, + { "show-runtime", 0, 0, G_OPTION_ARG_NONE, &opt_show_runtime, N_("Show runtime"), NULL }, + { "show-sdk", 0, 0, G_OPTION_ARG_NONE, &opt_show_sdk, N_("Show sdk"), 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_remote_info (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 || opt_show_runtime || opt_show_sdk) + friendly = FALSE; + + parts = g_strsplit (ref, "/", 0); + + 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; + } + + g_variant_lookup (commit_metadata, "ostree.collection-binding", "&s", &collection_id); + + 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); + + 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; + g_autofree char *sdk = NULL; + runtime = g_key_file_get_string (metakey, "Application", "runtime", error); + g_print ("%s%s%s %s\n", on, _("Runtime:"), off, runtime ? runtime : "-"); + sdk = g_key_file_get_string (metakey, "Application", "sdk", error); + g_print ("%s%s%s %s\n", on, _("Sdk:"), off, sdk ? sdk : "-"); + } + + 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); + g_autoptr(GVariant) c_m = g_variant_get_child_value (c_v, 0); + gboolean first = TRUE; + + 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 + { + metakey = g_key_file_new (); + if (!g_key_file_load_from_data (metakey, xa_metadata, -1, 0, error)) + return FALSE; + } + + 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 (opt_show_runtime) + { + g_autofree char *runtime = NULL; + maybe_print_space (&first); + + if (metakey) + { + if (strcmp (parts[0], "app") == 0) + runtime = g_key_file_get_string (metakey, "Application", "runtime", NULL); + else + runtime = g_key_file_get_string (metakey, "Runtime", "runtime", NULL); + } + g_print ("%s", runtime ? runtime : "-"); + } + + if (opt_show_sdk) + { + g_autofree char *sdk = NULL; + maybe_print_space (&first); + + if (metakey) + { + if (strcmp (parts[0], "app") == 0) + sdk = g_key_file_get_string (metakey, "Application", "sdk", NULL); + else + sdk = g_key_file_get_string (metakey, "Runtime", "sdk", NULL); + } + g_print ("%s", sdk ? sdk : "-"); + } + + if (!first) + g_print ("\n"); + + if (opt_show_metadata) + 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_remote_info (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 -Nru flatpak-0.11.3/app/flatpak-builtins-remote-list.c flatpak-1.0.7/app/flatpak-builtins-remote-list.c --- flatpak-0.11.3/app/flatpak-builtins-remote-list.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-list.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,180 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-utils-private.h" +#include "flatpak-table-printer.h" + +static gboolean opt_show_details; +static gboolean opt_show_disabled; + +static GOptionEntry options[] = { + { "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 } +}; + +gboolean +flatpak_builtin_remote_list (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + guint i = 0, j; + FlatpakTablePrinter *printer; + + 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_STANDARD_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, &dirs, cancellable, error)) + return FALSE; + + if (argc > 1) + return usage_error (context, _("Too many arguments"), error); + + printer = flatpak_table_printer_new (); + + j = 0; + flatpak_table_printer_set_column_title (printer, j++, _("Name")); + if (opt_show_details) + { + flatpak_table_printer_set_column_title (printer, j++, _("Title")); + flatpak_table_printer_set_column_title (printer, j++, _("URL")); + flatpak_table_printer_set_column_title (printer, j++, _("Collection ID")); + flatpak_table_printer_set_column_title (printer, j++, _("Priority")); + } + flatpak_table_printer_set_column_title (printer, j++, _("Options")); + + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + g_auto(GStrv) remotes = NULL; + + remotes = flatpak_dir_list_remotes (dir, cancellable, error); + if (remotes == NULL) + return FALSE; + + for (i = 0; remotes[i] != NULL; i++) + { + char *remote_name = remotes[i]; + gboolean disabled; + g_autofree char *remote_url = NULL; + g_autofree char *title = NULL; + g_autofree char *collection_id = NULL; + int prio; + g_autofree char *prio_as_string = NULL; + gboolean gpg_verify = TRUE; + + disabled = flatpak_dir_get_remote_disabled (dir, remote_name); + if (disabled && !opt_show_disabled) + continue; + + flatpak_table_printer_add_column (printer, remote_name); + + if (opt_show_details) + { + title = flatpak_dir_get_remote_title (dir, remote_name); + if (title) + flatpak_table_printer_add_column (printer, title); + else + flatpak_table_printer_add_column (printer, "-"); + + if (ostree_repo_remote_get_url (flatpak_dir_get_repo (dir), remote_name, &remote_url, NULL)) + flatpak_table_printer_add_column (printer, remote_url); + else + flatpak_table_printer_add_column (printer, "-"); + + 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, "-"); + + 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); + } + + flatpak_table_printer_add_column (printer, ""); /* Options */ + + if (dirs->len > 1) + { + g_autofree char *dir_id = flatpak_dir_get_name (dir); + flatpak_table_printer_append_with_comma (printer, dir_id); + } + + if (disabled) + flatpak_table_printer_append_with_comma (printer, "disabled"); + + if (flatpak_dir_get_remote_oci (dir, remote_name)) + flatpak_table_printer_append_with_comma (printer, "oci"); + + if (flatpak_dir_get_remote_noenumerate (dir, remote_name)) + flatpak_table_printer_append_with_comma (printer, "no-enumerate"); + + ostree_repo_remote_get_gpg_verify (flatpak_dir_get_repo (dir), remote_name, + &gpg_verify, NULL); + if (!gpg_verify) + flatpak_table_printer_append_with_comma (printer, "no-gpg-verify"); + + flatpak_table_printer_finish_row (printer); + } + } + + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + return TRUE; +} + +gboolean +flatpak_complete_remote_list (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + + context = g_option_context_new (""); + 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: + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, options); + flatpak_complete_options (completion, user_entries); + + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-remote-ls.c flatpak-1.0.7/app/flatpak-builtins-remote-ls.c --- flatpak-0.11.3/app/flatpak-builtins-remote-ls.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-ls.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,402 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils-private.h" +#include "flatpak-table-printer.h" + +static gboolean opt_show_details; +static gboolean opt_runtime; +static gboolean opt_app; +static gboolean opt_all; +static gboolean opt_only_updates; +static char *opt_arch; + +static GOptionEntry options[] = { + { "show-details", 'd', 0, G_OPTION_ARG_NONE, &opt_show_details, N_("Show arches and branches"), NULL }, + { "runtime", 0, 0, G_OPTION_ARG_NONE, &opt_runtime, N_("Show only runtimes"), NULL }, + { "app", 0, 0, G_OPTION_ARG_NONE, &opt_app, N_("Show only apps"), NULL }, + { "updates", 0, 0, G_OPTION_ARG_NONE, &opt_only_updates, N_("Show only those where updates are available"), NULL }, + { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Limit to this arch (* for all)"), N_("ARCH") }, + { "all", 'a', 0, G_OPTION_ARG_NONE, &opt_all, N_("List all refs (including locale/debug)"), NULL }, + { NULL } +}; + +typedef struct RemoteDirPair +{ + gchar *remote_name; + FlatpakRemoteState *state; + FlatpakDir *dir; +} RemoteDirPair; + +static void +remote_dir_pair_free (RemoteDirPair *pair) +{ + g_free (pair->remote_name); + flatpak_remote_state_unref (pair->state); + g_object_unref (pair->dir); + g_free (pair); +} + +static RemoteDirPair * +remote_dir_pair_new (const char *remote_name, FlatpakDir *dir, FlatpakRemoteState *state) +{ + RemoteDirPair *pair = g_new (RemoteDirPair, 1); + + pair->remote_name = g_strdup (remote_name); + pair->state = state; + pair->dir = g_object_ref (dir); + return pair; +} + +gboolean +flatpak_builtin_remote_ls (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + GHashTableIter refs_iter; + GHashTableIter iter; + gpointer refs_key; + gpointer refs_value; + gpointer key; + gpointer value; + guint n_keys; + g_autofree const char **keys = NULL; + int i; + const char **arches = flatpak_get_arches (); + const char *opt_arches[] = {NULL, 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, (GDestroyNotify) remote_dir_pair_free); + + context = g_option_context_new (_(" [REMOTE or URI] - Show available runtimes and applications")); + 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 > 2) + return usage_error (context, _("Too many arguments"), error); + + has_remote = (argc == 2); + + if (has_remote) + { + g_autoptr(FlatpakDir) preferred_dir = NULL; + g_autoptr(GHashTable) refs = NULL; + RemoteDirPair *remote_dir_pair = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + gboolean is_local = FALSE; + + is_local = g_str_has_prefix (argv[1], "file:"); + if (is_local) + preferred_dir = flatpak_dir_get_system_default (); + else + { + if (!flatpak_resolve_duplicate_remotes (dirs, argv[1], &preferred_dir, cancellable, error)) + return FALSE; + } + + state = flatpak_dir_get_remote_state (preferred_dir, argv[1], cancellable, error); + if (state == NULL) + return FALSE; + + if (!flatpak_dir_list_remote_refs (preferred_dir, state, &refs, + cancellable, error)) + return FALSE; + + remote_dir_pair = remote_dir_pair_new (argv[1], preferred_dir, g_steal_pointer (&state)); + 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]; + g_autoptr(FlatpakRemoteState) state = NULL; + + if (flatpak_dir_get_remote_disabled (dir, remote_name)) + continue; + + state = flatpak_dir_get_remote_state (dir, remote_name, + cancellable, error); + if (state == NULL) + return FALSE; + + if (!flatpak_dir_list_remote_refs (dir, state, &refs, + cancellable, error)) + return FALSE; + + remote_dir_pair = remote_dir_pair_new (remote_name, dir, g_steal_pointer (&state)); + g_hash_table_insert (refs_hash, g_steal_pointer (&refs), remote_dir_pair); + } + } + } + + if (opt_arch != NULL) + { + if (strcmp (opt_arch, "*") == 0) + arches = NULL; + else + { + opt_arches[0] = opt_arch; + arches = opt_arches; + } + } + + FlatpakTablePrinter *printer = flatpak_table_printer_new (); + + i = 0; + flatpak_table_printer_set_column_title (printer, i++, _("Ref")); + if (!has_remote) + flatpak_table_printer_set_column_title (printer, i++, _("Origin")); + flatpak_table_printer_set_column_title (printer, i++, _("Commit")); + flatpak_table_printer_set_column_title (printer, i++, _("Installed size")); + flatpak_table_printer_set_column_title (printer, i++, _("Download size")); + flatpak_table_printer_set_column_title (printer, i++, _("Options")); + + g_hash_table_iter_init (&refs_iter, refs_hash); + while (g_hash_table_iter_next (&refs_iter, &refs_key, &refs_value)) + { + GHashTable *refs = refs_key; + RemoteDirPair *remote_dir_pair = refs_value; + const char *remote = remote_dir_pair->remote_name; + FlatpakDir *dir = remote_dir_pair->dir; + FlatpakRemoteState *state = remote_dir_pair->state; + + 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)) + { + FlatpakCollectionRef *coll_ref = key; + char *ref = coll_ref->ref_name; + 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); + } + + g_hash_table_iter_init (&iter, refs); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakCollectionRef *coll_ref = key; + const char *ref = coll_ref->ref_name; + const char *checksum = value; + const char *name = NULL; + g_auto(GStrv) parts = NULL; + + parts = flatpak_decompose_ref (ref, NULL); + if (parts == NULL) + { + g_debug ("Invalid remote ref %s", ref); + continue; + } + + if (opt_only_updates) + { + g_autoptr(GVariant) deploy_data = flatpak_dir_get_deploy_data (dir, ref, cancellable, NULL); + + 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; + } + + if (arches != NULL && !g_strv_contains (arches, parts[2])) + continue; + + if (strcmp (parts[0], "runtime") == 0 && !opt_runtime) + continue; + + if (strcmp (parts[0], "app") == 0 && !opt_app) + continue; + + if (!opt_show_details) + name = parts[1]; + else + name = ref; + + if (!opt_all && + strcmp (parts[0], "runtime") == 0 && + flatpak_id_has_subref_suffix (parts[1])) + { + g_autofree char *prefix_partial_ref = NULL; + char *last_dot = strrchr (parts[1], '.'); + + *last_dot = 0; + prefix_partial_ref = g_strconcat (parts[1], "/", parts[2], "/", parts[3], NULL); + *last_dot = '.'; + + if (g_hash_table_lookup (pref_hash, prefix_partial_ref)) + continue; + } + + if (!opt_all && opt_arch == NULL && + /* Hide non-primary arches if the primary arch exists */ + strcmp (arches[0], parts[2]) != 0) + { + g_autofree char *alt_arch_ref = g_strconcat (parts[0], "/", parts[1], "/", arches[0], "/", parts[3], NULL); + g_autoptr(FlatpakCollectionRef) alt_arch_coll_ref = flatpak_collection_ref_new (coll_ref->collection_id, alt_arch_ref); + if (g_hash_table_lookup (refs, alt_arch_coll_ref)) + continue; + } + + if (g_hash_table_lookup (names, name) == NULL) + g_hash_table_insert (names, g_strdup (name), g_strdup (checksum)); + } + keys = (const char **) g_hash_table_get_keys_as_array (names, &n_keys); + g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); + + for (i = 0; i < n_keys; i++) + { + const char *ref = keys[i]; + + flatpak_table_printer_add_column (printer, ref); + + if (!has_remote) + flatpak_table_printer_add_column (printer, remote); + + if (opt_show_details) + { + g_autofree char *value = NULL; + g_autoptr(GVariant) sparse = NULL; + guint64 installed_size; + guint64 download_size; + g_autofree char *installed = NULL; + g_autofree char *download = NULL; + + value = g_strdup ((char *) g_hash_table_lookup (names, keys[i])); + value[MIN (strlen (value), 12)] = 0; + flatpak_table_printer_add_column (printer, value); + + + if (!flatpak_remote_state_lookup_cache (state, ref, + &download_size, &installed_size, NULL, + error)) + return FALSE; + + /* The sparse cache is optional */ + sparse = flatpak_remote_state_lookup_sparse_cache (state, ref, NULL); + + installed = g_format_size (installed_size); + flatpak_table_printer_add_decimal_column (printer, installed); + + download = g_format_size (download_size); + flatpak_table_printer_add_decimal_column (printer, download); + + flatpak_table_printer_add_column (printer, ""); /* Extra */ + if (sparse) + { + const char *eol; + + if (g_variant_lookup (sparse, "eol", "&s", &eol)) + flatpak_table_printer_append_with_comma_printf (printer, "eol=%s", eol); + if (g_variant_lookup (sparse, "eolr", "&s", &eol)) + flatpak_table_printer_append_with_comma_printf (printer, "eol-rebase=%s", eol); + } + } + flatpak_table_printer_finish_row (printer); + } + } + + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + + return TRUE; +} + +gboolean +flatpak_complete_remote_ls (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + 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; + + 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; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-remote-modify.c flatpak-1.0.7/app/flatpak-builtins-remote-modify.c --- flatpak-0.11.3/app/flatpak-builtins-remote-modify.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-remote-modify.c 2018-09-26 10:10:10.000000000 +0000 @@ -0,0 +1,276 @@ +/* + * 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils-private.h" + +static gboolean opt_no_gpg_verify; +static gboolean opt_do_gpg_verify; +static gboolean opt_do_enumerate; +static gboolean opt_no_enumerate; +static gboolean opt_do_deps; +static gboolean opt_no_deps; +static gboolean opt_enable; +static gboolean opt_update_metadata; +static gboolean opt_disable; +static int opt_prio = -1; +static char *opt_title; +static char *opt_default_branch; +static char *opt_url; +static char *opt_collection_id = NULL; +static char **opt_gpg_import; + + +static GOptionEntry modify_options[] = { + { "gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_do_gpg_verify, N_("Enable GPG verification"), NULL }, + { "enumerate", 0, 0, G_OPTION_ARG_NONE, &opt_do_enumerate, N_("Mark the remote as enumerate"), NULL }, + { "use-for-deps", 0, 0, G_OPTION_ARG_NONE, &opt_do_deps, N_("Mark the remote as used for dependencies"), NULL }, + { "url", 0, 0, G_OPTION_ARG_STRING, &opt_url, N_("Set a new url"), N_("URL") }, + { "enable", 0, 0, G_OPTION_ARG_NONE, &opt_enable, N_("Enable the remote"), NULL }, + { "update-metadata", 0, 0, G_OPTION_ARG_NONE, &opt_update_metadata, N_("Update extra metadata from the summary file"), NULL }, + { NULL } +}; + +static GOptionEntry common_options[] = { + { "no-gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_no_gpg_verify, N_("Disable GPG verification"), NULL }, + { "no-enumerate", 0, 0, G_OPTION_ARG_NONE, &opt_no_enumerate, N_("Mark the remote as don't enumerate"), NULL }, + { "no-use-for-deps", 0, 0, G_OPTION_ARG_NONE, &opt_no_deps, N_("Mark the remote as don't use for deps"), NULL }, + { "prio", 0, 0, G_OPTION_ARG_INT, &opt_prio, N_("Set priority (default 1, higher is more prioritized)"), N_("PRIORITY") }, + { "title", 0, 0, G_OPTION_ARG_STRING, &opt_title, N_("A nice name to use for this remote"), N_("TITLE") }, + { "default-branch", 0, 0, G_OPTION_ARG_STRING, &opt_default_branch, N_("Default branch to use for this remote"), N_("BRANCH") }, + { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), N_("COLLECTION-ID") }, + { "gpg-import", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_import, N_("Import GPG key from FILE (- for stdin)"), N_("FILE") }, + { "disable", 0, 0, G_OPTION_ARG_NONE, &opt_disable, N_("Disable the remote"), NULL }, + { NULL } +}; + + +static GKeyFile * +get_config_from_opts (FlatpakDir *dir, const char *remote_name, gboolean *changed) +{ + 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); + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + *changed = TRUE; + } + + if (opt_do_gpg_verify) + { + g_key_file_set_boolean (config, group, "gpg-verify", TRUE); + g_key_file_set_boolean (config, group, "gpg-verify-summary", TRUE); + *changed = TRUE; + } + + if (opt_url) + { + if (g_str_has_prefix (opt_url, "metalink=")) + g_key_file_set_string (config, group, "metalink", opt_url + strlen ("metalink=")); + else + g_key_file_set_string (config, group, "url", opt_url); + *changed = TRUE; + } + + if (opt_collection_id) + { + g_key_file_set_string (config, group, "collection-id", opt_collection_id); + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + *changed = TRUE; + } + + if (opt_title) + { + g_key_file_set_string (config, group, "xa.title", opt_title); + g_key_file_set_boolean (config, group, "xa.title-is-set", TRUE); + *changed = TRUE; + } + + if (opt_default_branch) + { + g_key_file_set_string (config, group, "xa.default-branch", opt_default_branch); + g_key_file_set_boolean (config, group, "xa.default-branch-is-set", TRUE); + *changed = TRUE; + } + + if (opt_no_enumerate) + { + g_key_file_set_boolean (config, group, "xa.noenumerate", TRUE); + *changed = TRUE; + } + + if (opt_do_enumerate) + { + g_key_file_set_boolean (config, group, "xa.noenumerate", FALSE); + *changed = TRUE; + } + + if (opt_no_deps) + { + g_key_file_set_boolean (config, group, "xa.nodeps", TRUE); + *changed = TRUE; + } + + if (opt_do_deps) + { + g_key_file_set_boolean (config, group, "xa.nodeps", FALSE); + *changed = TRUE; + } + + if (opt_disable) + { + g_key_file_set_boolean (config, group, "xa.disable", TRUE); + *changed = TRUE; + } + else if (opt_enable) + { + g_key_file_set_boolean (config, group, "xa.disable", FALSE); + *changed = TRUE; + } + + if (opt_prio != -1) + { + g_autofree char *prio_as_string = g_strdup_printf ("%d", opt_prio); + g_key_file_set_string (config, group, "xa.prio", prio_as_string); + *changed = TRUE; + } + + return config; +} + +gboolean +flatpak_builtin_remote_modify (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(GKeyFile) config = NULL; + g_autoptr(GBytes) gpg_data = NULL; + const char *remote_name; + gboolean changed = FALSE; + + context = g_option_context_new (_("NAME - Modify a remote repository")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + g_option_context_add_main_entries (context, common_options, NULL); + + if (!flatpak_option_context_parse (context, modify_options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) + return FALSE; + + if (argc < 2) + return usage_error (context, _("Remote NAME must be specified"), error); + + remote_name = argv[1]; + + 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 (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 (preferred_dir, cancellable, error)) + return FALSE; + } + + config = get_config_from_opts (preferred_dir, remote_name, &changed); + + if (opt_gpg_import != NULL) + { + gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); + if (gpg_data == NULL) + return FALSE; + changed = TRUE; + } + + if (!changed) + return TRUE; + + return flatpak_dir_modify_remote (preferred_dir, remote_name, config, gpg_data, cancellable, error); +} + +gboolean +flatpak_complete_remote_modify (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = 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, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) + return FALSE; + + switch (completion->argc) + { + case 0: + case 1: /* REMOTE */ + flatpak_complete_options (completion, global_entries); + flatpak_complete_options (completion, common_options); + flatpak_complete_options (completion, modify_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; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-repair.c flatpak-1.0.7/app/flatpak-builtins-repair.c --- flatpak-0.11.3/app/flatpak-builtins-repair.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-repair.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,426 @@ +/* + * Copyright © 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 "libglnx/libglnx.h" + +#include "flatpak-builtins.h" +#include "flatpak-builtins-utils.h" +#include "flatpak-utils-private.h" +#include "flatpak-table-printer.h" +#include "flatpak-error.h" +#include "flatpak-cli-transaction.h" + +static GOptionEntry options[] = { + { NULL } +}; + +typedef enum { + FSCK_STATUS_OK, + FSCK_STATUS_HAS_MISSING_OBJECTS, + FSCK_STATUS_HAS_INVALID_OBJECTS, +} FsckStatus; + +static FsckStatus +fsck_one_object (OstreeRepo *repo, + const char *checksum, + OstreeObjectType objtype, + gboolean allow_missing) +{ + g_autoptr(GError) local_error = NULL; + + if (!ostree_repo_fsck_object (repo, objtype, checksum, NULL, &local_error)) + { + if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) + { + g_clear_error (&local_error); + if (!allow_missing) + g_printerr (_("Object missing: %s.%s\n"), checksum, + ostree_object_type_to_string (objtype)); + return FSCK_STATUS_HAS_MISSING_OBJECTS; + } + else + { + g_printerr (_("%s, deleting object\n"), local_error->message); + (void) ostree_repo_delete_object (repo, objtype, checksum, NULL, NULL); + return FSCK_STATUS_HAS_INVALID_OBJECTS; + } + } + + return FSCK_STATUS_OK; +} + +/* This is used for leaf object types */ +static FsckStatus +fsck_leaf_object (OstreeRepo *repo, + const char *checksum, + OstreeObjectType objtype, + GHashTable *object_status_cache) +{ + g_autoptr(GVariant) key = NULL; + gpointer cached_status; + FsckStatus status = 0; + + key = g_variant_ref_sink (ostree_object_name_serialize (checksum, objtype)); + + if (g_hash_table_lookup_extended (object_status_cache, key, NULL, &cached_status)) + { + status = GPOINTER_TO_INT (cached_status); + } + else + { + status = fsck_one_object (repo, checksum, objtype, FALSE); + g_hash_table_insert (object_status_cache, g_steal_pointer (&key), GINT_TO_POINTER (status)); + } + + return status; +} + + +static FsckStatus +fsck_dirtree (OstreeRepo *repo, + gboolean partial, + const char *checksum, + GHashTable *object_status_cache) +{ + OstreeRepoCommitIterResult iterres; + + g_autoptr(GError) local_error = NULL; + FsckStatus status = 0; + g_autoptr(GVariant) key = NULL; + g_autoptr(GVariant) dirtree = NULL; + gpointer cached_status; + ostree_cleanup_repo_commit_traverse_iter + OstreeRepoCommitTraverseIter iter = { 0, }; + + key = g_variant_ref_sink (ostree_object_name_serialize (checksum, OSTREE_OBJECT_TYPE_DIR_TREE)); + if (g_hash_table_lookup_extended (object_status_cache, key, NULL, &cached_status)) + return GPOINTER_TO_INT (cached_status); + + /* First verify the dirtree itself */ + status = fsck_one_object (repo, checksum, OSTREE_OBJECT_TYPE_DIR_TREE, partial); + + if (status == FSCK_STATUS_OK) + { + if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_DIR_TREE, checksum, + &dirtree, &local_error) || + !ostree_repo_commit_traverse_iter_init_dirtree (&iter, repo, dirtree, 0, &local_error)) + { + g_printerr (_("Can't load object %s: %s\n"), checksum, local_error->message); + g_clear_error (&local_error); + status = MAX (status, FSCK_STATUS_HAS_INVALID_OBJECTS); + } + else + { + /* Then its children, recursively */ + while (TRUE) + { + iterres = ostree_repo_commit_traverse_iter_next (&iter, NULL, &local_error); + if (iterres == OSTREE_REPO_COMMIT_ITER_RESULT_ERROR) + { + /* Some internal error in the dir-object */ + g_print ("%s\n", local_error->message); + g_clear_error (&local_error); + status = MAX (status, FSCK_STATUS_HAS_INVALID_OBJECTS); + break; + } + else if (iterres == OSTREE_REPO_COMMIT_ITER_RESULT_END) + break; + else if (iterres == OSTREE_REPO_COMMIT_ITER_RESULT_FILE) + { + char *name; + char *checksum; + FsckStatus file_status; + + ostree_repo_commit_traverse_iter_get_file (&iter, &name, &checksum); + file_status = fsck_leaf_object (repo, checksum, OSTREE_OBJECT_TYPE_FILE, object_status_cache); + status = MAX (status, file_status); + } + else if (iterres == OSTREE_REPO_COMMIT_ITER_RESULT_DIR) + { + char *name; + char *meta_checksum; + char *dirtree_checksum; + FsckStatus meta_status; + FsckStatus dirtree_status; + + ostree_repo_commit_traverse_iter_get_dir (&iter, &name, &dirtree_checksum, &meta_checksum); + + meta_status = fsck_leaf_object (repo, meta_checksum, OSTREE_OBJECT_TYPE_DIR_META, object_status_cache); + status = MAX (status, meta_status); + + dirtree_status = fsck_dirtree (repo, partial, dirtree_checksum, object_status_cache); + + status = MAX (status, dirtree_status); + } + else + g_assert_not_reached (); + } + } + } + + g_hash_table_insert (object_status_cache, g_steal_pointer (&key), GINT_TO_POINTER (status)); + return status; +} + +static FsckStatus +fsck_commit (OstreeRepo *repo, + const char *checksum, + GHashTable *object_status_cache) +{ + g_autoptr(GError) local_error = NULL; + g_autoptr(GVariant) commit = NULL; + g_autoptr(GVariant) dirtree_csum_bytes = NULL; + g_autofree char *dirtree_checksum = NULL; + g_autoptr(GVariant) meta_csum_bytes = NULL; + g_autofree char *meta_checksum = NULL; + OstreeRepoCommitState commitstate = 0; + FsckStatus status, dirtree_status, meta_status; + gboolean partial; + + status = fsck_one_object (repo, checksum, OSTREE_OBJECT_TYPE_COMMIT, FALSE); + if (status != FSCK_STATUS_OK) + return status; + + if (!ostree_repo_load_commit (repo, checksum, &commit, &commitstate, &local_error)) + { + g_print ("%s\n", local_error->message); + g_clear_error (&local_error); + return FSCK_STATUS_HAS_INVALID_OBJECTS; + } + + partial = (commitstate & OSTREE_REPO_COMMIT_STATE_PARTIAL) != 0; + + g_variant_get_child (commit, 7, "@ay", &meta_csum_bytes); + meta_checksum = ostree_checksum_from_bytes (ostree_checksum_bytes_peek (meta_csum_bytes)); + + meta_status = fsck_leaf_object (repo, meta_checksum, OSTREE_OBJECT_TYPE_DIR_META, object_status_cache); + status = MAX (status, meta_status); + + g_variant_get_child (commit, 6, "@ay", &dirtree_csum_bytes); + dirtree_checksum = ostree_checksum_from_bytes (ostree_checksum_bytes_peek (dirtree_csum_bytes)); + + dirtree_status = fsck_dirtree (repo, partial, dirtree_checksum, object_status_cache); + status = MAX (status, dirtree_status); + + /* Its ok for partial commits to have missing objects */ + if (status == FSCK_STATUS_HAS_MISSING_OBJECTS && partial) + status = FSCK_STATUS_OK; + + return status; +} + +static void +transaction_add_local_ref (FlatpakDir *dir, + FlatpakTransaction *transaction, + const char *ref) +{ + g_autoptr(GVariant) deploy_data = NULL; + g_autoptr(GError) local_error = NULL; + g_autofree char *repo_checksum = NULL; + const char *origin; + const char **subpaths; + + deploy_data = flatpak_dir_get_deploy_data (dir, ref, NULL, &local_error); + if (deploy_data == NULL) + { + if (!g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) + g_printerr (_("Problems loading data for %s: %s\n"), ref, local_error->message); + g_clear_error (&local_error); + return; + } + + origin = flatpak_deploy_data_get_origin (deploy_data); + subpaths = flatpak_deploy_data_get_subpaths (deploy_data); + + repo_checksum = flatpak_dir_read_latest (dir, origin, ref, NULL, NULL, NULL); + if (repo_checksum == NULL) + { + if (!flatpak_transaction_add_install (transaction, origin, ref, subpaths, &local_error)) + { + g_printerr (_("Error reinstalling %s: %s\n"), ref, local_error->message); + g_clear_error (&local_error); + } + } +} + + +gboolean +flatpak_builtin_repair (int argc, char **argv, GCancellable *cancellable, GError **error) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + FlatpakDir *dir = NULL; + g_autoptr(GHashTable) all_refs = NULL; + g_autoptr(GHashTable) invalid_refs = NULL; + g_autoptr(GHashTable) object_status_cache = NULL; + g_auto(GStrv) app_refs = NULL; + g_auto(GStrv) runtime_refs = NULL; + g_autoptr(FlatpakTransaction) transaction = NULL; + OstreeRepo *repo; + int i; + + context = g_option_context_new (_("- Repair a flatpak installation")); + g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); + + 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 (!flatpak_dir_ensure_repo (dir, cancellable, error)) + return FALSE; + + repo = flatpak_dir_get_repo (dir); + + /* + * Try to repair a flatpak directory: + * + Scan all locally available refs + * + remove ref that don't correspond to a deployed ref + * + Verify the commits they point to and all object they reference: + * + Remove any invalid objects + * + Note any missing objects + * + Any refs that had invalid object, or non-partial refs that had missing objects are removed + * + prune (depth=0) all object not references by a ref, which gets rid of any possibly invalid non-scanned objects + * + Enumerate all deployed refs: + * + if they are not in the repo (or is partial for a non-subdir deploy), re-install them (pull + deploy) + */ + + object_status_cache = g_hash_table_new_full (ostree_hash_object_name, g_variant_equal, + (GDestroyNotify) g_variant_unref, NULL); + + invalid_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + /* Validate that the commit for each ref is available */ + if (!ostree_repo_list_refs (repo, NULL, &all_refs, + cancellable, error)) + return FALSE; + + GLNX_HASH_TABLE_FOREACH_KV (all_refs, const char *, refspec, const char *, checksum) + { + g_autofree char *remote = NULL; + g_autofree char *ref_name = NULL; + FsckStatus status; + + if (!ostree_parse_refspec (refspec, &remote, &ref_name, error)) + return FALSE; + + /* Does this look like a regular ref? */ + if (g_str_has_prefix (ref_name, "app/") || g_str_has_prefix (ref_name, "runtime/")) + { + g_autofree char *origin = flatpak_dir_get_origin (dir, ref_name, cancellable, NULL); + + /* If so, is it deployed, and from this remote? */ + if (remote == NULL || g_strcmp0 (origin, remote) != 0) + { + g_print (_("Removing non-deployed ref %s...\n"), refspec); + (void) ostree_repo_set_ref_immediate (repo, remote, ref_name, NULL, cancellable, NULL); + continue; + } + } + + g_print (_("Verifying %s...\n"), refspec); + + status = fsck_commit (repo, checksum, object_status_cache); + if (status != FSCK_STATUS_OK) + { + g_printerr (_("Deleting ref %s due to missing objects\n"), refspec); + (void) ostree_repo_set_ref_immediate (repo, remote, ref_name, NULL, cancellable, NULL); + } + } + + g_print (_("Pruning objects\n")); + + if (!flatpak_dir_prune (dir, cancellable, error)) + return FALSE; + + if (!flatpak_dir_list_refs (dir, "app", &app_refs, cancellable, NULL)) + return FALSE; + + if (!flatpak_dir_list_refs (dir, "runtime", &runtime_refs, cancellable, NULL)) + return FALSE; + + transaction = flatpak_cli_transaction_new (dir, TRUE, FALSE, error); + if (transaction == NULL) + return FALSE; + + flatpak_transaction_set_disable_dependencies (transaction, TRUE); + flatpak_transaction_set_disable_related (transaction, TRUE); + flatpak_transaction_set_reinstall (transaction, TRUE); + + for (i = 0; app_refs[i] != NULL; i++) + { + const char *ref = app_refs[i]; + + transaction_add_local_ref (dir, transaction, ref); + } + + for (i = 0; runtime_refs[i] != NULL; i++) + { + const char *ref = runtime_refs[i]; + + transaction_add_local_ref (dir, transaction, ref); + } + + if (!flatpak_transaction_is_empty (transaction)) + { + g_print (_("Reinstalling removed refs\n")); + if (!flatpak_cli_transaction_run (transaction, cancellable, error)) + return FALSE; + } + + return TRUE; +} + +gboolean +flatpak_complete_repair (FlatpakCompletion *completion) +{ + g_autoptr(GOptionContext) context = NULL; + g_autoptr(GPtrArray) dirs = NULL; + + context = g_option_context_new (""); + + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) + return FALSE; + + 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); + + break; + } + + return TRUE; +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-repo.c flatpak-1.0.7/app/flatpak-builtins-repo.c --- flatpak-0.11.3/app/flatpak-builtins-repo.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-repo.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" #include "flatpak-table-printer.h" static void @@ -41,7 +41,7 @@ const char *collection_id; const char *default_branch; const char *redirect_url; - const char *redirect_collection_id; + const char *deploy_collection_id; g_autoptr(GVariant) gpg_keys = NULL; if (g_variant_lookup (meta, "xa.title", "&s", &title)) @@ -56,8 +56,13 @@ if (g_variant_lookup (meta, "xa.redirect-url", "&s", &redirect_url)) g_print (_("Redirect URL: %s\n"), redirect_url); - if (g_variant_lookup (meta, "xa.collection-id", "&s", &redirect_collection_id)) - g_print (_("Redirect collection ID: %s\n"), redirect_collection_id); +/* FIXME: Remove this check when we depend on ostree 2018.9 */ +#ifndef OSTREE_META_KEY_DEPLOY_COLLECTION_ID +#define OSTREE_META_KEY_DEPLOY_COLLECTION_ID "ostree.deploy-collection-id" +#endif + + if (g_variant_lookup (meta, OSTREE_META_KEY_DEPLOY_COLLECTION_ID, "&s", &deploy_collection_id)) + g_print (_("Deploy collection ID: %s\n"), deploy_collection_id); if ((gpg_keys = g_variant_lookup_value (meta, "xa.gpg-keys", G_VARIANT_TYPE_BYTESTRING)) != NULL) { @@ -82,7 +87,9 @@ print_branches (GVariant *meta) { g_autoptr(GVariant) cache = NULL; + g_autoptr(GVariant) sparse_cache = NULL; + g_variant_lookup (meta, "xa.sparse-cache", "@a{sa{sv}}", &sparse_cache); cache = g_variant_lookup_value (meta, "xa.cache", NULL); if (cache) { @@ -98,6 +105,7 @@ flatpak_table_printer_set_column_title (printer, 0, _("Ref")); flatpak_table_printer_set_column_title (printer, 1, _("Installed")); flatpak_table_printer_set_column_title (printer, 2, _("Download")); + flatpak_table_printer_set_column_title (printer, 3, _("Options")); refdata = g_variant_get_variant (cache); g_variant_iter_init (&iter, refdata); @@ -109,6 +117,22 @@ flatpak_table_printer_add_column (printer, ref); flatpak_table_printer_add_decimal_column (printer, installed); flatpak_table_printer_add_decimal_column (printer, download); + + flatpak_table_printer_add_column (printer, ""); /* Options */ + + if (sparse_cache) + { + g_autoptr(GVariant) sparse = NULL; + if (g_variant_lookup (sparse_cache, ref, "@a{sv}", &sparse)) + { + const char *eol; + if (g_variant_lookup (sparse, "eol", "&s", &eol)) + flatpak_table_printer_append_with_comma_printf (printer, "eol=%s", eol); + if (g_variant_lookup (sparse, "eolr", "&s", &eol)) + flatpak_table_printer_append_with_comma_printf (printer, "eol-rebase=%s", eol); + } + } + flatpak_table_printer_finish_row (printer); } @@ -179,14 +203,12 @@ if (!ostree_repo_open (repo, cancellable, error)) return FALSE; -#ifdef FLATPAK_ENABLE_P2P /* Try loading the metadata from the ostree-metadata branch first. If that * fails, fall back to the summary file. */ ostree_metadata_ref = OSTREE_REPO_METADATA_REF; - if (!ostree_repo_resolve_rev (repo, ostree_metadata_ref, - TRUE, &ostree_metadata_checksum, error)) + if (!ostree_repo_resolve_rev_ext (repo, ostree_metadata_ref, + TRUE, 0, &ostree_metadata_checksum, error)) return FALSE; -#endif /* FLATPAK_ENABLE_P2P */ if (ostree_metadata_checksum != NULL) { diff -Nru flatpak-0.11.3/app/flatpak-builtins-repo-update.c flatpak-1.0.7/app/flatpak-builtins-repo-update.c --- flatpak-0.11.3/app/flatpak-builtins-repo-update.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-repo-update.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,569 +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 "libglnx/libglnx.h" - -#include "flatpak-builtins.h" -#include "flatpak-utils.h" -#include "flatpak-builtins-utils.h" - -static char *opt_title; -static char *opt_redirect_url; -static char *opt_default_branch; -static char *opt_collection_id = NULL; -static gboolean opt_deploy_collection_id = FALSE; -static char **opt_gpg_import; -static char *opt_generate_delta_from; -static char *opt_generate_delta_to; -static char *opt_generate_delta_ref; -static char *opt_gpg_homedir; -static char **opt_gpg_key_ids; -static gboolean opt_prune; -static gboolean opt_generate_deltas; -static gint opt_prune_depth = -1; - -static GOptionEntry options[] = { - { "redirect-url", 0, 0, G_OPTION_ARG_STRING, &opt_redirect_url, N_("Redirect this repo to a new URL"), N_("URL") }, - { "title", 0, 0, G_OPTION_ARG_STRING, &opt_title, N_("A nice name to use for this repository"), N_("TITLE") }, - { "default-branch", 0, 0, G_OPTION_ARG_STRING, &opt_default_branch, N_("Default branch to use for this repository"), N_("BRANCH") }, -#ifdef FLATPAK_ENABLE_P2P - { "collection-id", 0, 0, G_OPTION_ARG_STRING, &opt_collection_id, N_("Collection ID"), N_("COLLECTION-ID") }, - { "deploy-collection-id", 0, 0, G_OPTION_ARG_NONE, &opt_deploy_collection_id, N_("Permanently deploy collection ID to client remote configurations"), NULL }, -#endif /* FLATPAK_ENABLE_P2P */ - { "gpg-import", 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &opt_gpg_import, N_("Import new default GPG public key from FILE"), N_("FILE") }, - { "gpg-sign", 0, 0, G_OPTION_ARG_STRING_ARRAY, &opt_gpg_key_ids, N_("GPG Key ID to sign the summary 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") }, - { "generate-static-deltas", 0, 0, G_OPTION_ARG_NONE, &opt_generate_deltas, N_("Generate delta files"), NULL }, - { "prune", 0, 0, G_OPTION_ARG_NONE, &opt_prune, N_("Prune unused objects"), NULL }, - { "prune-depth", 0, 0, G_OPTION_ARG_INT, &opt_prune_depth, N_("Only traverse DEPTH parents for each commit (default: -1=infinite)"), N_("DEPTH") }, - { "generate-static-delta-from", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_from, NULL, NULL }, - { "generate-static-delta-to", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_to, NULL, NULL }, - { "generate-static-delta-ref", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &opt_generate_delta_ref, NULL, NULL }, - { NULL } -}; - -static void -_ostree_parse_delta_name (const char *delta_name, - char **out_from, - char **out_to) -{ - g_auto(GStrv) parts = g_strsplit (delta_name, "-", 2); - - if (parts[0] && parts[1]) - { - *out_from = g_steal_pointer (&parts[0]); - *out_to = g_steal_pointer (&parts[1]); - } - else - { - *out_from = NULL; - *out_to = g_steal_pointer (&parts[0]); - } -} - -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 gboolean -_ostree_repo_static_delta_delete (OstreeRepo *self, - const char *delta_id, - GCancellable *cancellable, - GError **error) -{ - gboolean ret = FALSE; - g_autofree char *from = NULL; - g_autofree char *to = NULL; - g_autofree char *deltadir = NULL; - struct stat buf; - int repo_dir_fd = ostree_repo_get_dfd (self); - - _ostree_parse_delta_name (delta_id, &from, &to); - deltadir = _ostree_get_relative_static_delta_path (from, to, NULL); - - if (fstatat (repo_dir_fd, deltadir, &buf, 0) != 0) - { - if (errno == ENOENT) - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "Can't find delta %s", delta_id); - else - glnx_set_error_from_errno (error); - - goto out; - } - - if (!glnx_shutil_rm_rf_at (repo_dir_fd, deltadir, - cancellable, error)) - goto out; - - ret = TRUE; - out: - return ret; -} - -static gboolean -generate_one_delta (OstreeRepo *repo, - const char *from, - const char *to, - const char *ref, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GVariantBuilder) parambuilder = NULL; - g_autoptr(GVariant) params = NULL; - - parambuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - /* Fall back for 1 meg files */ - g_variant_builder_add (parambuilder, "{sv}", - "min-fallback-size", g_variant_new_uint32 (1)); - params = g_variant_ref_sink (g_variant_builder_end (parambuilder)); - - if (ref == NULL) - ref = ""; - - if (from == NULL) - g_print (_("Generating delta: %s (%.10s)\n"), ref, to); - else - g_print (_("Generating delta: %s (%.10s-%.10s)\n"), ref, from, to); - - if (!ostree_repo_static_delta_generate (repo, OSTREE_STATIC_DELTA_GENERATE_OPT_MAJOR, - from, to, NULL, - params, - cancellable, error)) - { - if (from == NULL) - g_prefix_error (error, _("Failed to generate delta %s (%.10s): "), - ref, to); - else - g_prefix_error (error, _("Failed to generate delta %s (%.10s-%.10s): "), - ref, from, to); - return FALSE; - - } - - return TRUE; -} - - -static void -delta_generation_done (GObject *source_object, - GAsyncResult *result, - gpointer user_data) -{ - int *n_spawned_delta_generate = user_data; - (*n_spawned_delta_generate)--; -} - -static gboolean -spawn_delete_generation (GMainContext *context, - int *n_spawned_delta_generate, - OstreeRepo *repo, - GVariant *params, - const char *ref, - const char *from, - const char *to, - GError **error) -{ - g_autoptr(GSubprocessLauncher) launcher = g_subprocess_launcher_new (0); - g_autoptr(GSubprocess) subprocess = NULL; - const char *argv[] = { - "/proc/self/exe", - "build-update-repo", - "--generate-static-delta-ref", - ref, - "--generate-static-delta-to", - to, - NULL, NULL, NULL, NULL - }; - int i = 6; - g_autofree char *exe = NULL; - - exe = flatpak_readlink ("/proc/self/exe", NULL); - if (exe) - argv[0] = exe; - - if (from) - { - argv[i++] = "--generate-static-delta-from"; - argv[i++] = from; - } - - argv[i++] = flatpak_file_get_path_cached (ostree_repo_get_path (repo)); - argv[i++] = NULL; - - g_assert (i <= G_N_ELEMENTS (argv)); - - while (*n_spawned_delta_generate > g_get_num_processors ()) - g_main_context_iteration (context, TRUE); - - subprocess = g_subprocess_launcher_spawnv (launcher, argv, error); - if (subprocess == NULL) - return FALSE; - - (*n_spawned_delta_generate)++; - - g_subprocess_wait_async (subprocess, NULL, delta_generation_done, n_spawned_delta_generate); - - return TRUE; -} - -static gboolean -generate_all_deltas (OstreeRepo *repo, - GPtrArray **unwanted_deltas, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GMainContext) context = g_main_context_new (); - g_autoptr(GHashTable) all_refs = NULL; - g_autoptr(GHashTable) all_deltas_hash = NULL; - g_autoptr(GHashTable) wanted_deltas_hash = NULL; - g_autoptr(GPtrArray) all_deltas = NULL; - int i; - GHashTableIter iter; - gpointer key, value; - g_autoptr(GVariantBuilder) parambuilder = NULL; - g_autoptr(GVariant) params = NULL; - int n_spawned_delta_generate = 0; - - g_print ("Generating static deltas\n"); - - parambuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}")); - /* Fall back for 1 meg files */ - g_variant_builder_add (parambuilder, "{sv}", - "min-fallback-size", g_variant_new_uint32 (1)); - params = g_variant_ref_sink (g_variant_builder_end (parambuilder)); - - if (!ostree_repo_list_static_delta_names (repo, &all_deltas, - cancellable, error)) - return FALSE; - - wanted_deltas_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - - all_deltas_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - for (i = 0; i < all_deltas->len; i++) - g_hash_table_insert (all_deltas_hash, - g_strdup (g_ptr_array_index (all_deltas, i)), - NULL); - - if (!ostree_repo_list_refs (repo, NULL, &all_refs, - cancellable, error)) - return FALSE; - - g_main_context_push_thread_default (context); - - g_hash_table_iter_init (&iter, all_refs); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *ref = key; - const char *commit = value; - g_autoptr(GVariant) variant = NULL; - g_autoptr(GVariant) parent_variant = NULL; - g_autofree char *parent_commit = NULL; - g_autofree char *grandparent_commit = NULL; - - if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, commit, - &variant, NULL)) - { - g_warning ("Couldn't load commit %s", commit); - continue; - } - - /* From empty */ - if (!g_hash_table_contains (all_deltas_hash, commit)) - { - if (!spawn_delete_generation (context, &n_spawned_delta_generate, repo, params, - ref, NULL, commit, - error)) - goto error; - } - - /* Mark this one as wanted */ - g_hash_table_insert (wanted_deltas_hash, g_strdup (commit), GINT_TO_POINTER (1)); - - parent_commit = ostree_commit_get_parent (variant); - - if (parent_commit != NULL && - !ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, parent_commit, - &parent_variant, NULL)) - { - g_warning ("Couldn't load parent commit %s", parent_commit); - continue; - } - - /* From parent */ - if (parent_variant != NULL) - { - g_autofree char *from_parent = g_strdup_printf ("%s-%s", parent_commit, commit); - - if (!g_hash_table_contains (all_deltas_hash, from_parent)) - { - if (!spawn_delete_generation (context, &n_spawned_delta_generate, repo, params, - ref, parent_commit, commit, - error)) - goto error; - } - - /* Mark parent-to-current as wanted */ - g_hash_table_insert (wanted_deltas_hash, g_strdup (from_parent), GINT_TO_POINTER (1)); - - /* We also want to keep around the parent and the grandparent-to-parent deltas - * because otherwise these will be deleted immediately which may cause a race if - * someone is currently downloading them. - * However, there is no need to generate these if they don't exist. - */ - - g_hash_table_insert (wanted_deltas_hash, g_strdup (parent_commit), GINT_TO_POINTER (1)); - grandparent_commit = ostree_commit_get_parent (parent_variant); - if (grandparent_commit != NULL) - g_hash_table_insert (wanted_deltas_hash, - g_strdup_printf ("%s-%s", grandparent_commit, parent_commit), - GINT_TO_POINTER (1)); - } - } - - while (n_spawned_delta_generate > 0) - g_main_context_iteration (context, TRUE); - - g_main_context_pop_thread_default (context); - - *unwanted_deltas = g_ptr_array_new_with_free_func (g_free); - for (i = 0; i < all_deltas->len; i++) - { - const char *delta = g_ptr_array_index (all_deltas, i); - if (!g_hash_table_contains (wanted_deltas_hash, delta)) - g_ptr_array_add (*unwanted_deltas, g_strdup (delta)); - } - - return TRUE; - - error: - g_main_context_pop_thread_default (context); - return FALSE; -} - -gboolean -flatpak_builtin_build_update_repo (int argc, char **argv, - GCancellable *cancellable, GError **error) -{ - g_autoptr(GOptionContext) context = NULL; - g_autoptr(GFile) repofile = NULL; - g_autoptr(OstreeRepo) repo = NULL; - const char *location; - g_autoptr(GPtrArray) unwanted_deltas = NULL; - - context = g_option_context_new (_("LOCATION - Update repository metadata")); - 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)) - return FALSE; - - if (argc < 2) - return usage_error (context, _("LOCATION must be specified"), error); - - location = argv[1]; - - repofile = g_file_new_for_commandline_arg (location); - repo = ostree_repo_new (repofile); - - if (!ostree_repo_open (repo, cancellable, error)) - return FALSE; - - if (opt_generate_delta_to) - { - if (!generate_one_delta (repo, opt_generate_delta_from, opt_generate_delta_to, opt_generate_delta_ref, cancellable, error)) - return FALSE; - return TRUE; - } - - if (opt_title && - !flatpak_repo_set_title (repo, opt_title[0] ? opt_title : NULL, error)) - return FALSE; - - if (opt_redirect_url && - !flatpak_repo_set_redirect_url (repo, opt_redirect_url[0] ? opt_redirect_url : NULL, error)) - return FALSE; - - if (opt_default_branch && - !flatpak_repo_set_default_branch (repo, opt_default_branch[0] ? opt_default_branch : NULL, error)) - return FALSE; - - if (opt_collection_id != NULL) - { - /* Only allow a transition from no collection ID to a non-empty collection ID. - * Changing the collection ID between two different non-empty values is too - * dangerous: it will break all clients who have previously pulled from the repository. - * Require the user to recreate the repository from scratch in that case. */ -#ifdef FLATPAK_ENABLE_P2P - const char *old_collection_id = ostree_repo_get_collection_id (repo); -#else /* if !FLATPAK_ENABLE_P2P */ - const char *old_collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ - const char *new_collection_id = opt_collection_id[0] ? opt_collection_id : NULL; - - if (old_collection_id != NULL && - g_strcmp0 (old_collection_id, new_collection_id) != 0) - return flatpak_fail (error, "The collection ID of an existing repository cannot be changed. " - "Recreate the repository to change or clear its collection ID."); - - if (!flatpak_repo_set_collection_id (repo, new_collection_id, error)) - return FALSE; - } - - if (opt_deploy_collection_id && - !flatpak_repo_set_deploy_collection_id (repo, TRUE, error)) - return FALSE; - - if (opt_gpg_import) - { - g_autoptr(GBytes) gpg_data = flatpak_load_gpg_keys (opt_gpg_import, cancellable, error); - if (gpg_data == NULL) - return FALSE; - - if (!flatpak_repo_set_gpg_keys (repo, gpg_data, error)) - return FALSE; - } - - g_print (_("Updating appstream branch\n")); - if (!flatpak_repo_generate_appstream (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, 0, cancellable, error)) - return FALSE; - - if (opt_generate_deltas && - !generate_all_deltas (repo, &unwanted_deltas, cancellable, error)) - return FALSE; - - if (unwanted_deltas != NULL) - { - int i; - for (i = 0; i < unwanted_deltas->len; i++) - { - const char *delta = g_ptr_array_index (unwanted_deltas, i); - g_print ("Deleting unwanted delta: %s\n", delta); - g_autoptr(GError) my_error = NULL; - if (!_ostree_repo_static_delta_delete (repo, delta, cancellable, &my_error)) - g_printerr ("Unable to delete delta %s: %s\n", delta, my_error->message); - } - } - - g_print (_("Updating summary\n")); - if (!flatpak_repo_update (repo, (const char **) opt_gpg_key_ids, opt_gpg_homedir, cancellable, error)) - return FALSE; - - if (opt_prune) - { - gint n_objects_total; - gint n_objects_pruned; - guint64 objsize_total; - g_autofree char *formatted_freed_size = NULL; - - g_print ("Pruning old commits\n"); - if (!ostree_repo_prune (repo, OSTREE_REPO_PRUNE_FLAGS_REFS_ONLY, opt_prune_depth, - &n_objects_total, &n_objects_pruned, &objsize_total, - cancellable, error)) - return FALSE; - - formatted_freed_size = g_format_size_full (objsize_total, 0); - - g_print (_("Total objects: %u\n"), n_objects_total); - if (n_objects_pruned == 0) - g_print (_("No unreachable objects\n")); - else - g_print (_("Deleted %u objects, %s freed\n"), - n_objects_pruned, formatted_freed_size); - } - - return TRUE; -} - - -gboolean -flatpak_complete_build_update_repo (FlatpakCompletion *completion) -{ - g_autoptr(GOptionContext) context = NULL; - - context = g_option_context_new (""); - - if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, - FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, NULL, NULL)) - return FALSE; - - switch (completion->argc) - { - case 0: - case 1: /* LOCATION */ - flatpak_complete_options (completion, global_entries); - flatpak_complete_options (completion, options); - - flatpak_complete_dir (completion); - break; - } - - return TRUE; -} diff -Nru flatpak-0.11.3/app/flatpak-builtins-run.c flatpak-1.0.7/app/flatpak-builtins-run.c --- flatpak-0.11.3/app/flatpak-builtins-run.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-run.c 2019-02-11 12:42:20.000000000 +0000 @@ -32,10 +32,10 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" #include "flatpak-error.h" -#include "flatpak-dbus.h" -#include "flatpak-run.h" +#include "flatpak-dbus-generated.h" +#include "flatpak-run-private.h" static char *opt_arch; static char *opt_branch; @@ -44,9 +44,15 @@ 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_no_documents_portal; static gboolean opt_file_forwarding; +static gboolean opt_die_with_parent; +static gboolean opt_sandbox; static char *opt_runtime; static char *opt_runtime_version; +static char *opt_commit; +static char *opt_runtime_commit; static GOptionEntry options[] = { { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to use"), N_("ARCH") }, @@ -58,7 +64,13 @@ { "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 }, + { "no-documents-portal", 0, 0, G_OPTION_ARG_NONE, &opt_no_documents_portal, N_("Don't start portals"), NULL }, { "file-forwarding", 0, 0, G_OPTION_ARG_NONE, &opt_file_forwarding, N_("Enable file forwarding"), NULL }, + { "commit", 0, 0, G_OPTION_ARG_STRING, &opt_commit, N_("Run specified commit"), NULL }, + { "runtime-commit", 0, 0, G_OPTION_ARG_STRING, &opt_runtime_commit, N_("Use specified runtime commit"), NULL }, + { "sandbox", 0, 0, G_OPTION_ARG_NONE, &opt_sandbox, N_("Run completely sandboxed"), NULL }, + { "die-with-parent", 'p', 0, G_OPTION_ARG_NONE, &opt_die_with_parent, N_("Kill processes when the parent process dies"), NULL }, { NULL } }; @@ -78,6 +90,7 @@ g_autofree char *branch = NULL; FlatpakKinds kinds; g_autoptr(GError) local_error = NULL; + g_autoptr(GPtrArray) dirs = NULL; context = g_option_context_new (_("APP [args...] - Run an app")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); @@ -98,7 +111,9 @@ 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, FLATPAK_BUILTIN_FLAG_NO_DIR, NULL, cancellable, error)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_ALL_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, + &dirs, cancellable, error)) return FALSE; if (rest_argc == 0) @@ -134,7 +149,7 @@ if (app_ref == NULL) return FALSE; - app_deploy = flatpak_find_deploy_for_ref (app_ref, cancellable, &local_error); + app_deploy = flatpak_find_deploy_for_ref_in (dirs, app_ref, opt_commit, cancellable, &local_error); if (app_deploy == NULL && (!g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED) || (kinds & FLATPAK_KINDS_RUNTIME) == 0)) @@ -156,7 +171,7 @@ if (runtime_ref == NULL) return FALSE; - runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, cancellable, &local_error2); + runtime_deploy = flatpak_find_deploy_for_ref_in (dirs, runtime_ref, opt_commit ? opt_commit : opt_runtime_commit, cancellable, &local_error2); if (runtime_deploy == NULL) { /* Report old app-kind error, as its more likely right */ @@ -175,11 +190,16 @@ arg_context, opt_runtime, opt_runtime_version, + opt_runtime_commit, + (opt_sandbox ? FLATPAK_RUN_FLAG_SANDBOX : 0) | + (opt_die_with_parent ? FLATPAK_RUN_FLAG_DIE_WITH_PARENT : 0) | (opt_devel ? FLATPAK_RUN_FLAG_DEVEL : 0) | (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_no_documents_portal ? FLATPAK_RUN_FLAG_NO_DOCUMENTS_PORTAL : 0), opt_command, &argv[rest_argv_start + 1], rest_argc - 1, @@ -216,7 +236,7 @@ case 1: /* NAME */ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); - flatpak_context_complete (arg_context, completion); + flatpak_complete_context (completion); user_dir = flatpak_dir_get_user (); { @@ -233,10 +253,11 @@ } system_dirs = flatpak_dir_get_system_list (NULL, &error); - if (system_dirs == NULL) { - flatpak_completion_debug ("find system installations error: %s", error->message); - break; - } + if (system_dirs == NULL) + { + flatpak_completion_debug ("find system installations error: %s", error->message); + break; + } for (i = 0; i < system_dirs->len; i++) { diff -Nru flatpak-0.11.3/app/flatpak-builtins-search.c flatpak-1.0.7/app/flatpak-builtins-search.c --- flatpak-0.11.3/app/flatpak-builtins-search.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-search.c 2019-02-11 12:42:20.000000000 +0000 @@ -25,20 +25,27 @@ #include "flatpak-builtins.h" #include "flatpak-builtins-utils.h" -#include "flatpak-dir.h" +#include "flatpak-dir-private.h" #include "flatpak-table-printer.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" -/* Appstream data expires after a day */ -#define FLATPAK_APPSTREAM_TTL 86400 +static char *opt_arch; + +static GOptionEntry options[] = { + { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to search for"), N_("ARCH") }, + { NULL} +}; static GPtrArray * -get_remote_stores (GPtrArray *dirs, GCancellable *cancellable) +get_remote_stores (GPtrArray *dirs, const char *arch, 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; + guint i, j; + + if (arch == NULL) + arch = flatpak_get_arch (); + for (i = 0; i < dirs->len; ++i) { FlatpakDir *dir = g_ptr_array_index (dirs, i); @@ -62,32 +69,36 @@ { g_autoptr(AsStore) store = as_store_new (); -#if AS_CHECK_VERSION(0, 6, 1) +#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 = NULL; + + if (flatpak_dir_get_remote_oci (dir, remotes[j])) + appstream_path = g_build_filename (install_path, "appstream", remotes[j], + arch, "appstream.xml.gz", + NULL); + else + appstream_path = g_build_filename (install_path, "appstream", remotes[j], + arch, "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) { - 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; - } + // 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); } - 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)); + 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; @@ -97,13 +108,15 @@ clear_app_arches (AsApp *app) { GPtrArray *arches = as_app_get_architectures (app); + g_ptr_array_set_size (arches, 0); } -typedef struct MatchResult { - AsApp *app; +typedef struct MatchResult +{ + AsApp *app; GPtrArray *remotes; - guint score; + guint score; } MatchResult; static void @@ -118,6 +131,7 @@ 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; @@ -131,23 +145,24 @@ 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)) + { + 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)); + } + 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; + return (int) b->score - (int) a->score; } -#if !AS_CHECK_VERSION(0, 6, 1) +#if !AS_CHECK_VERSION (0, 6, 1) /* Roughly copied directly from appstream-glib */ static const gchar * @@ -169,8 +184,8 @@ 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)); + as_app_fix_unique_nullable (kind_str), + as_app_fix_unique_nullable (id_str)); } static gboolean @@ -222,7 +237,7 @@ flatpak_table_printer_add_column (printer, id); flatpak_table_printer_add_column (printer, version); -#if AS_CHECK_VERSION(0, 6, 1) +#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)); @@ -238,21 +253,17 @@ 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)) + if (!flatpak_option_context_parse (context, options, &argc, &argv, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS | FLATPAK_BUILTIN_FLAG_OPTIONAL_REPO, + &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; - } + if (!update_appstream (dirs, NULL, opt_arch, FLATPAK_APPSTREAM_TTL, TRUE, cancellable, error)) + return FALSE; const char *search_text = argv[1]; GSList *matches = NULL; @@ -260,7 +271,7 @@ // 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); + g_autoptr(GPtrArray) remote_stores = get_remote_stores (dirs, opt_arch, cancellable); for (j = 0; j < remote_stores->len; ++j) { AsStore *store = g_ptr_array_index (remote_stores, j); @@ -282,7 +293,7 @@ // Avoid duplicate entries, but show multiple remotes GSList *list_entry = g_slist_find_custom (matches, app, - (GCompareFunc)compare_apps); + (GCompareFunc) compare_apps); MatchResult *result = NULL; if (list_entry != NULL) result = list_entry->data; @@ -290,10 +301,10 @@ { result = match_result_new (app, score); matches = g_slist_insert_sorted_with_data (matches, result, - (GCompareDataFunc)compare_by_score, NULL); + (GCompareDataFunc) compare_by_score, NULL); } match_result_add_remote (result, - g_object_get_data (G_OBJECT(store), "remote-name")); + g_object_get_data (G_OBJECT (store), "remote-name")); } } @@ -304,16 +315,16 @@ 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) +#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); + 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); + g_slist_free_full (matches, (GDestroyNotify) match_result_free); } else { @@ -328,7 +339,7 @@ g_autoptr(GOptionContext) context = NULL; context = g_option_context_new (""); - if (!flatpak_option_context_parse (context, NULL, &completion->argc, &completion->argv, + if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, NULL, NULL, NULL)) return FALSE; diff -Nru flatpak-0.11.3/app/flatpak-builtins-uninstall.c flatpak-1.0.7/app/flatpak-builtins-uninstall.c --- flatpak-0.11.3/app/flatpak-builtins-uninstall.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-uninstall.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,7 +31,10 @@ #include "flatpak-builtins.h" #include "flatpak-builtins-utils.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" +#include "flatpak-cli-transaction.h" +#include +#include "flatpak-error.h" static char *opt_arch; static gboolean opt_keep_ref; @@ -39,6 +42,9 @@ static gboolean opt_no_related; static gboolean opt_runtime; static gboolean opt_app; +static gboolean opt_all; +static gboolean opt_yes; +static gboolean opt_unused; static GOptionEntry options[] = { { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, N_("Arch to uninstall"), N_("ARCH") }, @@ -47,38 +53,121 @@ { "force-remove", 0, 0, G_OPTION_ARG_NONE, &opt_force_remove, N_("Remove files even if running"), NULL }, { "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 }, + { "all", 0, 0, G_OPTION_ARG_NONE, &opt_all, N_("Uninstall all"), NULL }, + { "unused", 0, 0, G_OPTION_ARG_NONE, &opt_unused, N_("Uninstall unused"), NULL }, + { "assumeyes", 'y', 0, G_OPTION_ARG_NONE, &opt_yes, N_("Automatically answer yes for all questions"), NULL }, { NULL } }; +typedef struct +{ + FlatpakDir *dir; + GHashTable *refs_hash; + GPtrArray *refs; +} UninstallDir; + +static UninstallDir * +uninstall_dir_new (FlatpakDir *dir) +{ + UninstallDir *udir = g_new0 (UninstallDir, 1); + + udir->dir = g_object_ref (dir); + udir->refs = g_ptr_array_new_with_free_func (g_free); + udir->refs_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + return udir; +} + +static void +uninstall_dir_free (UninstallDir *udir) +{ + g_object_unref (udir->dir); + g_hash_table_unref (udir->refs_hash); + g_ptr_array_unref (udir->refs); + g_free (udir); +} + +static void +uninstall_dir_add_ref (UninstallDir *udir, + const char *ref) +{ + if (g_hash_table_insert (udir->refs_hash, g_strdup (ref), NULL)) + g_ptr_array_add (udir->refs, g_strdup (ref)); +} + +static UninstallDir * +uninstall_dir_ensure (GHashTable *uninstall_dirs, + FlatpakDir *dir) +{ + UninstallDir *udir; + + udir = g_hash_table_lookup (uninstall_dirs, dir); + if (udir == NULL) + { + udir = uninstall_dir_new (dir); + g_hash_table_insert (uninstall_dirs, udir->dir, udir); + } + + return udir; +} + +static void +find_used_refs (FlatpakDir *dir, GHashTable *used_refs, const char *ref, const char *origin) +{ + g_autoptr(GPtrArray) related = NULL; + int i; + + g_hash_table_add (used_refs, g_strdup (ref)); + + related = flatpak_dir_find_local_related (dir, ref, origin, TRUE, NULL, NULL); + if (related == NULL) + return; + + for (i = 0; i < related->len; i++) + { + FlatpakRelated *rel = g_ptr_array_index (related, i); + + if (!rel->auto_prune && !g_hash_table_contains (used_refs, rel->ref)) + { + g_autofree char *related_origin = NULL; + + g_hash_table_add (used_refs, g_strdup (rel->ref)); + + related_origin = flatpak_dir_get_origin (dir, rel->ref, NULL, NULL); + if (related_origin != NULL) + find_used_refs (dir, used_refs, rel->ref, related_origin); + } + } +} + gboolean flatpak_builtin_uninstall (int argc, char **argv, GCancellable *cancellable, GError **error) { g_autoptr(GOptionContext) context = NULL; g_autoptr(GPtrArray) dirs = NULL; - FlatpakDir *dir; char **prefs = NULL; - int i, j, n_prefs; + int i, j, k, n_prefs; const char *default_branch = NULL; - g_autofree char *ref = NULL; - FlatpakHelperUninstallFlags flags = 0; - g_autoptr(GPtrArray) related = NULL; FlatpakKinds kinds; FlatpakKinds kind; - g_autoptr(GHashTable) uninstall_refs_hash = NULL; - g_autoptr(GPtrArray) uninstall_refs = NULL; + g_autoptr(GHashTable) uninstall_dirs = NULL; 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, - FLATPAK_BUILTIN_FLAG_ONE_DIR, + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, cancellable, error)) return FALSE; - dir = g_ptr_array_index (dirs, 0); + if (argc < 2 && !opt_all && !opt_unused) + return usage_error (context, _("Must specify at least one REF, --unused or --all"), error); + + if (argc >= 2 && opt_all) + return usage_error (context, _("Must not specify REFs when using --all"), error); - if (argc < 2) - return usage_error (context, _("Must specify at least one REF"), error); + if (argc >= 2 && opt_unused) + return usage_error (context, _("Must not specify REFs when using --unused"), error); prefs = &argv[1]; n_prefs = argc - 1; @@ -91,81 +180,245 @@ } kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); - uninstall_refs = g_ptr_array_new_with_free_func (g_free); - uninstall_refs_hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + uninstall_dirs = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) uninstall_dir_free); - for (j = 0; j < n_prefs; j++) + if (opt_all) { - const char *pref = NULL; - FlatpakKinds matched_kinds; - g_autofree char *id = NULL; - g_autofree char *arch = NULL; - g_autofree char *branch = NULL; - g_autoptr(GError) local_error = NULL; - g_autofree char *origin = NULL; - - pref = prefs[j]; - - if (!flatpak_split_partial_ref_arg (pref, kinds, opt_arch, default_branch, - &matched_kinds, &id, &arch, &branch, error)) - return FALSE; + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + UninstallDir *udir = uninstall_dir_ensure (uninstall_dirs, dir); + g_auto(GStrv) app_refs = NULL; + g_auto(GStrv) runtime_refs = NULL; + + if (flatpak_dir_list_refs (dir, "app", &app_refs, NULL, NULL)) + { + for (k = 0; app_refs[k] != NULL; k++) + uninstall_dir_add_ref (udir, app_refs[k]); + } + + if (flatpak_dir_list_refs (dir, "runtime", &runtime_refs, NULL, NULL)) + { + for (k = 0; runtime_refs[k] != NULL; k++) + uninstall_dir_add_ref (udir, runtime_refs[k]); + } + } + } + else if (opt_unused) + { + gboolean found_something_to_uninstall = FALSE; - ref = flatpak_dir_find_installed_ref (dir, id, branch, arch, - kinds, &kind, error); - if (ref == NULL) - return FALSE; + for (j = 0; j < dirs->len; j++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, j); + UninstallDir *udir = uninstall_dir_ensure (uninstall_dirs, dir); + g_auto(GStrv) app_refs = NULL; + g_auto(GStrv) runtime_refs = NULL; + g_autoptr(GHashTable) used_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + g_autoptr(GHashTable) used_runtimes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - if (g_hash_table_insert (uninstall_refs_hash, g_strdup (ref), NULL)) - g_ptr_array_add (uninstall_refs, g_strdup (ref)); + if (!flatpak_dir_list_refs (dir, "app", &app_refs, NULL, NULL)) + continue; - /* TODO: when removing runtimes, look for apps that use it, require --force */ + if (!flatpak_dir_list_refs (dir, "runtime", &runtime_refs, NULL, NULL)) + continue; - if (opt_no_related) - continue; + for (i = 0; app_refs[i] != NULL; i++) + { + const char *ref = app_refs[i]; + g_autoptr(FlatpakDeploy) deploy = NULL; + g_autofree char *origin = NULL; + g_autofree char *runtime = NULL; + g_autofree char *sdk = NULL; + g_autoptr(GKeyFile) metakey = NULL; + g_auto(GStrv) parts = g_strsplit (ref, "/", -1); + + if (opt_arch != NULL && strcmp (parts[2], opt_arch) != 0) + continue; + + deploy = flatpak_dir_load_deployed (dir, ref, NULL, NULL, NULL); + if (deploy == NULL) + continue; + + origin = flatpak_dir_get_origin (dir, ref, NULL, NULL); + if (origin == NULL) + continue; + + find_used_refs (dir, used_refs, ref, origin); + + metakey = flatpak_deploy_get_metadata (deploy); + runtime = g_key_file_get_string (metakey, "Application", "runtime", NULL); + if (runtime) + g_hash_table_add (used_runtimes, g_steal_pointer (&runtime)); + + sdk = g_key_file_get_string (metakey, "Application", "sdk", NULL); + if (sdk) + g_hash_table_add (used_runtimes, g_steal_pointer (&sdk)); + } + + GLNX_HASH_TABLE_FOREACH (used_runtimes, const char *, runtime) + { + g_autofree char *runtime_ref = g_strconcat ("runtime/", runtime, NULL); + + g_autoptr(FlatpakDeploy) deploy = NULL; + g_autofree char *origin = NULL; + g_autofree char *sdk = NULL; + g_autoptr(GKeyFile) metakey = NULL; + + deploy = flatpak_dir_load_deployed (dir, runtime_ref, NULL, NULL, NULL); + if (deploy == NULL) + continue; + + origin = flatpak_dir_get_origin (dir, runtime_ref, NULL, NULL); + if (origin == NULL) + continue; + + find_used_refs (dir, used_refs, runtime_ref, origin); + + metakey = flatpak_deploy_get_metadata (deploy); + sdk = g_key_file_get_string (metakey, "Runtime", "sdk", NULL); + if (sdk) + { + g_autofree char *sdk_ref = g_strconcat ("runtime/", sdk, NULL); + g_autofree char *sdk_origin = flatpak_dir_get_origin (dir, sdk_ref, NULL, NULL); + if (sdk_origin) + find_used_refs (dir, used_refs, sdk_ref, sdk_origin); + } + } + + for (i = 0; runtime_refs[i] != NULL; i++) + { + const char *ref = runtime_refs[i]; + g_auto(GStrv) parts = g_strsplit (ref, "/", -1); + + if (opt_arch != NULL && strcmp (parts[2], opt_arch) != 0) + continue; + + if (!g_hash_table_contains (used_refs, ref)) + uninstall_dir_add_ref (udir, ref); + } - origin = flatpak_dir_get_origin (dir, ref, NULL, NULL); - if (origin == NULL) - continue; + if (udir->refs->len > 0) + found_something_to_uninstall = TRUE; + } - related = flatpak_dir_find_local_related (dir, ref, origin, - NULL, &local_error); - if (related == NULL) + if (!found_something_to_uninstall) { - g_printerr (_("Warning: Problem looking for related refs: %s\n"), - local_error->message); - continue; + g_print (_("Nothing unused to uninstall\n")); + return TRUE; } - - for (i = 0; i < related->len; i++) + } + else + { + for (j = 0; j < n_prefs; j++) { - FlatpakRelated *rel = g_ptr_array_index (related, i); - g_autoptr(GVariant) deploy_data = NULL; + const char *pref = NULL; + FlatpakKinds matched_kinds; + g_autofree char *id = NULL; + g_autofree char *arch = NULL; + g_autofree char *branch = NULL; + g_autoptr(GError) local_error = NULL; + g_autoptr(GError) first_error = NULL; + g_autofree char *first_ref = NULL; + g_autoptr(GPtrArray) dirs_with_ref = NULL; + UninstallDir *udir = NULL; + + pref = prefs[j]; + + if (!flatpak_split_partial_ref_arg (pref, kinds, opt_arch, default_branch, + &matched_kinds, &id, &arch, &branch, error)) + return FALSE; + + dirs_with_ref = g_ptr_array_new (); + for (k = 0; k < dirs->len; k++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, k); + g_autofree char *ref = NULL; + + ref = flatpak_dir_find_installed_ref (dir, id, branch, arch, + kinds, &kind, &local_error); + if (ref == NULL) + { + if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) + { + if (first_error == NULL) + first_error = g_steal_pointer (&local_error); + g_clear_error (&local_error); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + else + { + g_ptr_array_add (dirs_with_ref, dir); + if (first_ref == NULL) + first_ref = g_strdup (ref); + } + } + + if (dirs_with_ref->len == 0) + { + g_assert (first_error != NULL); + /* No match anywhere, return the first NOT_INSTALLED error */ + g_propagate_error (error, g_steal_pointer (&first_error)); + return FALSE; + } + + if (dirs_with_ref->len > 1) + { + g_autoptr(GString) dir_names = g_string_new (""); + for (k = 0; k < dirs_with_ref->len; k++) + { + FlatpakDir *dir = g_ptr_array_index (dirs_with_ref, k); + g_autofree char *dir_name = flatpak_dir_get_name (dir); + if (k > 0) + g_string_append (dir_names, ", "); + g_string_append (dir_names, dir_name); + } + + return flatpak_fail (error, + _("Ref ‘%s’ found in multiple installations: %s. You must specify one."), + pref, dir_names->str); + } - if (!rel->delete) - continue; + udir = uninstall_dir_ensure (uninstall_dirs, g_ptr_array_index (dirs_with_ref, 0)); - deploy_data = flatpak_dir_get_deploy_data (dir, rel->ref, NULL, NULL); + g_assert (first_ref); - if (deploy_data != NULL && - g_hash_table_insert (uninstall_refs_hash, g_strdup (rel->ref), NULL)) - g_ptr_array_add (uninstall_refs, g_strdup (rel->ref)); + uninstall_dir_add_ref (udir, first_ref); } } - if (opt_keep_ref) - flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF; - if (opt_force_remove) - flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE; + GLNX_HASH_TABLE_FOREACH_V (uninstall_dirs, UninstallDir *, udir) + { + g_autoptr(FlatpakTransaction) transaction = NULL; + + transaction = flatpak_cli_transaction_new (udir->dir, opt_yes, TRUE, error); + if (transaction == NULL) + return FALSE; + + flatpak_transaction_set_disable_prune (transaction, opt_keep_ref); + flatpak_transaction_set_force_uninstall (transaction, opt_force_remove); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + + /* This disables the remote metadata update, since uninstall is a local-only op */ + flatpak_transaction_set_no_pull (transaction, TRUE); + + for (i = 0; i < udir->refs->len; i++) + { + const char *ref = (char *) g_ptr_array_index (udir->refs, i); + + if (!flatpak_transaction_add_uninstall (transaction, ref, error)) + return FALSE; + } + + if (!flatpak_cli_transaction_run (transaction, cancellable, error)) + return FALSE; + } - for (i = 0; i < uninstall_refs->len; i++) - { - const char *ref = (char *)g_ptr_array_index (uninstall_refs, i); - const char *pref = strchr (ref, '/') + 1; - g_print (_("Uninstalling: %s\n"), pref); - if (!flatpak_dir_uninstall (dir, ref, flags, - cancellable, error)) - return FALSE; - } return TRUE; } @@ -175,16 +428,14 @@ { g_autoptr(GOptionContext) context = NULL; g_autoptr(GPtrArray) dirs = NULL; - FlatpakDir *dir; + int i; FlatpakKinds kinds; context = g_option_context_new (""); if (!flatpak_option_context_parse (context, options, &completion->argc, &completion->argv, - FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; - dir = g_ptr_array_index (dirs, 0); - kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); switch (completion->argc) @@ -194,7 +445,13 @@ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); - flatpak_complete_partial_ref (completion, kinds, opt_arch, dir, NULL); + + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + flatpak_complete_partial_ref (completion, kinds, opt_arch, dir, NULL); + } + break; } diff -Nru flatpak-0.11.3/app/flatpak-builtins-update.c flatpak-1.0.7/app/flatpak-builtins-update.c --- flatpak-0.11.3/app/flatpak-builtins-update.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-update.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,8 +31,8 @@ #include "flatpak-builtins.h" #include "flatpak-builtins-utils.h" -#include "flatpak-transaction.h" -#include "flatpak-utils.h" +#include "flatpak-cli-transaction.h" +#include "flatpak-utils-private.h" #include "flatpak-error.h" static char *opt_arch; @@ -88,11 +88,13 @@ &dirs, cancellable, error)) return FALSE; - if (opt_arch == NULL) - opt_arch = (char *)flatpak_get_arch (); - if (opt_appstream) - return update_appstream (dirs, argc >= 2 ? argv[1] : NULL, opt_arch, 0, FALSE, cancellable, error); + { + if (!update_appstream (dirs, argc >= 2 ? argv[1] : NULL, opt_arch, 0, FALSE, cancellable, error)) + return FALSE; + + return TRUE; + } prefs = &argv[1]; n_prefs = argc - 1; @@ -104,13 +106,20 @@ n_prefs = 1; } - transactions = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_transaction_free); + transactions = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); 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); + FlatpakTransaction *transaction = flatpak_cli_transaction_new (g_ptr_array_index (dirs, k), opt_yes, FALSE, error); + if (transaction == NULL) + return FALSE; + + flatpak_transaction_set_no_pull (transaction, opt_no_pull); + flatpak_transaction_set_no_deploy (transaction, opt_no_deploy); + flatpak_transaction_set_disable_static_deltas (transaction, opt_no_static_deltas); + flatpak_transaction_set_disable_dependencies (transaction, opt_no_deps); + flatpak_transaction_set_disable_related (transaction, opt_no_related); + g_ptr_array_add (transactions, transaction); } @@ -169,7 +178,7 @@ continue; found = TRUE; - if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) + if (!flatpak_transaction_add_update (transaction, refs[i], (const char **) opt_subpaths, opt_commit, error)) return FALSE; } } @@ -200,7 +209,7 @@ continue; found = TRUE; - if (!flatpak_transaction_add_update (transaction, refs[i], (const char **)opt_subpaths, opt_commit, error)) + if (!flatpak_transaction_add_update (transaction, refs[i], (const char **) opt_subpaths, opt_commit, error)) return FALSE; } } @@ -218,18 +227,19 @@ { FlatpakTransaction *transaction = g_ptr_array_index (transactions, k); - if (!flatpak_transaction_is_empty (transaction)) - { - if (!flatpak_transaction_update_metadata (transaction, n_prefs == 0, cancellable, error)) - return FALSE; + if (!flatpak_transaction_is_empty (transaction) && + !flatpak_cli_transaction_run (transaction, cancellable, error)) + return FALSE; - if (!flatpak_transaction_run (transaction, FALSE, cancellable, error)) - return FALSE; - } + if (flatpak_cli_transaction_was_aborted (transaction)) + return TRUE; } if (n_prefs == 0) - return update_appstream (dirs, NULL, opt_arch, 0, FALSE, cancellable, error); + { + if (!update_appstream (dirs, NULL, opt_arch, FLATPAK_APPSTREAM_TTL, TRUE, cancellable, error)) + return FALSE; + } return TRUE; } @@ -239,16 +249,14 @@ { g_autoptr(GOptionContext) context = 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, - FLATPAK_BUILTIN_FLAG_ONE_DIR, &dirs, NULL, NULL)) + FLATPAK_BUILTIN_FLAG_STANDARD_DIRS, &dirs, NULL, NULL)) return FALSE; - dir = g_ptr_array_index (dirs, 0); - kinds = flatpak_kinds_from_bools (opt_app, opt_runtime); switch (completion->argc) @@ -258,7 +266,13 @@ flatpak_complete_options (completion, global_entries); flatpak_complete_options (completion, options); flatpak_complete_options (completion, user_entries); - flatpak_complete_partial_ref (completion, kinds, opt_arch, dir, NULL); + + for (i = 0; i < dirs->len; i++) + { + FlatpakDir *dir = g_ptr_array_index (dirs, i); + flatpak_complete_partial_ref (completion, kinds, opt_arch, dir, NULL); + } + break; } diff -Nru flatpak-0.11.3/app/flatpak-builtins-utils.c flatpak-1.0.7/app/flatpak-builtins-utils.c --- flatpak-0.11.3/app/flatpak-builtins-utils.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-utils.c 2019-02-11 12:42:20.000000000 +0000 @@ -24,10 +24,10 @@ #include -#include "flatpak-chain-input-stream.h" +#include "flatpak-chain-input-stream-private.h" #include "flatpak-builtins-utils.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" gboolean @@ -84,10 +84,11 @@ } GBytes * -download_uri (const char *url, - GError **error) +download_uri (const char *url, + GError **error) { SoupSession *session; + g_autoptr(SoupRequest) req = NULL; g_autoptr(GInputStream) input = NULL; g_autoptr(GOutputStream) out = NULL; @@ -121,6 +122,7 @@ g_autofree char *id = NULL; g_autofree char *arch = NULL; g_autofree char *branch = NULL; + g_autoptr(GError) lookup_error = NULL; FlatpakDir *dir = NULL; g_autofree char *ref = NULL; @@ -255,7 +257,7 @@ static gboolean -open_source_stream (char **gpg_import, +open_source_stream (char **gpg_import, GInputStream **out_source_stream, GCancellable *cancellable, GError **error) @@ -304,7 +306,7 @@ } GBytes * -flatpak_load_gpg_keys (char **gpg_import, +flatpak_load_gpg_keys (char **gpg_import, GCancellable *cancellable, GError **error) { @@ -367,7 +369,7 @@ { 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); + 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) @@ -377,11 +379,8 @@ 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; - } + return flatpak_fail_error (error, FLATPAK_ERROR_REMOTE_NOT_FOUND, + "Remote \"%s\" not found", remote_name); else *out_dir = g_object_ref (g_ptr_array_index (dirs_with_remote, chosen - 1)); } @@ -393,24 +392,25 @@ 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; + 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); + return (guint64) (now - mtime); } static void @@ -418,6 +418,22 @@ { } +static guint64 +get_appstream_timestamp (FlatpakDir *dir, + const char *remote, + const char *arch) +{ + g_autoptr(GFile) ts_file = NULL; + g_autofree char *ts_file_path = NULL; + g_autofree char *subdir = NULL; + + subdir = g_strdup_printf ("appstream/%s/%s/.timestamp", remote, arch); + ts_file = g_file_resolve_relative_path (flatpak_dir_get_path (dir), subdir); + ts_file_path = g_file_get_path (ts_file); + return get_file_age (ts_file); +} + + gboolean update_appstream (GPtrArray *dirs, const char *remote, @@ -432,15 +448,16 @@ int i, j; g_return_val_if_fail (dirs != NULL, FALSE); - g_return_val_if_fail (arch != NULL, FALSE); + + if (arch == NULL) + arch = flatpak_get_arch (); if (remote == NULL) { - g_auto(GStrv) remotes = NULL; - for (j = 0; j < dirs->len; j++) { FlatpakDir *dir = g_ptr_array_index (dirs, j); + g_auto(GStrv) remotes = NULL; remotes = flatpak_dir_list_remotes (dir, cancellable, error); if (remotes == NULL) @@ -450,47 +467,50 @@ { 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); + ts_file_age = get_appstream_timestamp (dir, remotes[i], arch); 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); + g_debug ("%s:%s appstream age %" G_GUINT64_FORMAT " is less than ttl %" G_GUINT64_FORMAT, remotes[i], arch, 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); - + g_debug ("%s:%s appstream age %" G_GUINT64_FORMAT " is greater than ttl %" G_GUINT64_FORMAT, remotes[i], arch, 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)) + flatpak_dir_get_remote_noenumerate (dir, remotes[i])) continue; if (flatpak_dir_is_user (dir)) { if (quiet) - g_debug (_("Updating appstream data for user remote %s\n"), remotes[i]); + g_debug (_("Updating appstream data for user remote %s"), remotes[i]); else - g_print (_("Updating appstream data for user remote %s\n"), remotes[i]); + { + g_print (_("Updating appstream data for user remote %s"), remotes[i]); + g_print ("\n"); + } } else { if (quiet) - g_debug (_("Updating appstream data for remote %s\n"), remotes[i]); + g_debug (_("Updating appstream data for remote %s"), remotes[i]); else - g_print (_("Updating appstream data for remote %s\n"), remotes[i]); + { + g_print (_("Updating appstream data for remote %s"), remotes[i]); + g_print ("\n"); + } } 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); + { + if (quiet) + g_debug ("%s: %s", _("Error updating"), local_error->message); + else + g_printerr ("%s: %s\n", _("Error updating"), local_error->message); + } ostree_async_progress_finish (progress); } } @@ -503,15 +523,21 @@ { FlatpakDir *dir = g_ptr_array_index (dirs, j); - if (flatpak_dir_has_remote (dir, remote)) + if (flatpak_dir_has_remote (dir, remote, NULL)) { g_autoptr(OstreeAsyncProgress) progress = NULL; + guint64 ts_file_age; found = TRUE; - /* Early bail out check */ - if (!flatpak_dir_check_for_appstream_update (dir, remote, arch)) - continue; + ts_file_age = get_appstream_timestamp (dir, remote, arch); + if (ts_file_age < ttl) + { + g_debug ("%s:%s appstream age %" G_GUINT64_FORMAT " is less than ttl %" G_GUINT64_FORMAT, remote, arch, ts_file_age, ttl); + continue; + } + else + g_debug ("%s:%s appstream age %" G_GUINT64_FORMAT " is greater than ttl %" G_GUINT64_FORMAT, remote, arch, ts_file_age, ttl); progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); res = flatpak_dir_update_appstream (dir, remote, arch, &changed, @@ -523,8 +549,35 @@ } if (!found) - return flatpak_fail (error, _("Remote \"%s\" not found"), remote); + return flatpak_fail_error (error, FLATPAK_ERROR_REMOTE_NOT_FOUND, + _("Remote \"%s\" not found"), remote); } return TRUE; } + +char ** +get_permission_tables (XdpDbusPermissionStore *store) +{ + g_autofree char *path = NULL; + GDir *dir; + const char *name; + GPtrArray *tables = NULL; + + tables = g_ptr_array_new (); + + path = g_build_filename (g_get_user_data_dir (), "flatpak/db", NULL); + dir = g_dir_open (path, 0, NULL); + if (dir != NULL) + { + while ((name = g_dir_read_name (dir)) != NULL) + { + g_ptr_array_add (tables, g_strdup (name)); + } + g_dir_close (dir); + } + + g_ptr_array_add (tables, NULL); + + return (char **) g_ptr_array_free (tables, FALSE); +} diff -Nru flatpak-0.11.3/app/flatpak-builtins-utils.h flatpak-1.0.7/app/flatpak-builtins-utils.h --- flatpak-0.11.3/app/flatpak-builtins-utils.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-builtins-utils.h 2019-02-11 12:42:20.000000000 +0000 @@ -23,28 +23,32 @@ #include #include "libglnx/libglnx.h" -#include "flatpak-utils.h" -#include "flatpak-dir.h" +#include "flatpak-utils-private.h" +#include "flatpak-dir-private.h" +#include "flatpak-permission-dbus-generated.h" + +/* Appstream data expires after a day */ +#define FLATPAK_APPSTREAM_TTL 86400 + +gboolean looks_like_branch (const char *branch); +GBytes * download_uri (const char *url, + GError **error); -gboolean looks_like_branch (const char *branch); -GBytes * download_uri (const char *url, - GError **error); - -GBytes * flatpak_load_gpg_keys (char **gpg_import, +GBytes * flatpak_load_gpg_keys (char **gpg_import, GCancellable *cancellable, GError **error); -FlatpakDir * flatpak_find_installed_pref (const char *pref, - FlatpakKinds kinds, - const char *default_arch, - const char *default_branch, - gboolean search_all, - gboolean search_user, - gboolean search_system, - char **search_installations, - char **out_ref, +FlatpakDir * flatpak_find_installed_pref (const char *pref, + FlatpakKinds kinds, + const char *default_arch, + const char *default_branch, + gboolean search_all, + gboolean search_user, + gboolean search_system, + char **search_installations, + char **out_ref, GCancellable *cancellable, - GError **error); + GError **error); gboolean flatpak_resolve_duplicate_remotes (GPtrArray *dirs, const char *remote_name, @@ -60,4 +64,7 @@ GCancellable *cancellable, GError **error); +char ** get_permission_tables (XdpDbusPermissionStore *store); + + #endif /* __FLATPAK_BUILTINS_UTILS_H__ */ diff -Nru flatpak-0.11.3/app/flatpak-cli-transaction.c flatpak-1.0.7/app/flatpak-cli-transaction.c --- flatpak-0.11.3/app/flatpak-cli-transaction.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-cli-transaction.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,799 @@ +/* + * Copyright © 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 "flatpak-cli-transaction.h" +#include "flatpak-transaction-private.h" +#include "flatpak-installation-private.h" +#include "flatpak-run-private.h" +#include "flatpak-table-printer.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" +#include +#include + + +struct _FlatpakCliTransaction +{ + FlatpakTransaction parent; + + char *name; + gboolean disable_interaction; + gboolean stop_on_first_error; + gboolean is_user; + gboolean aborted; + GError *first_operation_error; + + gboolean progress_initialized; + int progress_n_columns; + int progress_last_width; +}; + +struct _FlatpakCliTransactionClass +{ + FlatpakCliTransactionClass parent_class; +}; + +G_DEFINE_TYPE (FlatpakCliTransaction, flatpak_cli_transaction, FLATPAK_TYPE_TRANSACTION); + +static int +choose_remote_for_ref (FlatpakTransaction *transaction, + const char *for_ref, + const char *runtime_ref, + const char * const *remotes) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + int n_remotes = g_strv_length ((char **) remotes); + int chosen = -1; + const char *pref; + int i; + + pref = strchr (for_ref, '/') + 1; + + if (self->disable_interaction) + { + g_print (_("Required runtime for %s (%s) found in remote %s\n"), + pref, runtime_ref, remotes[0]); + chosen = 0; + } + else if (n_remotes == 1) + { + g_print (_("Required runtime for %s (%s) found in remote %s\n"), + pref, runtime_ref, remotes[0]); + if (flatpak_yes_no_prompt (_("Do you want to install it?"))) + chosen = 0; + } + else + { + g_print (_("Required runtime for %s (%s) found in remotes: %s\n"), + pref, runtime_ref, remotes[0]); + for (i = 0; remotes[i] != NULL; i++) + { + g_print ("%d) %s\n", i + 1, remotes[i]); + } + chosen = flatpak_number_prompt (0, n_remotes, _("Which do you want to install (0 to abort)?")); + chosen -= 1; /* convert from base-1 to base-0 (and -1 to abort) */ + } + + return chosen; +} + +static gboolean +add_new_remote (FlatpakTransaction *transaction, + FlatpakTransactionRemoteReason reason, + const char *from_id, + const char *remote_name, + const char *url) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + + if (self->disable_interaction) + { + g_print (_("Configuring %s as new remote '%s'"), url, remote_name); + return TRUE; + } + + if (reason == FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO) + { + if (flatpak_yes_no_prompt (_("The remote '%s', refered to by '%s' at location %s contains additional applications.\n" + "Should the remote be kept for future installations?"), + remote_name, from_id, url)) + return TRUE; + } + else if (reason == FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS) + { + if (flatpak_yes_no_prompt (_("The application %s depends on runtimes from:\n %s\n" + "Configure this as new remote '%s'"), + from_id, url, remote_name)) + return TRUE; + } + + return FALSE; +} + +static char * +op_type_to_string (FlatpakTransactionOperationType operation_type) +{ + switch (operation_type) + { + case FLATPAK_TRANSACTION_OPERATION_INSTALL: + return _("install"); + + case FLATPAK_TRANSACTION_OPERATION_UPDATE: + return _("update"); + + case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE: + return _("install bundle"); + + case FLATPAK_TRANSACTION_OPERATION_UNINSTALL: + return _("uninstall"); + + default: + return "Unknown type"; /* Should not happen */ + } +} + +#define BAR_LENGTH 20 +#define BAR_CHARS " -=#" + + +static void +progress_changed_cb (FlatpakTransactionProgress *progress, + gpointer data) +{ + FlatpakCliTransaction *cli = data; + + g_autoptr(GString) str = g_string_new (""); + int i; + int n_full, remainder, partial; + int width, padded_width; + + guint percent = flatpak_transaction_progress_get_progress (progress); + g_autofree char *status = flatpak_transaction_progress_get_status (progress); + + if (!cli->progress_initialized) + { + struct winsize w; + cli->progress_n_columns = 80; + if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &w) == 0) + cli->progress_n_columns = w.ws_col; + cli->progress_last_width = 0; + cli->progress_initialized = TRUE; + } + + g_string_append (str, "["); + + n_full = (BAR_LENGTH * percent) / 100; + remainder = percent - (n_full * 100 / BAR_LENGTH); + partial = (remainder * strlen (BAR_CHARS) * BAR_LENGTH) / 100; + + for (i = 0; i < n_full; i++) + g_string_append_c (str, BAR_CHARS[strlen (BAR_CHARS) - 1]); + + if (i < BAR_LENGTH) + { + g_string_append_c (str, BAR_CHARS[partial]); + i++; + } + + for (; i < BAR_LENGTH; i++) + g_string_append (str, " "); + + g_string_append (str, "] "); + g_string_append (str, status); + + g_print ("\r"); + width = MIN (strlen (str->str), cli->progress_n_columns); + padded_width = MAX (cli->progress_last_width, width); + cli->progress_last_width = width; + g_print ("%-*.*s", padded_width, padded_width, str->str); +} + +static void +progress_done (FlatpakTransaction *transaction) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + + if (self->progress_initialized) + g_print ("\n"); +} + +static void +new_operation (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + FlatpakTransactionProgress *progress) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + const char *pref; + g_autofree char *bundle_basename = NULL; + const char *ref = flatpak_transaction_operation_get_ref (operation); + const char *remote = flatpak_transaction_operation_get_remote (operation); + GFile *bundle = flatpak_transaction_operation_get_bundle_path (operation); + FlatpakTransactionOperationType operation_type = flatpak_transaction_operation_get_operation_type (operation); + + pref = strchr (ref, '/') + 1; + + switch (operation_type) + { + case FLATPAK_TRANSACTION_OPERATION_INSTALL: + if (self->is_user) + g_print (_("Installing for user: %s from %s\n"), pref, remote); + else + g_print (_("Installing: %s from %s\n"), pref, remote); + break; + + case FLATPAK_TRANSACTION_OPERATION_UPDATE: + if (self->is_user) + g_print (_("Updating for user: %s from %s\n"), pref, remote); + else + g_print (_("Updating: %s from %s\n"), pref, remote); + break; + + case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE: + { + bundle_basename = g_file_get_basename (bundle); + if (self->is_user) + 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); + } + break; + + case FLATPAK_TRANSACTION_OPERATION_UNINSTALL: + if (self->is_user) + g_print (_("Uninstalling for user: %s\n"), pref); + else + g_print (_("Uninstalling: %s\n"), pref); + break; + + default: + g_assert_not_reached (); + break; + } + + self->progress_initialized = FALSE; + g_signal_connect (progress, "changed", G_CALLBACK (progress_changed_cb), self); + flatpak_transaction_progress_set_update_frequency (progress, FLATPAK_CLI_UPDATE_FREQUENCY); + +} + +static void +operation_done (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + const char *commit, + FlatpakTransactionResult details) +{ + FlatpakTransactionOperationType operation_type = flatpak_transaction_operation_get_operation_type (operation); + g_autofree char *short_commit = g_strndup (commit, 12); + + progress_done (transaction); + + if (operation_type != FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + if (details & FLATPAK_TRANSACTION_RESULT_NO_CHANGE) + g_print (_("No updates.\n")); + else + g_print (_("Now at %s.\n"), short_commit); + } +} + +static gboolean +operation_error (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + const GError *error, + FlatpakTransactionErrorDetails detail) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + FlatpakTransactionOperationType operation_type = flatpak_transaction_operation_get_operation_type (operation); + const char *ref = flatpak_transaction_operation_get_ref (operation); + const char *pref; + + progress_done (transaction); + + pref = strchr (ref, '/') + 1; + + if (g_error_matches (error, FLATPAK_ERROR, FLATPAK_ERROR_SKIPPED)) + { + g_printerr ("%s\n", error->message); + return TRUE; + } + + if (detail & FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL) + { + g_printerr (_("Warning: Failed to %s %s: %s\n"), + op_type_to_string (operation_type), pref, error->message); + } + else + { + if (self->first_operation_error == NULL) + g_propagate_prefixed_error (&self->first_operation_error, + g_error_copy (error), + _("Failed to %s %s: "), + op_type_to_string (operation_type), pref); + + if (self->stop_on_first_error) + return FALSE; + + g_printerr (_("Error: Failed to %s %s: %s\n"), + op_type_to_string (operation_type), pref, error->message); + } + + return TRUE; /* Continue */ +} + +static void +end_of_lifed (FlatpakTransaction *transaction, + const char *ref, + const char *reason, + const char *rebase) +{ + if (rebase) + { + g_printerr (_("Warning: %s is end-of-life, in preference of %s\n"), ref, rebase); + } + else if (reason) + { + g_printerr (_("Warning: %s is end-of-life, with reason: %s\n"), ref, reason); + } +} + + +static int +cmpstringp (const void *p1, const void *p2) +{ + return strcmp (*(char * const *) p1, *(char * const *) p2); +} + +static void +append_permissions (GPtrArray *permissions, + GKeyFile *metadata, + GKeyFile *old_metadata, + const char *group) +{ + g_auto(GStrv) options = g_key_file_get_string_list (metadata, FLATPAK_METADATA_GROUP_CONTEXT, group, NULL, NULL); + g_auto(GStrv) old_options = NULL; + int i; + + if (options == NULL) + return; + + qsort (options, g_strv_length (options), sizeof (const char *), cmpstringp); + + if (old_metadata) + old_options = g_key_file_get_string_list (old_metadata, FLATPAK_METADATA_GROUP_CONTEXT, group, NULL, NULL); + + for (i = 0; options[i] != NULL; i++) + { + const char *option = options[i]; + if (option[0] == '!') + continue; + + if (old_options && g_strv_contains ((const char * const *) old_options, option)) + continue; + + if (strcmp (group, FLATPAK_METADATA_KEY_DEVICES) == 0 && strcmp (option, "all") == 0) + option = "devices"; + + g_ptr_array_add (permissions, g_strdup (option)); + } +} + +static void +append_bus (GPtrArray *talk, + GPtrArray *own, + GKeyFile *metadata, + GKeyFile *old_metadata, + const char *group) +{ + g_auto(GStrv) keys = NULL; + gsize i, keys_count; + + keys = g_key_file_get_keys (metadata, group, &keys_count, NULL); + if (keys == NULL) + return; + + qsort (keys, g_strv_length (keys), sizeof (const char *), cmpstringp); + + for (i = 0; i < keys_count; i++) + { + const char *key = keys[i]; + g_autofree char *value = g_key_file_get_string (metadata, group, key, NULL); + + if (g_strcmp0 (value, "none") == 0) + continue; + + if (old_metadata) + { + g_autofree char *old_value = g_key_file_get_string (old_metadata, group, key, NULL); + if (g_strcmp0 (old_value, value) == 0) + continue; + } + + if (g_strcmp0 (value, "own") == 0) + g_ptr_array_add (own, g_strdup (key)); + else + g_ptr_array_add (talk, g_strdup (key)); + } +} + +static void +append_tags (GPtrArray *tags_array, + GKeyFile *metadata, + GKeyFile *old_metadata) +{ + gsize i, size = 0; + g_auto(GStrv) tags = g_key_file_get_string_list (metadata, FLATPAK_METADATA_GROUP_APPLICATION, "tags", + &size, NULL); + g_auto(GStrv) old_tags = NULL; + + if (old_metadata) + old_tags = g_key_file_get_string_list (old_metadata, FLATPAK_METADATA_GROUP_APPLICATION, "tags", + NULL, NULL); + + for (i = 0; i < size; i++) + { + const char *tag = tags[i]; + if (old_tags == NULL || !g_strv_contains ((const char * const *)old_tags, tag)) + g_ptr_array_add (tags_array, g_strdup (tag)); + } +} + +static void +print_perm_line (FlatpakTablePrinter *printer, + const char *title, + GPtrArray *items) +{ + g_autoptr(GString) res = g_string_new (NULL); + int i; + + if (items->len == 0) + return; + + g_string_append_printf (res, " %s: ", title); + for (i = 0; i < items->len; i++) + { + if (i != 0) + g_string_append (res, ", "); + g_string_append (res, (char *) items->pdata[i]); + } + + flatpak_table_printer_add_span (printer, res->str); + flatpak_table_printer_finish_row (printer); +} + +static void +print_permissions (FlatpakTablePrinter *printer, + GKeyFile *metadata, + GKeyFile *old_metadata, + const char *ref) +{ + g_autoptr(GPtrArray) permissions = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) files = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) session_bus_talk = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) session_bus_own = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) system_bus_talk = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) system_bus_own = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) tags = g_ptr_array_new_with_free_func (g_free); + + if (metadata == NULL) + return; + + /* Only apps have permissions */ + if (!g_str_has_prefix (ref, "app/")) + return; + + append_permissions (permissions, metadata, old_metadata, FLATPAK_METADATA_KEY_SHARED); + append_permissions (permissions, metadata, old_metadata, FLATPAK_METADATA_KEY_SOCKETS); + append_permissions (permissions, metadata, old_metadata, FLATPAK_METADATA_KEY_DEVICES); + append_permissions (permissions, metadata, old_metadata, FLATPAK_METADATA_KEY_FEATURES); + + print_perm_line (printer, + old_metadata ? _("new permissions") : _("permissions"), + permissions); + + append_permissions (files, metadata, old_metadata, FLATPAK_METADATA_KEY_FILESYSTEMS); + print_perm_line (printer, + old_metadata ? _("new file access") : _("file access"), + files); + + append_bus (session_bus_talk, session_bus_own, + metadata, old_metadata, FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY); + print_perm_line (printer, + old_metadata ? _("new dbus access") : _("dbus access"), + session_bus_talk); + print_perm_line (printer, + old_metadata ? _("new dbus ownership") : _("dbus ownership"), + session_bus_own); + + append_bus (system_bus_talk, system_bus_own, + metadata, old_metadata, FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY); + print_perm_line (printer, + old_metadata ? _("new system dbus access") : _("system dbus access"), + system_bus_talk); + print_perm_line (printer, + old_metadata ? _("new system dbus ownership") : _("system dbus ownership"), + system_bus_own); + append_tags (tags, metadata, old_metadata); + print_perm_line (printer, + old_metadata ? _("new tags") : _("tags"), + tags); +} + +static gboolean +transaction_ready (FlatpakTransaction *transaction) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + GList *ops = flatpak_transaction_get_operations (transaction); + GList *l; + gboolean found_one; + FlatpakTablePrinter *printer = NULL; + + if (ops == NULL) + return TRUE; + + found_one = FALSE; + for (l = ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + FlatpakTransactionOperationType type = flatpak_transaction_operation_get_operation_type (op); + const char *ref = flatpak_transaction_operation_get_ref (op); + const char *pref = strchr (ref, '/') + 1; + + if (type != FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + continue; + + if (!found_one) + g_print (_("Uninstalling from %s:\n"), self->name); + found_one = TRUE; + g_print ("%s\n", pref); + } + + found_one = FALSE; + for (l = ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + FlatpakTransactionOperationType type = flatpak_transaction_operation_get_operation_type (op); + const char *ref = flatpak_transaction_operation_get_ref (op); + const char *remote = flatpak_transaction_operation_get_remote (op); + const char *commit = flatpak_transaction_operation_get_commit (op); + GKeyFile *metadata = flatpak_transaction_operation_get_metadata (op); + const char *pref = strchr (ref, '/') + 1; + + if (type != FLATPAK_TRANSACTION_OPERATION_INSTALL && + type != FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) + continue; + + if (!found_one) + { + g_print (_("Installing in %s:\n"), self->name); + printer = flatpak_table_printer_new (); + found_one = TRUE; + } + + flatpak_table_printer_add_column (printer, pref); + flatpak_table_printer_add_column (printer, remote); + flatpak_table_printer_add_column_len (printer, commit, 12); + flatpak_table_printer_finish_row (printer); + + print_permissions (printer, metadata, NULL, ref); + + } + if (printer) + { + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + printer = NULL; + } + + found_one = FALSE; + for (l = ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + FlatpakTransactionOperationType type = flatpak_transaction_operation_get_operation_type (op); + const char *ref = flatpak_transaction_operation_get_ref (op); + const char *remote = flatpak_transaction_operation_get_remote (op); + const char *commit = flatpak_transaction_operation_get_commit (op); + GKeyFile *metadata = flatpak_transaction_operation_get_metadata (op); + GKeyFile *old_metadata = flatpak_transaction_operation_get_old_metadata (op); + const char *pref = strchr (ref, '/') + 1; + + if (type != FLATPAK_TRANSACTION_OPERATION_UPDATE) + continue; + + if (!found_one) + { + g_print (_("Updating in %s:\n"), self->name); + printer = flatpak_table_printer_new (); + found_one = TRUE; + } + + flatpak_table_printer_add_column (printer, pref); + flatpak_table_printer_add_column (printer, remote); + flatpak_table_printer_add_column_len (printer, commit, 12); + flatpak_table_printer_finish_row (printer); + + print_permissions (printer, metadata, old_metadata, ref); + } + if (printer) + { + flatpak_table_printer_print (printer); + flatpak_table_printer_free (printer); + printer = NULL; + } + + g_list_free_full (ops, g_object_unref); + + if (!self->disable_interaction && + !flatpak_yes_no_prompt (_("Is this ok"))) + return FALSE; + + return TRUE; +} + +static void +flatpak_cli_transaction_finalize (GObject *object) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (object); + + if (self->first_operation_error) + g_error_free (self->first_operation_error); + + g_free (self->name); + + G_OBJECT_CLASS (flatpak_cli_transaction_parent_class)->finalize (object); +} + +static void +flatpak_cli_transaction_init (FlatpakCliTransaction *self) +{ +} + +static void +flatpak_cli_transaction_class_init (FlatpakCliTransactionClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + FlatpakTransactionClass *transaction_class = FLATPAK_TRANSACTION_CLASS (klass); + + object_class->finalize = flatpak_cli_transaction_finalize; + transaction_class->add_new_remote = add_new_remote; + transaction_class->ready = transaction_ready; + transaction_class->new_operation = new_operation; + transaction_class->operation_done = operation_done; + transaction_class->operation_error = operation_error; + transaction_class->choose_remote_for_ref = choose_remote_for_ref; + transaction_class->end_of_lifed = end_of_lifed; +} + +FlatpakTransaction * +flatpak_cli_transaction_new (FlatpakDir *dir, + gboolean disable_interaction, + gboolean stop_on_first_error, + GError **error) +{ + g_autoptr(FlatpakInstallation) installation = NULL; + g_autoptr(FlatpakCliTransaction) self = NULL; + + installation = flatpak_installation_new_for_dir (dir, NULL, error); + if (installation == NULL) + return NULL; + + self = g_initable_new (FLATPAK_TYPE_CLI_TRANSACTION, + NULL, error, + "installation", installation, + NULL); + if (self == NULL) + return NULL; + + self->disable_interaction = disable_interaction; + self->stop_on_first_error = stop_on_first_error; + self->name = flatpak_dir_get_name (dir); + self->is_user = flatpak_dir_is_user (dir); + + flatpak_transaction_add_default_dependency_sources (FLATPAK_TRANSACTION (self)); + + return (FlatpakTransaction *) g_steal_pointer (&self); +} + +gboolean +flatpak_cli_transaction_add_install (FlatpakTransaction *transaction, + const char *remote, + const char *ref, + const char **subpaths, + GError **error) +{ + g_autoptr(GError) local_error = NULL; + + if (!flatpak_transaction_add_install (transaction, remote, ref, subpaths, &local_error)) + { + if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) + { + g_printerr (_("Skipping: %s\n"), local_error->message); + return TRUE; + } + + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + return TRUE; +} + + +gboolean +flatpak_cli_transaction_run (FlatpakTransaction *transaction, + GCancellable *cancellable, + GError **error) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + + g_autoptr(GError) local_error = NULL; + gboolean res; + + res = flatpak_transaction_run (transaction, cancellable, &local_error); + + + /* If we got some weird error (i.e. not ABORTED because we chose to abort + on an error, report that */ + if (!res) + { + if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ABORTED)) + { + self->aborted = TRUE; + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + + if (self->first_operation_error) + { + /* We always want to return an error if there was some kind of operation error, + as that causes the main CLI to return an error status. */ + + if (self->stop_on_first_error) + { + /* For the install/stop_on_first_error we return the first operation error, + as we have not yet printed it. */ + + g_propagate_error (error, g_steal_pointer (&self->first_operation_error)); + return FALSE; + } + else + { + /* For updates/!stop_on_first_error we already printed all errors so we make up + a different one. */ + + return flatpak_fail (error, _("There were one or more errors")); + } + } + + return TRUE; +} + +gboolean +flatpak_cli_transaction_was_aborted (FlatpakTransaction *transaction) +{ + FlatpakCliTransaction *self = FLATPAK_CLI_TRANSACTION (transaction); + + return self->aborted; +} diff -Nru flatpak-0.11.3/app/flatpak-cli-transaction.h flatpak-1.0.7/app/flatpak-cli-transaction.h --- flatpak-0.11.3/app/flatpak-cli-transaction.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-cli-transaction.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,46 @@ +/* + * Copyright © 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_CLI_TRANSACTION_H__ +#define __FLATPAK_CLI_TRANSACTION_H__ + +#include "flatpak-transaction.h" +#include "flatpak-dir-private.h" + +#define FLATPAK_TYPE_CLI_TRANSACTION flatpak_cli_transaction_get_type () +G_DECLARE_FINAL_TYPE (FlatpakCliTransaction, flatpak_cli_transaction, FLATPAK, CLI_TRANSACTION, FlatpakTransaction) + +FlatpakTransaction * flatpak_cli_transaction_new (FlatpakDir * dir, + gboolean disable_interaction, + gboolean stop_on_first_error, + GError * *error); + +gboolean flatpak_cli_transaction_add_install (FlatpakTransaction *self, + const char *remote, + const char *ref, + const char **subpaths, + GError **error); +gboolean flatpak_cli_transaction_was_aborted (FlatpakTransaction *transaction); + +gboolean flatpak_cli_transaction_run (FlatpakTransaction *transaction, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_CLI_TRANSACTION_H__ */ diff -Nru flatpak-0.11.3/app/flatpak-complete.c flatpak-1.0.7/app/flatpak-complete.c --- flatpak-0.11.3/app/flatpak-complete.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-complete.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,528 @@ +/* + * Copyright © 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 "flatpak-complete.h" +#include "flatpak-utils-private.h" + +/* Uncomment to get debug traces in /tmp/flatpak-completion-debug.txt (nice + * to not have it interfere with stdout/stderr) + */ +#if 0 +void +flatpak_completion_debug (const gchar *format, ...) +{ + va_list var_args; + gchar *s; + static FILE *f = NULL; + + va_start (var_args, format); + s = g_strdup_vprintf (format, var_args); + if (f == NULL) + f = fopen ("/tmp/flatpak-completion-debug.txt", "a+"); + fprintf (f, "%s\n", s); + fflush (f); + g_free (s); +} +#else +void +flatpak_completion_debug (const gchar *format, ...) +{ +} +#endif + +static gboolean +is_word_separator (char c) +{ + return g_ascii_isspace (c); +} + +void +flatpak_complete_file (FlatpakCompletion *completion, + const char *file_type) +{ + flatpak_completion_debug ("completing FILE"); + g_print ("%s\n", file_type); +} + +void +flatpak_complete_dir (FlatpakCompletion *completion) +{ + flatpak_completion_debug ("completing DIR"); + g_print ("%s\n", "__FLATPAK_DIR"); +} + +void +flatpak_complete_word (FlatpakCompletion *completion, + char *format, ...) +{ + va_list args; + const char *rest; + const char *shell_cur; + const char *shell_cur_end; + g_autofree char *string = NULL; + + g_return_if_fail (format != NULL); + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + va_start (args, format); + string = g_strdup_vprintf (format, args); + va_end (args); +#pragma GCC diagnostic pop + + if (!g_str_has_prefix (string, completion->cur)) + return; + + shell_cur = completion->shell_cur ? completion->shell_cur : ""; + + rest = string + strlen (completion->cur); + + shell_cur_end = shell_cur + strlen (shell_cur); + while (shell_cur_end > shell_cur && + rest > string && + shell_cur_end[-1] == rest[-1] && + /* I'm not sure exactly what bash is doing here with =, but this seems to work... */ + shell_cur_end[-1] != '=') + { + rest--; + shell_cur_end--; + } + + flatpak_completion_debug ("completing word: '%s' (%s)", string, rest); + + g_print ("%s\n", rest); +} + +void +flatpak_complete_ref (FlatpakCompletion *completion, + OstreeRepo *repo) +{ + g_autoptr(GHashTable) refs = NULL; + flatpak_completion_debug ("completing REF"); + + if (ostree_repo_list_refs (repo, + NULL, + &refs, NULL, NULL)) + { + GHashTableIter hashiter; + gpointer hashkey, hashvalue; + + g_hash_table_iter_init (&hashiter, refs); + while ((g_hash_table_iter_next (&hashiter, &hashkey, &hashvalue))) + { + const char *ref = (const char *) hashkey; + if (!(g_str_has_prefix (ref, "runtime/") || + g_str_has_prefix (ref, "app/"))) + continue; + flatpak_complete_word (completion, "%s", ref); + } + } +} + +static int +find_current_element (const char *str) +{ + int count = 0; + + if (g_str_has_prefix (str, "app/")) + str += strlen ("app/"); + else if (g_str_has_prefix (str, "runtime/")) + str += strlen ("runtime/"); + + while (str != NULL && count <= 3) + { + str = strchr (str, '/'); + count++; + if (str != NULL) + str = str + 1; + } + + return count; +} + +void +flatpak_complete_partial_ref (FlatpakCompletion *completion, + FlatpakKinds kinds, + const char *only_arch, + FlatpakDir *dir, + const char *remote) +{ + FlatpakKinds matched_kinds; + const char *pref; + g_autofree char *id = NULL; + g_autofree char *arch = NULL; + g_autofree char *branch = NULL; + + g_auto(GStrv) refs = NULL; + int element; + const char *cur_parts[4] = { NULL }; + g_autoptr(GError) error = NULL; + int i; + + pref = completion->cur; + element = find_current_element (pref); + + flatpak_split_partial_ref_arg_novalidate (pref, kinds, + NULL, NULL, + &matched_kinds, &id, &arch, &branch); + + cur_parts[1] = id; + cur_parts[2] = arch ? arch : ""; + cur_parts[3] = branch ? branch : ""; + + if (remote) + { + refs = flatpak_dir_find_remote_refs (dir, completion->argv[1], + (element > 1) ? id : NULL, + (element > 3) ? branch : NULL, + (element > 2) ? arch : only_arch, + matched_kinds, NULL, &error); + } + else + { + refs = flatpak_dir_find_installed_refs (dir, + (element > 1) ? id : NULL, + (element > 3) ? branch : NULL, + (element > 2) ? arch : only_arch, + matched_kinds, &error); + } + if (refs == NULL) + flatpak_completion_debug ("find refs error: %s", error->message); + for (i = 0; refs != NULL && refs[i] != NULL; i++) + { + int j; + g_autoptr(GString) comp = NULL; + g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); + if (parts == NULL) + continue; + + if (!g_str_has_prefix (parts[element], cur_parts[element])) + continue; + + if (flatpak_id_has_subref_suffix (parts[element])) + { + char *last_dot = strrchr (parts[element], '.'); + + if (last_dot == NULL) + continue; /* Shouldn't really happen */ + + /* Only complete to subrefs is fully matching real part. + * For example, only match org.foo.Bar.Sources for + * "org.foo.Bar", "org.foo.Bar." or "org.foo.Bar.S", but + * not for "org.foo" or other shorter prefixes. + */ + if (strncmp (parts[element], cur_parts[element], last_dot - parts[element] - 1) != 0) + continue; + } + + comp = g_string_new (pref); + g_string_append (comp, parts[element] + strlen (cur_parts[element])); + + /* Only complete on the last part if the user explicitly adds a / */ + if (element >= 2) + { + for (j = element + 1; j < 4; j++) + { + g_string_append (comp, "/"); + g_string_append (comp, parts[j]); + } + } + + flatpak_complete_word (completion, "%s", comp->str); + } +} + +static gboolean +switch_already_in_line (FlatpakCompletion *completion, + GOptionEntry *entry) +{ + guint i = 0; + guint line_part_len = 0; + + for (; i < completion->original_argc; ++i) + { + line_part_len = strlen (completion->original_argv[i]); + if (line_part_len > 2 && + g_strcmp0 (&completion->original_argv[i][2], entry->long_name) == 0) + return TRUE; + + if (line_part_len == 2 && + completion->original_argv[i][1] == entry->short_name) + return TRUE; + } + + return FALSE; +} + +static gboolean +should_filter_out_option_from_completion (FlatpakCompletion *completion, + GOptionEntry *entry) +{ + switch (entry->arg) + { + case G_OPTION_ARG_NONE: + case G_OPTION_ARG_STRING: + case G_OPTION_ARG_INT: + case G_OPTION_ARG_FILENAME: + case G_OPTION_ARG_DOUBLE: + case G_OPTION_ARG_INT64: + return switch_already_in_line (completion, entry); + + default: + return FALSE; + } +} + +void +flatpak_complete_options (FlatpakCompletion *completion, + GOptionEntry *entries) +{ + GOptionEntry *e = entries; + int i; + + while (e->long_name != NULL) + { + if (e->arg_description) + { + g_autofree char *prefix = g_strdup_printf ("--%s=", e->long_name); + + if (g_str_has_prefix (completion->cur, prefix)) + { + if (strcmp (e->arg_description, "ARCH") == 0) + { + const char *arches[] = {"i386", "x86_64", "aarch64", "arm"}; + for (i = 0; i < G_N_ELEMENTS (arches); i++) + flatpak_complete_word (completion, "%s%s ", prefix, arches[i]); + } + else if (strcmp (e->arg_description, "SHARE") == 0) + { + for (i = 0; flatpak_context_shares[i] != NULL; i++) + flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_shares[i]); + } + else if (strcmp (e->arg_description, "DEVICE") == 0) + { + for (i = 0; flatpak_context_devices[i] != NULL; i++) + flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_devices[i]); + } + else if (strcmp (e->arg_description, "FEATURE") == 0) + { + for (i = 0; flatpak_context_features[i] != NULL; i++) + flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_features[i]); + } + else if (strcmp (e->arg_description, "SOCKET") == 0) + { + for (i = 0; flatpak_context_sockets[i] != NULL; i++) + flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_sockets[i]); + } + else if (strcmp (e->arg_description, "FILE") == 0) + { + flatpak_complete_file (completion, "__FLATPAK_FILE"); + } + else + flatpak_complete_word (completion, "%s", prefix); + } + else + flatpak_complete_word (completion, "%s", prefix); + } + else + { + /* If this is just a switch, then don't add it multiple + * times */ + if (!should_filter_out_option_from_completion (completion, e)) + { + flatpak_complete_word (completion, "--%s ", e->long_name); + } + else + { + flatpak_completion_debug ("switch --%s is already in line %s", e->long_name, completion->line); + } + } + + /* We may end up checking switch_already_in_line twice, but this is + * for simplicity's sake - the alternative solution would be to + * continue the loop early and have to increment e. */ + if (e->short_name != 0) + { + /* This is a switch, we may not want to add it */ + if (!e->arg_description) + { + if (!should_filter_out_option_from_completion (completion, e)) + { + flatpak_complete_word (completion, "-%c ", e->short_name); + } + else + { + flatpak_completion_debug ("switch -%c is already in line %s", e->short_name, completion->line); + } + } + else + { + flatpak_complete_word (completion, "-%c ", e->short_name); + } + } + e++; + } +} + +void +flatpak_complete_context (FlatpakCompletion *completion) +{ + flatpak_complete_options (completion, flatpak_context_get_option_entries ()); +} + +static gchar * +pick_word_at (const char *s, + int cursor, + int *out_word_begins_at) +{ + int begin, end; + + if (s[0] == '\0') + { + if (out_word_begins_at != NULL) + *out_word_begins_at = -1; + return NULL; + } + + if (is_word_separator (s[cursor]) && ((cursor > 0 && is_word_separator (s[cursor - 1])) || cursor == 0)) + { + if (out_word_begins_at != NULL) + *out_word_begins_at = cursor; + return g_strdup (""); + } + + while (!is_word_separator (s[cursor - 1]) && cursor > 0) + cursor--; + begin = cursor; + + end = begin; + while (!is_word_separator (s[end]) && s[end] != '\0') + end++; + + if (out_word_begins_at != NULL) + *out_word_begins_at = begin; + + return g_strndup (s + begin, end - begin); +} + +static gboolean +parse_completion_line_to_argv (const char *initial_completion_line, + FlatpakCompletion *completion) +{ + gboolean parse_result = g_shell_parse_argv (initial_completion_line, + &completion->original_argc, + &completion->original_argv, + NULL); + + /* Make a shallow copy of argv, which will be our "working set" */ + completion->argc = completion->original_argc; + completion->argv = g_memdup (completion->original_argv, + sizeof (gchar *) * (completion->original_argc + 1)); + + return parse_result; +} + +FlatpakCompletion * +flatpak_completion_new (const char *arg_line, + const char *arg_point, + const char *arg_cur) +{ + FlatpakCompletion *completion; + g_autofree char *initial_completion_line = NULL; + int _point; + char *endp; + int cur_begin; + int i; + + _point = strtol (arg_point, &endp, 10); + if (endp == arg_point || *endp != '\0') + return NULL; + + completion = g_new0 (FlatpakCompletion, 1); + completion->line = g_strdup (arg_line); + completion->shell_cur = g_strdup (arg_cur); + completion->point = _point; + + flatpak_completion_debug ("========================================"); + flatpak_completion_debug ("completion_point=%d", completion->point); + flatpak_completion_debug ("completion_shell_cur='%s'", completion->shell_cur); + flatpak_completion_debug ("----"); + flatpak_completion_debug (" 0123456789012345678901234567890123456789012345678901234567890123456789"); + flatpak_completion_debug ("'%s'", completion->line); + flatpak_completion_debug (" %*s^", completion->point, ""); + + /* compute cur and prev */ + completion->prev = NULL; + completion->cur = pick_word_at (completion->line, completion->point, &cur_begin); + if (cur_begin > 0) + { + gint prev_end; + for (prev_end = cur_begin - 1; prev_end >= 0; prev_end--) + { + if (!is_word_separator (completion->line[prev_end])) + { + completion->prev = pick_word_at (completion->line, prev_end, NULL); + break; + } + } + + initial_completion_line = g_strndup (completion->line, cur_begin); + } + else + initial_completion_line = g_strdup (""); + + flatpak_completion_debug ("'%s'", initial_completion_line); + flatpak_completion_debug ("----"); + + flatpak_completion_debug (" cur='%s'", completion->cur); + flatpak_completion_debug ("prev='%s'", completion->prev); + + if (!parse_completion_line_to_argv (initial_completion_line, + completion)) + { + /* it's very possible the command line can't be parsed (for + * example, missing quotes etc) - in that case, we just + * don't autocomplete at all + */ + flatpak_completion_free (completion); + return NULL; + } + + flatpak_completion_debug ("completion_argv %i:", completion->original_argc); + for (i = 0; i < completion->original_argc; i++) + flatpak_completion_debug (completion->original_argv[i]); + + flatpak_completion_debug ("----"); + + return completion; +} + +void +flatpak_completion_free (FlatpakCompletion *completion) +{ + g_free (completion->cur); + g_free (completion->prev); + g_free (completion->line); + g_free (completion->argv); + g_strfreev (completion->original_argv); + g_free (completion); +} diff -Nru flatpak-0.11.3/app/flatpak-complete.h flatpak-1.0.7/app/flatpak-complete.h --- flatpak-0.11.3/app/flatpak-complete.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-complete.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,64 @@ +/* + * Copyright © 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_COMPLETE_H__ +#define __FLATPAK_COMPLETE_H__ + +#include +#include "flatpak-dir-private.h" + +struct FlatpakCompletion +{ + char *shell_cur; + char *cur; + char *prev; + char *line; + int point; + char **argv; + char **original_argv; + int argc; + int original_argc; +}; + +void flatpak_completion_debug (const gchar *format, + ...); + +FlatpakCompletion *flatpak_completion_new (const char *arg_line, + const char *arg_point, + const char *arg_cur); +void flatpak_complete_word (FlatpakCompletion *completion, + char *format, + ...) G_GNUC_PRINTF (2, 3); +void flatpak_complete_ref (FlatpakCompletion *completion, + OstreeRepo *repo); +void flatpak_complete_partial_ref (FlatpakCompletion *completion, + FlatpakKinds kinds, + const char *only_arch, + FlatpakDir *dir, + const char *remote); +void flatpak_complete_file (FlatpakCompletion *completion, + const char *file_type); +void flatpak_complete_dir (FlatpakCompletion *completion); +void flatpak_complete_options (FlatpakCompletion *completion, + GOptionEntry *entries); +void flatpak_completion_free (FlatpakCompletion *completion); +void flatpak_complete_context (FlatpakCompletion *completion); + +#endif /* __FLATPAK_COMPLETE_H__ */ diff -Nru flatpak-0.11.3/app/flatpak-main.c flatpak-1.0.7/app/flatpak-main.c --- flatpak-0.11.3/app/flatpak-main.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-main.c 2019-02-11 12:42:20.000000000 +0000 @@ -31,7 +31,7 @@ #include "libglnx/libglnx.h" #include "flatpak-builtins.h" -#include "flatpak-utils.h" +#include "flatpak-utils-private.h" static int opt_verbose; static gboolean opt_ostree_verbose; @@ -54,48 +54,60 @@ GCancellable *cancellable, GError **error); gboolean (*complete)(FlatpakCompletion *completion); - gboolean deprecated; + gboolean deprecated; } FlatpakCommand; static FlatpakCommand commands[] = { - /* translators: please keep the leading space */ + /* translators: please keep the leading space */ { N_(" Manage installed apps and runtimes") }, { "install", N_("Install an application or runtime"), flatpak_builtin_install, flatpak_complete_install }, { "update", N_("Update an installed application or runtime"), flatpak_builtin_update, flatpak_complete_update }, { "uninstall", N_("Uninstall an installed application or runtime"), flatpak_builtin_uninstall, flatpak_complete_uninstall }, + /* Alias remove to uninstall to help users of yum/dnf/apt */ + { "remove", NULL, flatpak_builtin_uninstall, flatpak_complete_uninstall, TRUE }, { "list", N_("List installed apps and/or runtimes"), flatpak_builtin_list, flatpak_complete_list }, { "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 }, + { "repair", N_("Repair flatpak installation"), flatpak_builtin_repair, flatpak_complete_repair }, + { "create-usb", N_("Put apps and/or runtimes onto removable media"), flatpak_builtin_create_usb, flatpak_complete_create_usb }, - /* translators: please keep the leading newline and space */ + /* 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 */ + /* translators: please keep the leading newline and space */ { N_("\n Running applications") }, { "run", N_("Run an application"), flatpak_builtin_run, flatpak_complete_run }, { "override", N_("Override permissions for an application"), flatpak_builtin_override, flatpak_complete_override }, { "make-current", N_("Specify default version to run"), flatpak_builtin_make_current_app, flatpak_complete_make_current_app }, { "enter", N_("Enter the namespace of a running application"), flatpak_builtin_enter, flatpak_complete_enter }, + { "ps", N_("Enumerate running applications"), flatpak_builtin_ps, flatpak_complete_ps }, - /* translators: please keep the leading newline and space */ + /* translators: please keep the leading newline and space */ { N_("\n Manage file access") }, { "document-export", N_("Grant an application access to a specific file"), flatpak_builtin_document_export, flatpak_complete_document_export }, { "document-unexport", N_("Revoke access to a specific file"), flatpak_builtin_document_unexport, flatpak_complete_document_unexport }, { "document-info", N_("Show information about a specific file"), flatpak_builtin_document_info, flatpak_complete_document_info }, { "document-list", N_("List exported files"), flatpak_builtin_document_list, flatpak_complete_document_list }, - /* translators: please keep the leading newline and space */ + /* translators: please keep the leading newline and space */ + { N_("\n Manage dynamic permissions") }, + { "permission-remove", N_("Remove item from permission store"), flatpak_builtin_permission_remove, flatpak_complete_permission_remove }, + { "permission-list", N_("List permissions"), flatpak_builtin_permission_list, flatpak_complete_permission_list }, + { "permission-show", N_("Show app permissions"), flatpak_builtin_permission_show, flatpak_complete_permission_show }, + { "permission-reset", N_("Reset app permissions"), flatpak_builtin_permission_reset, flatpak_complete_permission_reset }, + + /* translators: please keep the leading newline and space */ { N_("\n Manage remote repositories") }, - { "remotes", N_("List all configured remotes"), flatpak_builtin_list_remotes, flatpak_complete_list_remotes }, - { "remote-add", N_("Add a new remote repository (by URL)"), flatpak_builtin_add_remote, flatpak_complete_add_remote }, - { "remote-modify", N_("Modify properties of a configured remote"), flatpak_builtin_modify_remote, flatpak_complete_modify_remote }, - { "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 }, + { "remotes", N_("List all configured remotes"), flatpak_builtin_remote_list, flatpak_complete_remote_list }, + { "remote-add", N_("Add a new remote repository (by URL)"), flatpak_builtin_remote_add, flatpak_complete_remote_add }, + { "remote-modify", N_("Modify properties of a configured remote"), flatpak_builtin_remote_modify, flatpak_complete_remote_modify }, + { "remote-delete", N_("Delete a configured remote"), flatpak_builtin_remote_delete, flatpak_complete_remote_delete }, + { "remote-list", NULL, flatpak_builtin_remote_list, flatpak_complete_remote_list, TRUE }, + { "remote-ls", N_("List contents of a configured remote"), flatpak_builtin_remote_ls, flatpak_complete_remote_ls }, + { "remote-info", N_("Show information about a remote app or runtime"), flatpak_builtin_remote_info, flatpak_complete_remote_info }, - /* translators: please keep the leading newline and space */ + /* translators: please keep the leading newline and space */ { N_("\n Build applications") }, { "build-init", N_("Initialize a directory for building"), flatpak_builtin_build_init, flatpak_complete_build_init }, { "build", N_("Run a build command inside the build dir"), flatpak_builtin_build, flatpak_complete_build }, @@ -193,29 +205,6 @@ return context; } -static int -flatpak_usage (FlatpakCommand *commands, - gboolean is_error) -{ - GOptionContext *context; - g_autofree char *help = NULL; - - context = flatpak_option_context_new_with_commands (commands); - - g_option_context_add_main_entries (context, global_entries, NULL); - - help = g_option_context_get_help (context, FALSE, NULL); - - if (is_error) - g_printerr ("%s", help); - else - g_print ("%s", help); - - g_option_context_free (context); - - return is_error ? 1 : 0; -} - gboolean flatpak_option_context_parse (GOptionContext *context, const GOptionEntry *main_entries, @@ -313,12 +302,14 @@ * 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 nothing is set, then we put the system dir first, which can be used as the default */ if (opt_system || (!opt_user && opt_installations == NULL)) g_ptr_array_add (dirs, flatpak_dir_get_system_default ()); + if (opt_user || (!opt_system && opt_installations == NULL)) + g_ptr_array_add (dirs, flatpak_dir_get_user ()); + if (opt_installations != NULL) { for (i = 0; opt_installations[i] != NULL; i++) @@ -415,8 +406,8 @@ } static FlatpakCommand * -extract_command (int *argc, - char **argv, +extract_command (int *argc, + char **argv, const char **command_name_out) { FlatpakCommand *command; @@ -581,10 +572,13 @@ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); - g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, message_handler, NULL); + g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING, message_handler, NULL); g_set_prgname (argv[0]); + /* Avoid weird recursive type initialization deadlocks from libsoup */ + g_type_ensure (G_TYPE_SOCKET); + /* avoid gvfs (http://bugzilla.gnome.org/show_bug.cgi?id=526454) */ old_env = g_strdup (g_getenv ("GIO_USE_VFS")); g_setenv ("GIO_USE_VFS", "local", TRUE); @@ -600,8 +594,6 @@ flatpak_migrate_from_xdg_app (); ret = flatpak_run (argc, argv, &error); - if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED)) - flatpak_usage (commands, TRUE); if (error != NULL) { @@ -612,6 +604,7 @@ prefix = FLATPAK_ANSI_RED FLATPAK_ANSI_BOLD_ON; suffix = FLATPAK_ANSI_BOLD_OFF FLATPAK_ANSI_COLOR_RESET; } + g_dbus_error_strip_remote_error (error); g_printerr ("%s%s %s%s\n", prefix, _("error:"), suffix, error->message); g_error_free (error); } diff -Nru flatpak-0.11.3/app/flatpak-table-printer.c flatpak-1.0.7/app/flatpak-table-printer.c --- flatpak-0.11.3/app/flatpak-table-printer.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-table-printer.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,279 @@ +/* + * 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 "flatpak-table-printer.h" +#include "flatpak-utils-private.h" + +#include +#include +#include +#include + + +typedef struct +{ + char *text; + int align; + gboolean span; +} Cell; + +static void +free_cell (gpointer data) +{ + Cell *cell = data; + + g_free (cell->text); + g_free (cell); +} + +struct FlatpakTablePrinter +{ + GPtrArray *titles; + GPtrArray *rows; + GPtrArray *current; + int n_columns; +}; + +FlatpakTablePrinter * +flatpak_table_printer_new (void) +{ + FlatpakTablePrinter *printer = g_new0 (FlatpakTablePrinter, 1); + + printer->titles = g_ptr_array_new_with_free_func (g_free); + printer->rows = g_ptr_array_new_with_free_func ((GDestroyNotify) g_ptr_array_unref); + printer->current = g_ptr_array_new_with_free_func (free_cell); + + return printer; +} + +void +flatpak_table_printer_free (FlatpakTablePrinter *printer) +{ + g_ptr_array_free (printer->titles, TRUE); + g_ptr_array_free (printer->rows, TRUE); + g_ptr_array_free (printer->current, TRUE); + g_free (printer); +} + +void +flatpak_table_printer_set_column_title (FlatpakTablePrinter *printer, + int column, + const char *text) +{ + g_ptr_array_insert (printer->titles, column, g_strdup (text)); +} + +void +flatpak_table_printer_add_aligned_column (FlatpakTablePrinter *printer, + const char *text, + int align) +{ + Cell *cell = g_new0 (Cell, 1); + + cell->text = text ? g_strdup (text) : g_strdup (""); + cell->align = align; + g_ptr_array_add (printer->current, cell); +} + +void +flatpak_table_printer_add_span (FlatpakTablePrinter *printer, + const char *text) +{ + Cell *cell = g_new0 (Cell, 1); + + cell->text = text ? g_strdup (text) : g_strdup (""); + cell->align = -1; + cell->span = TRUE; + g_ptr_array_add (printer->current, cell); +} + +static const char * +find_decimal_point (const char *text) +{ + struct lconv *locale_data; + + locale_data = localeconv (); + return strstr (text, locale_data->decimal_point); +} + +void +flatpak_table_printer_add_decimal_column (FlatpakTablePrinter *printer, + const char *text) +{ + const char *decimal; + int align = -1; + + decimal = find_decimal_point (text); + if (decimal) + align = decimal - text; + + flatpak_table_printer_add_aligned_column (printer, text, align); +} + +void +flatpak_table_printer_add_column (FlatpakTablePrinter *printer, + const char *text) +{ + flatpak_table_printer_add_aligned_column (printer, text, -1); +} + +void +flatpak_table_printer_add_column_len (FlatpakTablePrinter *printer, + const char *text, + gsize len) +{ + Cell *cell = g_new0 (Cell, 1); + + cell->text = text ? g_strndup (text, len) : g_strdup (""); + cell->align = -1; + g_ptr_array_add (printer->current, cell); +} + +void +flatpak_table_printer_append_with_comma (FlatpakTablePrinter *printer, + const char *text) +{ + Cell *cell; + char *new; + + g_assert (printer->current->len > 0); + + cell = g_ptr_array_index (printer->current, printer->current->len - 1); + + if (cell->text[0] != 0) + new = g_strconcat (cell->text, ",", text, NULL); + else + new = g_strdup (text); + + g_free (cell->text); + cell->text = new; +} + +void +flatpak_table_printer_append_with_comma_printf (FlatpakTablePrinter *printer, + const char *format, + ...) +{ + va_list var_args; + g_autofree char *s = NULL; + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" + va_start (var_args, format); + s = g_strdup_vprintf (format, var_args); + va_end (var_args); +#pragma GCC diagnostic pop + + flatpak_table_printer_append_with_comma (printer, s); +} + +void +flatpak_table_printer_finish_row (FlatpakTablePrinter *printer) +{ + if (printer->current->len == 0) + return; /* Ignore empty rows */ + + printer->n_columns = MAX (printer->n_columns, printer->current->len); + g_ptr_array_add (printer->rows, printer->current); + printer->current = g_ptr_array_new_with_free_func (free_cell); +} + +void +flatpak_table_printer_print (FlatpakTablePrinter *printer) +{ + g_autofree int *widths = NULL; + g_autofree int *lwidths = NULL; + g_autofree int *rwidths = NULL; + int i, j; + + if (printer->current->len != 0) + flatpak_table_printer_finish_row (printer); + + widths = g_new0 (int, printer->n_columns); + lwidths = g_new0 (int, printer->n_columns); + rwidths = g_new0 (int, printer->n_columns); + + for (i = 0; i < printer->titles->len && i < printer->n_columns; i++) + { + char *title = g_ptr_array_index (printer->titles, i); + + if (title) + widths[i] = MAX (widths[i], strlen (title)); + } + + for (i = 0; i < printer->rows->len; i++) + { + GPtrArray *row = g_ptr_array_index (printer->rows, i); + + for (j = 0; j < row->len; j++) + { + Cell *cell = g_ptr_array_index (row, j); + int width; + + if (cell->span) + width = 0; + else + width = strlen (cell->text); + widths[j] = MAX (widths[j], width); + if (cell->align >= 0) + { + lwidths[j] = MAX (lwidths[j], cell->align); + rwidths[j] = MAX (rwidths[j], width - cell->align); + } + } + } + + if (flatpak_fancy_output () && printer->titles->len > 0) + { + g_print (FLATPAK_ANSI_BOLD_ON); + for (i = 0; i < printer->titles->len && i < printer->n_columns; i++) + { + char *title = g_ptr_array_index (printer->titles, i); + + g_print ("%s%-*s", (i == 0) ? "" : " ", widths[i], title); + } + g_print (FLATPAK_ANSI_BOLD_OFF); + g_print ("\n"); + } + + for (i = 0; i < printer->rows->len; i++) + { + GPtrArray *row = g_ptr_array_index (printer->rows, i); + + for (j = 0; j < row->len; j++) + { + Cell *cell = g_ptr_array_index (row, j); + if (flatpak_fancy_output ()) + { + if (cell->span) + g_print ("%s%s", (j == 0) ? "" : " ", cell->text); + else 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", cell->text, (j < row->len - 1) ? "\t" : ""); + } + g_print ("\n"); + } +} diff -Nru flatpak-0.11.3/app/flatpak-table-printer.h flatpak-1.0.7/app/flatpak-table-printer.h --- flatpak-0.11.3/app/flatpak-table-printer.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-table-printer.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,53 @@ +/* + * 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 + */ + +#ifndef __FLATPAK_TABLE_PRINTER_H__ +#define __FLATPAK_TABLE_PRINTER_H__ + +#include + +typedef struct FlatpakTablePrinter FlatpakTablePrinter; + +FlatpakTablePrinter *flatpak_table_printer_new (void); +void flatpak_table_printer_free (FlatpakTablePrinter *printer); +void flatpak_table_printer_set_column_title (FlatpakTablePrinter *printer, + int column, + const char *title); +void flatpak_table_printer_add_column (FlatpakTablePrinter *printer, + const char *text); +void flatpak_table_printer_add_aligned_column (FlatpakTablePrinter *printer, + const char *text, + int align); +void flatpak_table_printer_add_decimal_column (FlatpakTablePrinter *printer, + const char *text); +void flatpak_table_printer_add_column_len (FlatpakTablePrinter *printer, + const char *text, + gsize len); +void flatpak_table_printer_add_span (FlatpakTablePrinter *printer, + const char *text); +void flatpak_table_printer_append_with_comma (FlatpakTablePrinter *printer, + const char *text); +void flatpak_table_printer_append_with_comma_printf (FlatpakTablePrinter *printer, + const char *format, + ...); +void flatpak_table_printer_finish_row (FlatpakTablePrinter *printer); +void flatpak_table_printer_print (FlatpakTablePrinter *printer); + +#endif /* __FLATPAK_TABLE_PRINTER_H__ */ diff -Nru flatpak-0.11.3/app/flatpak-transaction.c flatpak-1.0.7/app/flatpak-transaction.c --- flatpak-0.11.3/app/flatpak-transaction.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-transaction.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,864 +0,0 @@ -/* - * Copyright © 2016 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 "flatpak-transaction.h" -#include "flatpak-utils.h" -#include "flatpak-builtins-utils.h" -#include "flatpak-error.h" - -typedef struct FlatpakTransactionOp FlatpakTransactionOp; - -typedef enum { - FLATPAK_TRANSACTION_OP_KIND_INSTALL, - FLATPAK_TRANSACTION_OP_KIND_UPDATE, - FLATPAK_TRANSACTION_OP_KIND_INSTALL_OR_UPDATE, - FLATPAK_TRANSACTION_OP_KIND_BUNDLE -} FlatpakTransactionOpKind; - -struct FlatpakTransactionOp { - char *remote; - char *ref; - /* NULL means unspecified (normally keep whatever was there before), [] means force everything */ - char **subpaths; - char *commit; - GFile *bundle; - FlatpakTransactionOpKind kind; - gboolean non_fatal; -}; - -struct FlatpakTransaction { - FlatpakDir *dir; - GHashTable *refs; - GPtrArray *system_dirs; - GList *ops; - GPtrArray *added_origin_remotes; - - gboolean no_interaction; - gboolean no_pull; - gboolean no_deploy; - 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 - * on user-installed things when installing to the system dir. - */ -static gboolean -ref_is_installed (FlatpakTransaction *self, - const char *ref, - GError **error) -{ - g_autoptr(GFile) deploy_dir = NULL; - FlatpakDir *dir = self->dir; - int i; - - deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, NULL); - if (deploy_dir != NULL) - return TRUE; - - /* Don't try to fallback for the system's default directory. */ - if (!flatpak_dir_is_user (dir) && flatpak_dir_get_id (dir) == NULL) - return FALSE; - - /* Lazy initialization of this, once per transaction */ - if (self->system_dirs == NULL) - { - self->system_dirs = flatpak_dir_get_system_list (NULL, error); - if (self->system_dirs == NULL) - return FALSE; - } - - for (i = 0; i < self->system_dirs->len; i++) - { - FlatpakDir *system_dir = g_ptr_array_index (self->system_dirs, i); - - if (g_strcmp0 (flatpak_dir_get_id (dir), flatpak_dir_get_id (system_dir)) == 0) - continue; - - deploy_dir = flatpak_dir_get_if_deployed (system_dir, ref, NULL, NULL); - if (deploy_dir != NULL) - return TRUE; - } - - return FALSE; -} - -static gboolean -dir_ref_is_installed (FlatpakDir *dir, const char *ref, char **remote_out, GVariant **deploy_data_out) -{ - g_autoptr(GVariant) deploy_data = NULL; - - deploy_data = flatpak_dir_get_deploy_data (dir, ref, NULL, NULL); - if (deploy_data == NULL) - return FALSE; - - if (remote_out) - *remote_out = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); - - if (deploy_data_out) - *deploy_data_out = g_variant_ref (deploy_data); - - return TRUE; -} - -static FlatpakTransactionOp * -flatpak_transaction_operation_new (const char *remote, - const char *ref, - const char **subpaths, - const char *commit, - GFile *bundle, - FlatpakTransactionOpKind kind) -{ - FlatpakTransactionOp *self = g_new0 (FlatpakTransactionOp, 1); - - self->remote = g_strdup (remote); - self->ref = g_strdup (ref); - self->subpaths = g_strdupv ((char **)subpaths); - self->commit = g_strdup (commit); - if (bundle) - self->bundle = g_object_ref (bundle); - self->kind = kind; - - return self; -} - -static void -flatpak_transaction_operation_free (FlatpakTransactionOp *self) -{ - g_free (self->remote); - g_free (self->ref); - g_free (self->commit); - g_strfreev (self->subpaths); - g_clear_object (&self->bundle); - g_free (self); -} - -gboolean -flatpak_transaction_is_empty (FlatpakTransaction *self) -{ - return self->ops == NULL; -} - -FlatpakTransaction * -flatpak_transaction_new (FlatpakDir *dir, - gboolean no_interaction, - gboolean no_pull, - gboolean no_deploy, - gboolean no_static_deltas, - gboolean add_deps, - 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; - t->no_deploy = no_deploy; - t->no_static_deltas = no_static_deltas; - t->add_deps = add_deps; - t->add_related = add_related; - t->reinstall = reinstall; - return t; -} - -void -flatpak_transaction_free (FlatpakTransaction *self) -{ - g_hash_table_unref (self->refs); - 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); - - g_free (self); -} - -static gboolean -flatpak_transaction_contains_ref (FlatpakTransaction *self, - const char *ref) -{ - FlatpakTransactionOp *op; - - op = g_hash_table_lookup (self->refs, ref); - - return op != NULL; -} - - -static char * -subpaths_to_string (const char **subpaths) -{ - GString *s = NULL; - int i; - - if (subpaths == NULL) - return g_strdup ("[$old]"); - - if (*subpaths == 0) - return g_strdup ("[*]"); - - s = g_string_new ("["); - for (i = 0; subpaths[i] != NULL; i++) - { - if (i != 0) - g_string_append (s, ", "); - g_string_append (s, subpaths[i]); - } - g_string_append (s, "]"); - - return g_string_free (s, FALSE); -} - -static const char * -kind_to_str (FlatpakTransactionOpKind kind) -{ - switch (kind) - { - case FLATPAK_TRANSACTION_OP_KIND_INSTALL: - return "install"; - case FLATPAK_TRANSACTION_OP_KIND_UPDATE: - return "update"; - case FLATPAK_TRANSACTION_OP_KIND_INSTALL_OR_UPDATE: - return "install/update"; - case FLATPAK_TRANSACTION_OP_KIND_BUNDLE: - return "install bundle"; - } - return "unknown"; -} - -static FlatpakTransactionOp * -flatpak_transaction_add_op (FlatpakTransaction *self, - const char *remote, - const char *ref, - const char **subpaths, - const char *commit, - GFile *bundle, - FlatpakTransactionOpKind kind) -{ - FlatpakTransactionOp *op; - g_autofree char *subpaths_str = NULL; - - subpaths_str = subpaths_to_string (subpaths); - g_debug ("Transaction: %s %s:%s%s%s%s", - kind_to_str (kind), remote, ref, - commit != NULL ? "@" : "", - commit != NULL ? commit : "", - subpaths_str); - - op = g_hash_table_lookup (self->refs, ref); - if (op != NULL) - { - g_auto(GStrv) old_subpaths = op->subpaths; - op->subpaths = flatpak_subpaths_merge (old_subpaths, (char **)subpaths); - - return op; - } - - op = flatpak_transaction_operation_new (remote, ref, subpaths, commit, bundle, kind); - g_hash_table_insert (self->refs, g_strdup (ref), op); - self->ops = g_list_prepend (self->ops, op); - - return op; -} - -static char * -ask_for_remote (FlatpakTransaction *self, const char **remotes) -{ - int n_remotes = g_strv_length ((char **)remotes); - int chosen = 0; - int i; - - if (self->no_interaction) - { - chosen = 1; - g_print (_("Found in remote %s\n"), remotes[0]); - } - else if (n_remotes == 1) - { - if (flatpak_yes_no_prompt (_("Found in remote %s, do you want to install it?"), remotes[0])) - chosen = 1; - } - else - { - g_print (_("Found in several remotes:\n")); - for (i = 0; remotes[i] != NULL; i++) - { - g_print ("%d) %s\n", i + 1, remotes[i]); - } - chosen = flatpak_number_prompt (0, n_remotes, _("Which do you want to install (0 to abort)?")); - } - - if (chosen == 0) - return NULL; - - return g_strdup (remotes[chosen-1]); -} - -static gboolean -add_related (FlatpakTransaction *self, - const char *remote, - const char *ref, - GError **error) -{ - g_autoptr(GPtrArray) related = NULL; - g_autoptr(GError) local_error = NULL; - int i; - - if (!self->add_related) - return TRUE; - - if (self->no_pull) - related = flatpak_dir_find_local_related (self->dir, ref, remote, NULL, &local_error); - else - related = flatpak_dir_find_remote_related (self->dir, ref, remote, NULL, &local_error); - if (related == NULL) - { - g_printerr (_("Warning: Problem looking for related refs: %s\n"), local_error->message); - g_clear_error (&local_error); - } - else - { - for (i = 0; i < related->len; i++) - { - FlatpakRelated *rel = g_ptr_array_index (related, i); - FlatpakTransactionOp *op; - - if (!rel->download) - continue; - - op = flatpak_transaction_add_op (self, remote, rel->ref, - (const char **)rel->subpaths, - NULL, NULL, - FLATPAK_TRANSACTION_OP_KIND_INSTALL_OR_UPDATE); - op->non_fatal = TRUE; - } - } - - return TRUE; -} - -static gboolean -add_deps (FlatpakTransaction *self, - GKeyFile *metakey, - const char *remote, - const char *ref, - GError **error) -{ - g_autofree char *runtime_ref = NULL; - g_autofree char *full_runtime_ref = NULL; - g_autofree char *runtime_remote = NULL; - const char *pref; - - if (!g_str_has_prefix (ref, "app/")) - return TRUE; - - if (metakey) - runtime_ref = g_key_file_get_string (metakey, "Application", "runtime", NULL); - if (runtime_ref == NULL) - return TRUE; - - pref = strchr (ref, '/') + 1; - - full_runtime_ref = g_strconcat ("runtime/", runtime_ref, NULL); - - if (!flatpak_transaction_contains_ref (self, full_runtime_ref)) - { - g_autoptr(GError) local_error = NULL; - - if (!ref_is_installed (self, full_runtime_ref, &local_error)) - { - g_auto(GStrv) remotes = NULL; - - if (local_error != NULL) - { - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - - g_print (_("Required runtime for %s (%s) is not installed, searching...\n"), - pref, runtime_ref); - - remotes = flatpak_dir_search_for_dependency (self->dir, full_runtime_ref, NULL, NULL); - if (remotes == NULL || *remotes == NULL) - { - g_print (_("The required runtime %s was not found in a configured remote.\n"), - runtime_ref); - } - else - { - runtime_remote = ask_for_remote (self, (const char **)remotes); - } - - if (runtime_remote == NULL) - return flatpak_fail (error, - "The Application %s requires the runtime %s which is not installed", - pref, runtime_ref); - - flatpak_transaction_add_op (self, runtime_remote, full_runtime_ref, NULL, NULL, NULL, - FLATPAK_TRANSACTION_OP_KIND_INSTALL_OR_UPDATE); - } - else - { - /* Update if in same dir */ - if (dir_ref_is_installed (self->dir, full_runtime_ref, &runtime_remote, NULL)) - { - FlatpakTransactionOp *op; - g_debug ("Updating dependent runtime %s", full_runtime_ref); - op = flatpak_transaction_add_op (self, runtime_remote, full_runtime_ref, NULL, NULL, NULL, - FLATPAK_TRANSACTION_OP_KIND_UPDATE); - op->non_fatal = TRUE; - } - } - } - - if (runtime_remote != NULL && - !add_related (self, runtime_remote, full_runtime_ref, error)) - return FALSE; - - return TRUE; -} - -static gboolean -flatpak_transaction_add_ref (FlatpakTransaction *self, - const char *remote, - const char *ref, - const char **subpaths, - const char *commit, - FlatpakTransactionOpKind kind, - GFile *bundle, - const char *metadata, - GError **error) -{ - g_autofree char *origin = NULL; - const char *pref; - 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; - - if (kind == FLATPAK_TRANSACTION_OP_KIND_UPDATE) - { - if (!dir_ref_is_installed (self->dir, ref, &origin, NULL)) - { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - _("%s not installed"), pref); - return FALSE; - } - - if (flatpak_dir_get_remote_disabled (self->dir, origin)) - { - g_debug (_("Remote %s disabled, ignoring %s update"), origin, pref); - return TRUE; - } - remote = origin; - } - else if (kind == FLATPAK_TRANSACTION_OP_KIND_INSTALL) - { - g_assert (remote != NULL); - if (!self->reinstall && - dir_ref_is_installed (self->dir, ref, &origin, NULL)) - { - 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; - } - } - } - - if (metadata == NULL && remote != NULL) - { - if (flatpak_dir_fetch_ref_cache (self->dir, remote, ref, NULL, NULL, &remote_metadata, NULL, &local_error)) - metadata = remote_metadata; - else - { - g_print (_("Warning: Can't find dependencies: %s\n"), local_error->message); - g_clear_error (&local_error); - } - } - - if (metadata) - { - metakey = g_key_file_new (); - if (!g_key_file_load_from_data (metakey, metadata, -1, 0, NULL)) - g_clear_object (&metakey); - } - - if (metakey) - { - g_autofree char *required_version = NULL; - const char *group; - int required_major, required_minor, required_micro; - - if (g_str_has_prefix (ref, "app/")) - group = "Application"; - else - group = "Runtime"; - - required_version = g_key_file_get_string (metakey, group, "required-flatpak", NULL); - if (required_version) - { - if (sscanf (required_version, "%d.%d.%d", &required_major, &required_minor, &required_micro) != 3) - g_print (_("Invalid require-flatpak argument %s\n"), required_version); - else - { - if (required_major > PACKAGE_MAJOR_VERSION || - (required_major == PACKAGE_MAJOR_VERSION && required_minor > PACKAGE_MINOR_VERSION) || - (required_major == PACKAGE_MAJOR_VERSION && required_minor == PACKAGE_MINOR_VERSION && required_micro > PACKAGE_MICRO_VERSION)) - return flatpak_fail (error, _("%s needs a later flatpak version (%s)"), ref, required_version); - } - } - } - - if (self->add_deps) - { - if (!add_deps (self, metakey, remote, ref, error)) - return FALSE; - } - - flatpak_transaction_add_op (self, remote, ref, subpaths, commit, bundle, kind); - - if (!add_related (self, remote, ref, error)) - return FALSE; - - return TRUE; -} - -gboolean -flatpak_transaction_add_install (FlatpakTransaction *self, - const char *remote, - const char *ref, - const char **subpaths, - GError **error) -{ - const char *all_paths[] = { NULL }; - - /* If we install with no special args pull all subpaths */ - if (subpaths == NULL) - subpaths = all_paths; - - return flatpak_transaction_add_ref (self, remote, ref, subpaths, NULL, FLATPAK_TRANSACTION_OP_KIND_INSTALL, NULL, NULL, error); -} - -gboolean -flatpak_transaction_add_install_bundle (FlatpakTransaction *self, - GFile *file, - GBytes *gpg_data, - GError **error) -{ - g_autofree char *remote = NULL; - g_autofree char *ref = NULL; - g_autofree char *metadata = NULL; - gboolean created_remote; - - remote = flatpak_dir_ensure_bundle_remote (self->dir, file, gpg_data, - &ref, &metadata, &created_remote, - NULL, error); - if (remote == NULL) - return FALSE; - - if (!flatpak_dir_recreate_repo (self->dir, NULL, error)) - return FALSE; - - return flatpak_transaction_add_ref (self, remote, ref, NULL, NULL, FLATPAK_TRANSACTION_OP_KIND_BUNDLE, file, metadata, error); -} - -gboolean -flatpak_transaction_add_update (FlatpakTransaction *self, - const char *ref, - const char **subpaths, - const char *commit, - GError **error) -{ - const char *all_paths[] = { NULL }; - - /* If specify an empty subpath, that means all subpaths */ - if (subpaths != NULL && subpaths[0] != NULL && subpaths[0][0] == 0) - subpaths = all_paths; - - return flatpak_transaction_add_ref (self, NULL, ref, subpaths, commit, FLATPAK_TRANSACTION_OP_KIND_UPDATE, NULL, NULL, error); -} - -gboolean -flatpak_transaction_update_metadata (FlatpakTransaction *self, - gboolean all_remotes, - GCancellable *cancellable, - GError **error) -{ - g_auto(GStrv) remotes = NULL; - int i; - GList *l; - - /* Collect all dir+remotes used in this transaction */ - - if (all_remotes) - { - remotes = flatpak_dir_list_remotes (self->dir, NULL, error); - if (remotes == NULL) - return FALSE; - } - else - { - g_autoptr(GHashTable) ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - for (l = self->ops; l != NULL; l = l->next) - { - FlatpakTransactionOp *op = l->data; - g_hash_table_add (ht, g_strdup (op->remote)); - } - remotes = (char **)g_hash_table_get_keys_as_array (ht, NULL); - g_hash_table_steal_all (ht); /* Move ownership to remotes */ - } - - /* Update metadata for said remotes */ - for (i = 0; remotes[i] != NULL; i++) - { - char *remote = remotes[i]; - g_autoptr(GError) my_error = NULL; - - g_debug ("Updating remote metadata for %s", remote); - if (!flatpak_dir_update_remote_configuration (self->dir, remote, cancellable, &my_error)) - g_printerr (_("Error updating remote metadata for '%s': %s\n"), remote, my_error->message); - } - - /* Reload changed configuration */ - if (!flatpak_dir_recreate_repo (self->dir, cancellable, error)) - return FALSE; - - return TRUE; -} - -gboolean -flatpak_transaction_run (FlatpakTransaction *self, - gboolean stop_on_first_error, - GCancellable *cancellable, - GError **error) -{ - GList *l; - gboolean succeeded = TRUE; - int i; - - self->ops = g_list_reverse (self->ops); - - for (l = self->ops; l != NULL; l = l->next) - { - FlatpakTransactionOp *op = l->data; - g_autoptr(GError) local_error = NULL; - gboolean res = TRUE; - const char *pref; - const char *opname; - FlatpakTransactionOpKind kind; - FlatpakTerminalProgress terminal_progress = { 0 }; - - kind = op->kind; - if (kind == FLATPAK_TRANSACTION_OP_KIND_INSTALL_OR_UPDATE) - { - g_autoptr(GVariant) deploy_data = NULL; - - if (dir_ref_is_installed (self->dir, op->ref, NULL, &deploy_data)) - { - /* Don't use the remote from related ref on update, always use - the current remote. */ - g_free (op->remote); - op->remote = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); - - kind = FLATPAK_TRANSACTION_OP_KIND_UPDATE; - } - else - kind = FLATPAK_TRANSACTION_OP_KIND_INSTALL; - } - - pref = strchr (op->ref, '/') + 1; - - - if (kind == FLATPAK_TRANSACTION_OP_KIND_INSTALL) - { - g_autoptr(OstreeAsyncProgress) progress = flatpak_progress_new (flatpak_terminal_progress_cb, &terminal_progress); - opname = _("install"); - 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, - cancellable, &local_error); - ostree_async_progress_finish (progress); - flatpak_terminal_progress_end (&terminal_progress); - } - else if (kind == FLATPAK_TRANSACTION_OP_KIND_UPDATE) - { - g_auto(OstreeRepoFinderResultv) check_results = NULL; - - opname = _("update"); - g_autofree char *target_commit = flatpak_dir_check_for_update (self->dir, op->ref, op->remote, op->commit, - (const char **)op->subpaths, - self->no_pull, - &check_results, - cancellable, &local_error); - if (target_commit != NULL) - { - 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, - self->no_deploy, - self->no_static_deltas, - op->commit != NULL, /* Allow downgrade if we specify commit */ - op->ref, op->remote, target_commit, - (const OstreeRepoFinderResult * const *) check_results, - (const char **)op->subpaths, - progress, - cancellable, &local_error); - ostree_async_progress_finish (progress); - flatpak_terminal_progress_end (&terminal_progress); - if (res) - { - g_autoptr(GVariant) deploy_data = NULL; - g_autofree char *commit = NULL; - deploy_data = flatpak_dir_get_deploy_data (self->dir, op->ref, NULL, NULL); - commit = g_strndup (flatpak_deploy_data_get_commit (deploy_data), 12); - g_print (_("Now at %s.\n"), commit); - } - - /* Handle noop-updates */ - if (!res && g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) - { - g_print (_("No updates.\n")); - res = TRUE; - g_clear_error (&local_error); - } - } - else - { - res = FALSE; - if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) - { - res = TRUE; - g_clear_error (&local_error); - } - } - } - else if (kind == FLATPAK_TRANSACTION_OP_KIND_BUNDLE) - { - g_autofree char *bundle_basename = g_file_get_basename (op->bundle); - opname = _("install bundle"); - 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); - } - else - g_assert_not_reached (); - - if (!res) - { - if (op->non_fatal) - { - g_printerr (_("Warning: Failed to %s %s: %s\n"), - opname, pref, local_error->message); - } - else if (!stop_on_first_error) - { - g_printerr (_("Error: Failed to %s %s: %s\n"), - opname, pref, local_error->message); - if (succeeded) - { - succeeded = FALSE; - flatpak_fail (error, _("One or more operations failed")); - } - } - else - { - succeeded = FALSE; - g_propagate_error (error, g_steal_pointer (&local_error)); - 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 -Nru flatpak-0.11.3/app/flatpak-transaction.h flatpak-1.0.7/app/flatpak-transaction.h --- flatpak-0.11.3/app/flatpak-transaction.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/flatpak-transaction.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -/* - * Copyright © 2016 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_TRANSACTION_H__ -#define __FLATPAK_TRANSACTION_H__ - -#include -#include "libglnx/libglnx.h" - -#include "flatpak-dir.h" - -typedef struct FlatpakTransaction FlatpakTransaction; - -FlatpakTransaction *flatpak_transaction_new (FlatpakDir *dir, - gboolean no_interaction, - gboolean no_pull, - gboolean no_deploy, - gboolean no_static_deltas, - gboolean add_deps, - gboolean add_related, - gboolean reinstall); -void flatpak_transaction_free (FlatpakTransaction *self); -gboolean flatpak_transaction_update_metadata (FlatpakTransaction *self, - gboolean all_remotes, - GCancellable *cancellable, - GError **error); -gboolean flatpak_transaction_run (FlatpakTransaction *self, - gboolean stop_on_first_errror, - GCancellable *cancellable, - GError **error); -gboolean flatpak_transaction_add_install (FlatpakTransaction *self, - const char *remote, - const char *ref, - const char **subpaths, - GError **error); -gboolean flatpak_transaction_add_install_bundle (FlatpakTransaction *self, - GFile *file, - GBytes *gpg_data, - GError **error); -gboolean flatpak_transaction_add_update (FlatpakTransaction *self, - const char *ref, - const char **subpaths, - const char *commit, - GError **error); -gboolean flatpak_transaction_is_empty (FlatpakTransaction *self); - - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakTransaction, flatpak_transaction_free) - -#endif /* __FLATPAK_TRANSACTION_H__ */ diff -Nru flatpak-0.11.3/app/Makefile.am.inc flatpak-1.0.7/app/Makefile.am.inc --- flatpak-0.11.3/app/Makefile.am.inc 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/app/Makefile.am.inc 2019-02-11 12:42:20.000000000 +0000 @@ -2,18 +2,33 @@ flatpak \ $(NULL) +EXTRA_DIST += app/parse-datetime.y + +flatpak_dbus_built_sources = app/flatpak-permission-dbus-generated.c app/flatpak-permission-dbus-generated.h + +app/flatpak-permission-dbus-generated.c: data/org.freedesktop.impl.portal.PermissionStore.xml Makefile + mkdir -p $(builddir)/common + $(AM_V_GEN) $(GDBUS_CODEGEN) \ + --interface-prefix org.freedesktop.impl.portal \ + --c-namespace XdpDbus \ + --generate-c-code $(builddir)/app/flatpak-permission-dbus-generated \ + $(srcdir)/data/org.freedesktop.impl.portal.PermissionStore.xml \ + $(NULL) + +app/%-dbus-generated.h: app/%-dbus-generated.c + @true # Built as a side-effect of the rules for the .c + flatpak_SOURCES = \ app/flatpak-main.c \ app/flatpak-builtins.h \ app/flatpak-builtins-utils.h \ app/flatpak-builtins-utils.c \ - app/flatpak-transaction.h \ - app/flatpak-transaction.c \ - app/flatpak-builtins-add-remote.c \ - 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-remote-add.c \ + app/flatpak-builtins-remote-modify.c \ + app/flatpak-builtins-remote-delete.c \ + app/flatpak-builtins-remote-list.c \ + app/flatpak-builtins-remote-ls.c \ + app/flatpak-builtins-remote-info.c \ app/flatpak-builtins-install.c \ app/flatpak-builtins-override.c \ app/flatpak-builtins-make-current.c \ @@ -24,6 +39,7 @@ app/flatpak-builtins-config.c \ app/flatpak-builtins-run.c \ app/flatpak-builtins-enter.c \ + app/flatpak-builtins-ps.c \ app/flatpak-builtins-build-init.c \ app/flatpak-builtins-build.c \ app/flatpak-builtins-build-finish.c \ @@ -32,16 +48,43 @@ app/flatpak-builtins-build-import-bundle.c \ app/flatpak-builtins-build-commit-from.c \ app/flatpak-builtins-build-sign.c \ - app/flatpak-builtins-repo-update.c \ + app/flatpak-builtins-build-update-repo.c \ app/flatpak-builtins-repo.c \ app/flatpak-builtins-document-export.c \ app/flatpak-builtins-document-unexport.c \ app/flatpak-builtins-document-info.c \ app/flatpak-builtins-document-list.c \ + app/flatpak-builtins-permission-remove.c \ + app/flatpak-builtins-permission-list.c \ + app/flatpak-builtins-permission-show.c \ + app/flatpak-builtins-permission-reset.c \ app/flatpak-builtins-search.c \ + app/flatpak-builtins-repair.c \ + app/flatpak-builtins-create-usb.c \ + app/flatpak-table-printer.c \ + app/flatpak-table-printer.h \ + app/flatpak-complete.c \ + app/flatpak-complete.h \ + app/flatpak-cli-transaction.c \ + app/flatpak-cli-transaction.h \ + app/parse-datetime.h \ $(NULL) +nodist_flatpak_SOURCES = \ + $(flatpak_dbus_built_sources) \ + app/parse-datetime.c \ + $(NULL) + +app/parse-datetime.c: app/parse-datetime.y Makefile + $(AM_V_GEN) $(YACC) $< -o $@ + +BUILT_SOURCES += $(flatpak_dbus_built_sources) +CLEANFILES += app/parse-datetime.c $(flatpak_dbus_built_sources) + 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) \ + -DFLATPAK_COMPILATION \ + -I$(srcdir)/app \ + -I$(builddir)/app \ -DLOCALEDIR=\"$(localedir)\" diff -Nru flatpak-0.11.3/app/parse-datetime.h flatpak-1.0.7/app/parse-datetime.h --- flatpak-0.11.3/app/parse-datetime.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/parse-datetime.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,24 @@ +/* Parse a string into an internal time stamp. + + Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2015 Free Software + Foundation, 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include +#include + +bool parse_datetime (struct timespec *, + char const *, + struct timespec const *); diff -Nru flatpak-0.11.3/app/parse-datetime.y flatpak-1.0.7/app/parse-datetime.y --- flatpak-0.11.3/app/parse-datetime.y 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/app/parse-datetime.y 2018-05-30 12:58:57.000000000 +0000 @@ -0,0 +1,1604 @@ +%{ +/* Parse a string into an internal time stamp. + + Copyright (C) 1999-2000, 2002-2015 Free Software Foundation, 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 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Originally written by Steven M. Bellovin while + at the University of North Carolina at Chapel Hill. Later tweaked by + a couple of people on Usenet. Completely overhauled by Rich $alz + and Jim Berets in August, 1990. + + Modified by Paul Eggert in August 1999 to do + the right thing about local DST. Also modified by Paul Eggert + in February 2004 to support + nanosecond-resolution time stamps, and in October 2004 to support + TZ strings in dates. */ + +/* FIXME: Check for arithmetic overflow in all cases, not just + some of them. */ + + +#include "config.h" +#include "parse-datetime.h" +#include +#include +#include +#include +#include +#include + +/* There's no need to extend the stack, so there's no need to involve + alloca. */ +#define YYSTACK_USE_ALLOCA 0 + +static char * +xmemdup (void const *p, size_t s) +{ + char *result = g_malloc (s); + memcpy (result, p, s); + return result; +} + +static void +gettime (struct timespec *ts) + { +#ifdef HAVE_NANOTIME + nanotime (ts); +#else + +# if defined(CLOCK_REALTIME) && defined(HAVE_CLOCK_GETTIME) + if (clock_gettime (CLOCK_REALTIME, ts) == 0) + return; +# endif + + { + struct timeval tv; + gettimeofday (&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } + +#endif + } + +/* Tell Bison how much stack space is needed. 20 should be plenty for + this grammar, which is not right recursive. Beware setting it too + high, since that might cause problems on machines whose + implementations have lame stack-overflow checking. */ +#define YYMAXDEPTH 20 +#define YYINITDEPTH YYMAXDEPTH + +/* Since the code of parse-datetime.y is not included in the Emacs executable + itself, there is no need to #define static in this file. Even if + the code were included in the Emacs executable, it probably + wouldn't do any harm to #undef it here; this will only cause + problems if we try to write to a static variable, which I don't + think this code needs to do. */ +#ifdef emacs +# undef static +#endif + +#include +#include +#include +#include + + +/* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers + use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ +/* FIXME: this is temporary. Remove when we have a mechanism to ensure + that the version we're using is fixed, too. */ +#ifdef _STDLIB_H_ +# undef _STDLIB_H +# define _STDLIB_H 1 +#endif + +/* ISDIGIT differs from isdigit, as follows: + - Its arg may be any int or unsigned int; it need not be an unsigned char + or EOF. + - It's typically faster. + POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to + isdigit unless it's important to use the locale's definition + of "digit" even when the host does not conform to POSIX. */ +#define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) + +/* Shift A right by B bits portably, by dividing A by 2**B and + truncating towards minus infinity. A and B should be free of side + effects, and B should be in the range 0 <= B <= INT_BITS - 2, where + INT_BITS is the number of useful bits in an int. GNU code can + assume that INT_BITS is at least 32. + + ISO C99 says that A >> B is implementation-defined if A < 0. Some + implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift + right in the usual way when A < 0, so SHR falls back on division if + ordinary A >> B doesn't seem to be the usual signed shift. */ +#define SHR(a, b) \ + (-1 >> 1 == -1 \ + ? (a) >> (b) \ + : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) + +#define EPOCH_YEAR 1970 +#define TM_YEAR_BASE 1900 + +#define HOUR(x) ((x) * 60) + +/* Convert a possibly-signed character to an unsigned character. This is + a bit safer than casting to unsigned char, since it catches some type + errors that the cast doesn't. */ +static unsigned char to_uchar (char ch) { return ch; } + +/* FIXME: It also assumes that signed integer overflow silently wraps around, + but this is not true any more with recent versions of GCC 4. */ + +/* An integer value, and the number of digits in its textual + representation. */ +typedef struct +{ + bool negative; + long int value; + size_t digits; +} textint; + +/* An entry in the lexical lookup table. */ +typedef struct +{ + char const *name; + int type; + int value; +} table; + +/* Meridian: am, pm, or 24-hour style. */ +enum { MERam, MERpm, MER24 }; + +enum { BILLION = 1000000000, LOG10_BILLION = 9 }; + +/* Relative times. */ +typedef struct +{ + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + long int year; + long int month; + long int day; + long int hour; + long int minutes; + intmax_t seconds; + int ns; +} relative_time; + +#define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) + +/* Information passed to and from the parser. */ +typedef struct +{ + /* The input string remaining to be parsed. */ + const char *input; + + /* N, if this is the Nth Tuesday. */ + long int day_ordinal; + + /* Day of week; Sunday is 0. */ + int day_number; + + /* tm_isdst flag for the local zone. */ + int local_isdst; + + /* Time zone, in minutes east of UTC. */ + long int time_zone; + + /* Style used for time. */ + int meridian; + + /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ + textint year; + long int month; + long int day; + long int hour; + long int minutes; + struct timespec seconds; /* includes nanoseconds */ + + /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ + relative_time rel; + + /* Presence or counts of nonterminals of various flavors parsed so far. */ + bool timespec_seen; + bool rels_seen; + size_t dates_seen; + size_t days_seen; + size_t local_zones_seen; + size_t dsts_seen; + size_t times_seen; + size_t zones_seen; + + /* Table of local time zone abbreviations, terminated by a null entry. */ + table local_time_zone_table[3]; +} parser_control; + +union YYSTYPE; +static int yylex (union YYSTYPE *, parser_control *); +static int yyerror (parser_control const *, char const *); +static long int time_zone_hhmm (parser_control *, textint, long int); + +/* Extract into *PC any date and time info from a string of digits + of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, + YYYY, ...). */ +static void +digits_to_date_time (parser_control *pc, textint text_int) +{ + if (pc->dates_seen && ! pc->year.digits + && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) + pc->year = text_int; + else + { + if (4 < text_int.digits) + { + pc->dates_seen++; + pc->day = text_int.value % 100; + pc->month = (text_int.value / 100) % 100; + pc->year.value = text_int.value / 10000; + pc->year.digits = text_int.digits - 4; + } + else + { + pc->times_seen++; + if (text_int.digits <= 2) + { + pc->hour = text_int.value; + pc->minutes = 0; + } + else + { + pc->hour = text_int.value / 100; + pc->minutes = text_int.value % 100; + } + pc->seconds.tv_sec = 0; + pc->seconds.tv_nsec = 0; + pc->meridian = MER24; + } + } +} + +/* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). */ +static void +apply_relative_time (parser_control *pc, relative_time rel, int factor) +{ + pc->rel.ns += factor * rel.ns; + pc->rel.seconds += factor * rel.seconds; + pc->rel.minutes += factor * rel.minutes; + pc->rel.hour += factor * rel.hour; + pc->rel.day += factor * rel.day; + pc->rel.month += factor * rel.month; + pc->rel.year += factor * rel.year; + pc->rels_seen = true; +} + +/* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ +static void +set_hhmmss (parser_control *pc, long int hour, long int minutes, + time_t sec, long int nsec) +{ + pc->hour = hour; + pc->minutes = minutes; + pc->seconds.tv_sec = sec; + pc->seconds.tv_nsec = nsec; +} + +%} + +/* We want a reentrant parser, even if the TZ manipulation and the calls to + localtime and gmtime are not reentrant. */ +%pure-parser +%parse-param { parser_control *pc } +%lex-param { parser_control *pc } + +/* This grammar has 31 shift/reduce conflicts. */ +%expect 31 + +%union +{ + long int intval; + textint textintval; + struct timespec timespec; + relative_time rel; +} + +%token tAGO +%token tDST + +%token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT +%token tDAY_UNIT tDAY_SHIFT + +%token tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN +%token tMONTH tORDINAL tZONE + +%token tSNUMBER tUNUMBER +%token tSDECIMAL_NUMBER tUDECIMAL_NUMBER + +%type o_colon_minutes +%type seconds signed_seconds unsigned_seconds + +%type relunit relunit_snumber dayshift + +%% + +spec: + timespec + | items + ; + +timespec: + '@' seconds + { + pc->seconds = $2; + pc->timespec_seen = true; + } + ; + +items: + /* empty */ + | items item + ; + +item: + datetime + { pc->times_seen++; pc->dates_seen++; } + | time + { pc->times_seen++; } + | local_zone + { pc->local_zones_seen++; } + | zone + { pc->zones_seen++; } + | date + { pc->dates_seen++; } + | day + { pc->days_seen++; } + | rel + | number + | hybrid + ; + +datetime: + iso_8601_datetime + ; + +iso_8601_datetime: + iso_8601_date 'T' iso_8601_time + ; + +time: + tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = $2; + } + | tUNUMBER ':' tUNUMBER tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = $4; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = $6; + } + | iso_8601_time + ; + +iso_8601_time: + tUNUMBER zone_offset + { + set_hhmmss (pc, $1.value, 0, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, 0, 0); + pc->meridian = MER24; + } + | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset + { + set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); + pc->meridian = MER24; + } + ; + +o_zone_offset: + /* empty */ + | zone_offset + ; + +zone_offset: + tSNUMBER o_colon_minutes + { + pc->zones_seen++; + pc->time_zone = time_zone_hhmm (pc, $1, $2); + } + ; + +local_zone: + tLOCAL_ZONE + { + pc->local_isdst = $1; + pc->dsts_seen += (0 < $1); + } + | tLOCAL_ZONE tDST + { + pc->local_isdst = 1; + pc->dsts_seen += (0 < $1) + 1; + } + ; + +/* Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +zone: + tZONE + { pc->time_zone = $1; } + | 'T' + { pc->time_zone = HOUR(7); } + | tZONE relunit_snumber + { pc->time_zone = $1; + apply_relative_time (pc, $2, 1); } + | 'T' relunit_snumber + { pc->time_zone = HOUR(7); + apply_relative_time (pc, $2, 1); } + | tZONE tSNUMBER o_colon_minutes + { pc->time_zone = $1 + time_zone_hhmm (pc, $2, $3); } + | tDAYZONE + { pc->time_zone = $1 + 60; } + | tZONE tDST + { pc->time_zone = $1 + 60; } + ; + +day: + tDAY + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tDAY ',' + { + pc->day_ordinal = 0; + pc->day_number = $1; + } + | tORDINAL tDAY + { + pc->day_ordinal = $1; + pc->day_number = $2; + } + | tUNUMBER tDAY + { + pc->day_ordinal = $1.value; + pc->day_number = $2; + } + ; + +date: + tUNUMBER '/' tUNUMBER + { + pc->month = $1.value; + pc->day = $3.value; + } + | tUNUMBER '/' tUNUMBER '/' tUNUMBER + { + /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, + otherwise as MM/DD/YY. + The goal in recognizing YYYY/MM/DD is solely to support legacy + machine-generated dates like those in an RCS log listing. If + you want portability, use the ISO 8601 format. */ + if (4 <= $1.digits) + { + pc->year = $1; + pc->month = $3.value; + pc->day = $5.value; + } + else + { + pc->month = $1.value; + pc->day = $3.value; + pc->year = $5; + } + } + | tUNUMBER tMONTH tSNUMBER + { + /* e.g. 17-JUN-1992. */ + pc->day = $1.value; + pc->month = $2; + pc->year.value = -$3.value; + pc->year.digits = $3.digits; + } + | tMONTH tSNUMBER tSNUMBER + { + /* e.g. JUN-17-1992. */ + pc->month = $1; + pc->day = -$2.value; + pc->year.value = -$3.value; + pc->year.digits = $3.digits; + } + | tMONTH tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + } + | tMONTH tUNUMBER ',' tUNUMBER + { + pc->month = $1; + pc->day = $2.value; + pc->year = $4; + } + | tUNUMBER tMONTH + { + pc->day = $1.value; + pc->month = $2; + } + | tUNUMBER tMONTH tUNUMBER + { + pc->day = $1.value; + pc->month = $2; + pc->year = $3; + } + | iso_8601_date + ; + +iso_8601_date: + tUNUMBER tSNUMBER tSNUMBER + { + /* ISO 8601 format. YYYY-MM-DD. */ + pc->year = $1; + pc->month = -$2.value; + pc->day = -$3.value; + } + ; + +rel: + relunit tAGO + { apply_relative_time (pc, $1, $2); } + | relunit + { apply_relative_time (pc, $1, 1); } + | dayshift + { apply_relative_time (pc, $1, 1); } + ; + +relunit: + tORDINAL tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1; } + | tUNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = 1; } + | tORDINAL tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1; } + | tUNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = 1; } + | tORDINAL tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1 * $2; } + | tUNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; } + | tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + | tORDINAL tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1; } + | tUNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = 1; } + | tORDINAL tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1; } + | tUNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = 1; } + | tORDINAL tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1; } + | tUNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + | tSDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tUDECIMAL_NUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } + | tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = 1; } + | relunit_snumber + ; + +relunit_snumber: + tSNUMBER tYEAR_UNIT + { $$ = RELATIVE_TIME_0; $$.year = $1.value; } + | tSNUMBER tMONTH_UNIT + { $$ = RELATIVE_TIME_0; $$.month = $1.value; } + | tSNUMBER tDAY_UNIT + { $$ = RELATIVE_TIME_0; $$.day = $1.value * $2; } + | tSNUMBER tHOUR_UNIT + { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } + | tSNUMBER tMINUTE_UNIT + { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } + | tSNUMBER tSEC_UNIT + { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } + ; + +dayshift: + tDAY_SHIFT + { $$ = RELATIVE_TIME_0; $$.day = $1; } + ; + +seconds: signed_seconds | unsigned_seconds; + +signed_seconds: + tSDECIMAL_NUMBER + | tSNUMBER + { $$.tv_sec = $1.value; $$.tv_nsec = 0; } + ; + +unsigned_seconds: + tUDECIMAL_NUMBER + | tUNUMBER + { $$.tv_sec = $1.value; $$.tv_nsec = 0; } + ; + +number: + tUNUMBER + { digits_to_date_time (pc, $1); } + ; + +hybrid: + tUNUMBER relunit_snumber + { + /* Hybrid all-digit and relative offset, so that we accept e.g., + "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ + digits_to_date_time (pc, $1); + apply_relative_time (pc, $2, 1); + } + ; + +o_colon_minutes: + /* empty */ + { $$ = -1; } + | ':' tUNUMBER + { $$ = $2.value; } + ; + +%% + +static table const meridian_table[] = +{ + { "AM", tMERIDIAN, MERam }, + { "A.M.", tMERIDIAN, MERam }, + { "PM", tMERIDIAN, MERpm }, + { "P.M.", tMERIDIAN, MERpm }, + { NULL, 0, 0 } +}; + +static table const dst_table[] = +{ + { "DST", tDST, 0 } +}; + +static table const month_and_day_table[] = +{ + { "JANUARY", tMONTH, 1 }, + { "FEBRUARY", tMONTH, 2 }, + { "MARCH", tMONTH, 3 }, + { "APRIL", tMONTH, 4 }, + { "MAY", tMONTH, 5 }, + { "JUNE", tMONTH, 6 }, + { "JULY", tMONTH, 7 }, + { "AUGUST", tMONTH, 8 }, + { "SEPTEMBER",tMONTH, 9 }, + { "SEPT", tMONTH, 9 }, + { "OCTOBER", tMONTH, 10 }, + { "NOVEMBER", tMONTH, 11 }, + { "DECEMBER", tMONTH, 12 }, + { "SUNDAY", tDAY, 0 }, + { "MONDAY", tDAY, 1 }, + { "TUESDAY", tDAY, 2 }, + { "TUES", tDAY, 2 }, + { "WEDNESDAY",tDAY, 3 }, + { "WEDNES", tDAY, 3 }, + { "THURSDAY", tDAY, 4 }, + { "THUR", tDAY, 4 }, + { "THURS", tDAY, 4 }, + { "FRIDAY", tDAY, 5 }, + { "SATURDAY", tDAY, 6 }, + { NULL, 0, 0 } +}; + +static table const time_units_table[] = +{ + { "YEAR", tYEAR_UNIT, 1 }, + { "MONTH", tMONTH_UNIT, 1 }, + { "FORTNIGHT",tDAY_UNIT, 14 }, + { "WEEK", tDAY_UNIT, 7 }, + { "DAY", tDAY_UNIT, 1 }, + { "HOUR", tHOUR_UNIT, 1 }, + { "MINUTE", tMINUTE_UNIT, 1 }, + { "MIN", tMINUTE_UNIT, 1 }, + { "SECOND", tSEC_UNIT, 1 }, + { "SEC", tSEC_UNIT, 1 }, + { NULL, 0, 0 } +}; + +/* Assorted relative-time words. */ +static table const relative_time_table[] = +{ + { "TOMORROW", tDAY_SHIFT, 1 }, + { "YESTERDAY",tDAY_SHIFT, -1 }, + { "TODAY", tDAY_SHIFT, 0 }, + { "NOW", tDAY_SHIFT, 0 }, + { "LAST", tORDINAL, -1 }, + { "THIS", tORDINAL, 0 }, + { "NEXT", tORDINAL, 1 }, + { "FIRST", tORDINAL, 1 }, +/*{ "SECOND", tORDINAL, 2 }, */ + { "THIRD", tORDINAL, 3 }, + { "FOURTH", tORDINAL, 4 }, + { "FIFTH", tORDINAL, 5 }, + { "SIXTH", tORDINAL, 6 }, + { "SEVENTH", tORDINAL, 7 }, + { "EIGHTH", tORDINAL, 8 }, + { "NINTH", tORDINAL, 9 }, + { "TENTH", tORDINAL, 10 }, + { "ELEVENTH", tORDINAL, 11 }, + { "TWELFTH", tORDINAL, 12 }, + { "AGO", tAGO, -1 }, + { "HENCE", tAGO, 1 }, + { NULL, 0, 0 } +}; + +/* The universal time zone table. These labels can be used even for + time stamps that would not otherwise be valid, e.g., GMT time + stamps in London during summer. */ +static table const universal_time_zone_table[] = +{ + { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ + { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ + { "UTC", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + +/* The time zone table. This table is necessarily incomplete, as time + zone abbreviations are ambiguous; e.g. Australians interpret "EST" + as Eastern time in Australia, not as US Eastern Standard Time. + You cannot rely on parse_datetime to handle arbitrary time zone + abbreviations; use numeric abbreviations like "-0500" instead. */ +static table const time_zone_table[] = +{ + { "WET", tZONE, HOUR ( 0) }, /* Western European */ + { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ + { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ + { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ + { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ + { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ + { "NST", tZONE, -(HOUR ( 3) + 30) }, /* Newfoundland Standard */ + { "NDT", tDAYZONE,-(HOUR ( 3) + 30) }, /* Newfoundland Daylight */ + { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ + { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ + { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ + { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ + { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ + { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ + { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ + { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ + { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ + { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ + { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ + { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ + { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ + { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ + { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ + { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ + { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ + { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ + { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ + { "CET", tZONE, HOUR ( 1) }, /* Central European */ + { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ + { "MET", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ + { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ + { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ + { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ + { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ + { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ + { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ + { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ + { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ + { "IST", tZONE, (HOUR ( 5) + 30) }, /* India Standard */ + { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ + { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ + { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ + { "GST", tZONE, HOUR (10) }, /* Guam Standard */ + { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ + { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ + { NULL, 0, 0 } +}; + +/* Military time zone table. + + Note 'T' is a special case, as it is used as the separator in ISO + 8601 date and time of day representation. */ +static table const military_table[] = +{ + { "A", tZONE, -HOUR ( 1) }, + { "B", tZONE, -HOUR ( 2) }, + { "C", tZONE, -HOUR ( 3) }, + { "D", tZONE, -HOUR ( 4) }, + { "E", tZONE, -HOUR ( 5) }, + { "F", tZONE, -HOUR ( 6) }, + { "G", tZONE, -HOUR ( 7) }, + { "H", tZONE, -HOUR ( 8) }, + { "I", tZONE, -HOUR ( 9) }, + { "K", tZONE, -HOUR (10) }, + { "L", tZONE, -HOUR (11) }, + { "M", tZONE, -HOUR (12) }, + { "N", tZONE, HOUR ( 1) }, + { "O", tZONE, HOUR ( 2) }, + { "P", tZONE, HOUR ( 3) }, + { "Q", tZONE, HOUR ( 4) }, + { "R", tZONE, HOUR ( 5) }, + { "S", tZONE, HOUR ( 6) }, + { "T", 'T', 0 }, + { "U", tZONE, HOUR ( 8) }, + { "V", tZONE, HOUR ( 9) }, + { "W", tZONE, HOUR (10) }, + { "X", tZONE, HOUR (11) }, + { "Y", tZONE, HOUR (12) }, + { "Z", tZONE, HOUR ( 0) }, + { NULL, 0, 0 } +}; + + + +/* Convert a time zone expressed as HH:MM into an integer count of + minutes. If MM is negative, then S is of the form HHMM and needs + to be picked apart; otherwise, S is of the form HH. As specified in + http://www.opengroup.org/susv3xbd/xbd_chap08.html#tag_08_03, allow + only valid TZ range, and consider first two digits as hours, if no + minutes specified. */ + +static long int +time_zone_hhmm (parser_control *pc, textint s, long int mm) +{ + long int n_minutes; + + /* If the length of S is 1 or 2 and no minutes are specified, + interpret it as a number of hours. */ + if (s.digits <= 2 && mm < 0) + s.value *= 100; + + if (mm < 0) + n_minutes = (s.value / 100) * 60 + s.value % 100; + else + n_minutes = s.value * 60 + (s.negative ? -mm : mm); + + /* If the absolute number of minutes is larger than 24 hours, + arrange to reject it by incrementing pc->zones_seen. Thus, + we allow only values in the range UTC-24:00 to UTC+24:00. */ + if (24 * 60 < labs (n_minutes)) + pc->zones_seen++; + + return n_minutes; +} + +static int +to_hour (long int hours, int meridian) +{ + switch (meridian) + { + default: /* Pacify GCC. */ + case MER24: + return 0 <= hours && hours < 24 ? hours : -1; + case MERam: + return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; + case MERpm: + return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; + } +} + +static long int +to_year (textint textyear) +{ + long int year = textyear.value; + + if (year < 0) + year = -year; + + /* XPG4 suggests that years 00-68 map to 2000-2068, and + years 69-99 map to 1969-1999. */ + else if (textyear.digits == 2) + year += year < 69 ? 2000 : 1900; + + return year; +} + +static table const * +lookup_zone (parser_control const *pc, char const *name) +{ + table const *tp; + + for (tp = universal_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + /* Try local zone abbreviations before those in time_zone_table, as + the local ones are more likely to be right. */ + for (tp = pc->local_time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + for (tp = time_zone_table; tp->name; tp++) + if (strcmp (name, tp->name) == 0) + return tp; + + return NULL; +} + +// #if ! HAVE_TM_GMTOFF +#if 1 // Always true for us +/* Yield the difference between *A and *B, + measured in seconds, ignoring leap seconds. + The body of this function is taken directly from the GNU C Library; + see src/strftime.c. */ +static long int +tm_diff (struct tm const *a, struct tm const *b) +{ + /* Compute intervening leap days correctly even if year is negative. + Take care to avoid int overflow in leap day calculations. */ + int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); + int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); + int a100 = a4 / 25 - (a4 % 25 < 0); + int b100 = b4 / 25 - (b4 % 25 < 0); + int a400 = SHR (a100, 2); + int b400 = SHR (b100, 2); + int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); + long int ayear = a->tm_year; + long int years = ayear - b->tm_year; + long int days = (365 * years + intervening_leap_days + + (a->tm_yday - b->tm_yday)); + return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + + (a->tm_min - b->tm_min)) + + (a->tm_sec - b->tm_sec)); +} +#endif /* ! HAVE_TM_GMTOFF */ + +static table const * +lookup_word (parser_control const *pc, char *word) +{ + char *p; + char *q; + size_t wordlen; + table const *tp; + bool period_found; + bool abbrev; + + /* Make it uppercase. */ + for (p = word; *p; p++) + { + unsigned char ch = *p; + *p = toupper (ch); + } + + for (tp = meridian_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* See if we have an abbreviation for a month. */ + wordlen = strlen (word); + abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); + + for (tp = month_and_day_table; tp->name; tp++) + if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) + return tp; + + if ((tp = lookup_zone (pc, word))) + return tp; + + if (strcmp (word, dst_table[0].name) == 0) + return dst_table; + + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Strip off any plural and try the units table again. */ + if (word[wordlen - 1] == 'S') + { + word[wordlen - 1] = '\0'; + for (tp = time_units_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ + } + + for (tp = relative_time_table; tp->name; tp++) + if (strcmp (word, tp->name) == 0) + return tp; + + /* Military time zones. */ + if (wordlen == 1) + for (tp = military_table; tp->name; tp++) + if (word[0] == tp->name[0]) + return tp; + + /* Drop out any periods and try the time zone table again. */ + for (period_found = false, p = q = word; (*p = *q); q++) + if (*q == '.') + period_found = true; + else + p++; + if (period_found && (tp = lookup_zone (pc, word))) + return tp; + + return NULL; +} + +static int +yylex (union YYSTYPE *lvalp, parser_control *pc) +{ + unsigned char c; + size_t count; + + for (;;) + { + while (c = *pc->input, isspace (c)) + pc->input++; + + if (ISDIGIT (c) || c == '-' || c == '+') + { + char const *p; + int sign; + unsigned long int value; + if (c == '-' || c == '+') + { + sign = c == '-' ? -1 : 1; + while (c = *++pc->input, isspace (c)) + continue; + if (! ISDIGIT (c)) + /* skip the '-' sign */ + continue; + } + else + sign = 0; + p = pc->input; + for (value = 0; ; value *= 10) + { + unsigned long int value1 = value + (c - '0'); + if (value1 < value) + return '?'; + value = value1; + c = *++p; + if (! ISDIGIT (c)) + break; + if (ULONG_MAX / 10 < value) + return '?'; + } + if ((c == '.' || c == ',') && ISDIGIT (p[1])) + { + time_t s; + int ns; + int digits; + unsigned long int value1; + + /* Check for overflow when converting value to time_t. */ + if (sign < 0) + { + s = - value; + if (0 < s) + return '?'; + value1 = -s; + } + else + { + s = value; + if (s < 0) + return '?'; + value1 = s; + } + if (value != value1) + return '?'; + + /* Accumulate fraction, to ns precision. */ + p++; + ns = *p++ - '0'; + for (digits = 2; digits <= LOG10_BILLION; digits++) + { + ns *= 10; + if (ISDIGIT (*p)) + ns += *p++ - '0'; + } + + /* Skip excess digits, truncating toward -Infinity. */ + if (sign < 0) + for (; ISDIGIT (*p); p++) + if (*p != '0') + { + ns++; + break; + } + while (ISDIGIT (*p)) + p++; + + /* Adjust to the timespec convention, which is that + tv_nsec is always a positive offset even if tv_sec is + negative. */ + if (sign < 0 && ns) + { + s--; + if (! (s < 0)) + return '?'; + ns = BILLION - ns; + } + + lvalp->timespec.tv_sec = s; + lvalp->timespec.tv_nsec = ns; + pc->input = p; + return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; + } + else + { + lvalp->textintval.negative = sign < 0; + if (sign < 0) + { + lvalp->textintval.value = - value; + if (0 < lvalp->textintval.value) + return '?'; + } + else + { + lvalp->textintval.value = value; + if (lvalp->textintval.value < 0) + return '?'; + } + lvalp->textintval.digits = p - pc->input; + pc->input = p; + return sign ? tSNUMBER : tUNUMBER; + } + } + + if (isalpha (c)) + { + char buff[20]; + char *p = buff; + table const *tp; + + do + { + if (p < buff + sizeof buff - 1) + *p++ = c; + c = *++pc->input; + } + while (isalpha (c) || c == '.'); + + *p = '\0'; + tp = lookup_word (pc, buff); + if (! tp) + return '?'; + lvalp->intval = tp->value; + return tp->type; + } + + if (c != '(') + return to_uchar (*pc->input++); + + count = 0; + do + { + c = *pc->input++; + if (c == '\0') + return c; + if (c == '(') + count++; + else if (c == ')') + count--; + } + while (count != 0); + } +} + +/* Do nothing if the parser reports an error. */ +static int +yyerror (parser_control const *pc, + char const *s) +{ + return 0; +} + +/* If *TM0 is the old and *TM1 is the new value of a struct tm after + passing it to mktime, return true if it's OK that mktime returned T. + It's not OK if *TM0 has out-of-range members. */ + +static bool +mktime_ok (struct tm const *tm0, struct tm const *tm1, time_t t) +{ + if (t == (time_t) -1) + { + /* Guard against falsely reporting an error when parsing a time + stamp that happens to equal (time_t) -1, on a host that + supports such a time stamp. */ + tm1 = localtime (&t); + if (!tm1) + return false; + } + + return ! ((tm0->tm_sec ^ tm1->tm_sec) + | (tm0->tm_min ^ tm1->tm_min) + | (tm0->tm_hour ^ tm1->tm_hour) + | (tm0->tm_mday ^ tm1->tm_mday) + | (tm0->tm_mon ^ tm1->tm_mon) + | (tm0->tm_year ^ tm1->tm_year)); +} + +/* A reasonable upper bound for the size of ordinary TZ strings. + Use heap allocation if TZ's length exceeds this. */ +enum { TZBUFSIZE = 100 }; + +/* Return a copy of TZ, stored in TZBUF if it fits, and heap-allocated + otherwise. */ +static char * +get_tz (char tzbuf[TZBUFSIZE]) +{ + char *tz = getenv ("TZ"); + if (tz) + { + size_t tzsize = strlen (tz) + 1; + tz = (tzsize <= TZBUFSIZE + ? memcpy (tzbuf, tz, tzsize) + : xmemdup (tz, tzsize)); + } + return tz; +} + +/* Parse a date/time string, storing the resulting time value into *RESULT. + The string itself is pointed to by P. Return true if successful. + P can be an incomplete or relative time specification; if so, use + *NOW as the basis for the returned time. */ +bool +parse_datetime (struct timespec *result, char const *p, + struct timespec const *now) +{ + time_t Start; + long int Start_ns; + struct tm const *tmp; + struct tm tm = { 0, }; + struct tm tm0 = { 0, }; + parser_control pc; + struct timespec gettime_buffer; + unsigned char c; + bool tz_was_altered = false; + char *tz0 = NULL; + char tz0buf[TZBUFSIZE]; + bool ok = true; + + if (! now) + { + gettime (&gettime_buffer); + now = &gettime_buffer; + } + + Start = now->tv_sec; + Start_ns = now->tv_nsec; + + tmp = localtime (&now->tv_sec); + if (! tmp) + return false; + + while (c = *p, isspace (c)) + p++; + + if (strncmp (p, "TZ=\"", 4) == 0) + { + char const *tzbase = p + 4; + size_t tzsize = 1; + char const *s; + + for (s = tzbase; *s; s++, tzsize++) + if (*s == '\\') + { + s++; + if (! (*s == '\\' || *s == '"')) + break; + } + else if (*s == '"') + { + char *z; + char *tz1; + char tz1buf[TZBUFSIZE]; + bool large_tz = TZBUFSIZE < tzsize; + bool setenv_ok; + tz0 = get_tz (tz0buf); + z = tz1 = large_tz ? g_malloc (tzsize) : tz1buf; + for (s = tzbase; *s != '"'; s++) + *z++ = *(s += *s == '\\'); + *z = '\0'; + setenv_ok = setenv ("TZ", tz1, 1) == 0; + if (large_tz) + free (tz1); + if (!setenv_ok) + goto fail; + tz_was_altered = true; + + p = s + 1; + while (c = *p, isspace (c)) + p++; + + break; + } + } + + /* As documented, be careful to treat the empty string just like + a date string of "0". Without this, an empty string would be + declared invalid when parsed during a DST transition. */ + if (*p == '\0') + p = "0"; + + pc.input = p; + pc.year.value = tmp->tm_year; + pc.year.value += TM_YEAR_BASE; + pc.year.digits = 0; + pc.month = tmp->tm_mon + 1; + pc.day = tmp->tm_mday; + pc.hour = tmp->tm_hour; + pc.minutes = tmp->tm_min; + pc.seconds.tv_sec = tmp->tm_sec; + pc.seconds.tv_nsec = Start_ns; + tm.tm_isdst = tmp->tm_isdst; + + pc.meridian = MER24; + pc.rel = RELATIVE_TIME_0; + pc.timespec_seen = false; + pc.rels_seen = false; + pc.dates_seen = 0; + pc.days_seen = 0; + pc.times_seen = 0; + pc.local_zones_seen = 0; + pc.dsts_seen = 0; + pc.zones_seen = 0; + +#if HAVE_STRUCT_TM_TM_ZONE + pc.local_time_zone_table[0].name = tmp->tm_zone; + pc.local_time_zone_table[0].type = tLOCAL_ZONE; + pc.local_time_zone_table[0].value = tmp->tm_isdst; + pc.local_time_zone_table[1].name = NULL; + + /* Probe the names used in the next three calendar quarters, looking + for a tm_isdst different from the one we already have. */ + { + int quarter; + for (quarter = 1; quarter <= 3; quarter++) + { + time_t probe = Start + quarter * (90 * 24 * 60 * 60); + struct tm const *probe_tm = localtime (&probe); + if (probe_tm && probe_tm->tm_zone + && probe_tm->tm_isdst != pc.local_time_zone_table[0].value) + { + { + pc.local_time_zone_table[1].name = probe_tm->tm_zone; + pc.local_time_zone_table[1].type = tLOCAL_ZONE; + pc.local_time_zone_table[1].value = probe_tm->tm_isdst; + pc.local_time_zone_table[2].name = NULL; + } + break; + } + } + } +#else +#if HAVE_TZNAME + { +# if !HAVE_DECL_TZNAME + extern char *tzname[]; +# endif + int i; + for (i = 0; i < 2; i++) + { + pc.local_time_zone_table[i].name = tzname[i]; + pc.local_time_zone_table[i].type = tLOCAL_ZONE; + pc.local_time_zone_table[i].value = i; + } + pc.local_time_zone_table[i].name = NULL; + } +#else + pc.local_time_zone_table[0].name = NULL; +#endif +#endif + + if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name + && ! strcmp (pc.local_time_zone_table[0].name, + pc.local_time_zone_table[1].name)) + { + /* This locale uses the same abbreviation for standard and + daylight times. So if we see that abbreviation, we don't + know whether it's daylight time. */ + pc.local_time_zone_table[0].value = -1; + pc.local_time_zone_table[1].name = NULL; + } + + if (yyparse (&pc) != 0) + goto fail; + + if (pc.timespec_seen) + *result = pc.seconds; + else + { + if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen + | (pc.local_zones_seen + pc.zones_seen))) + goto fail; + + tm.tm_year = to_year (pc.year) - TM_YEAR_BASE; + tm.tm_mon = pc.month - 1; + tm.tm_mday = pc.day; + if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) + { + tm.tm_hour = to_hour (pc.hour, pc.meridian); + if (tm.tm_hour < 0) + goto fail; + tm.tm_min = pc.minutes; + tm.tm_sec = pc.seconds.tv_sec; + } + else + { + tm.tm_hour = tm.tm_min = tm.tm_sec = 0; + pc.seconds.tv_nsec = 0; + } + + /* Let mktime deduce tm_isdst if we have an absolute time stamp. */ + if (pc.dates_seen | pc.days_seen | pc.times_seen) + tm.tm_isdst = -1; + + /* But if the input explicitly specifies local time with or without + DST, give mktime that information. */ + if (pc.local_zones_seen) + tm.tm_isdst = pc.local_isdst; + + tm0 = tm; + + Start = mktime (&tm); + + if (! mktime_ok (&tm0, &tm, Start)) + { + if (! pc.zones_seen) + goto fail; + else + { + /* Guard against falsely reporting errors near the time_t + boundaries when parsing times in other time zones. For + example, suppose the input string "1969-12-31 23:00:00 -0100", + the current time zone is 8 hours ahead of UTC, and the min + time_t value is 1970-01-01 00:00:00 UTC. Then the min + localtime value is 1970-01-01 08:00:00, and mktime will + therefore fail on 1969-12-31 23:00:00. To work around the + problem, set the time zone to 1 hour behind UTC temporarily + by setting TZ="XXX1:00" and try mktime again. */ + + long int time_zone = pc.time_zone; + long int abs_time_zone = time_zone < 0 ? - time_zone : time_zone; + long int abs_time_zone_hour = abs_time_zone / 60; + int abs_time_zone_min = abs_time_zone % 60; + char tz1buf[sizeof "XXX+0:00" + + sizeof pc.time_zone * CHAR_BIT / 3]; + if (!tz_was_altered) + tz0 = get_tz (tz0buf); + sprintf (tz1buf, "XXX%s%ld:%02d", &"-"[time_zone < 0], + abs_time_zone_hour, abs_time_zone_min); + if (setenv ("TZ", tz1buf, 1) != 0) + goto fail; + tz_was_altered = true; + tm = tm0; + Start = mktime (&tm); + if (! mktime_ok (&tm0, &tm, Start)) + goto fail; + } + } + + if (pc.days_seen && ! pc.dates_seen) + { + tm.tm_mday += ((pc.day_number - tm.tm_wday + 7) % 7 + + 7 * (pc.day_ordinal + - (0 < pc.day_ordinal + && tm.tm_wday != pc.day_number))); + tm.tm_isdst = -1; + Start = mktime (&tm); + if (Start == (time_t) -1) + goto fail; + } + + /* Add relative date. */ + if (pc.rel.year | pc.rel.month | pc.rel.day) + { + int year = tm.tm_year + pc.rel.year; + int month = tm.tm_mon + pc.rel.month; + int day = tm.tm_mday + pc.rel.day; + if (((year < tm.tm_year) ^ (pc.rel.year < 0)) + | ((month < tm.tm_mon) ^ (pc.rel.month < 0)) + | ((day < tm.tm_mday) ^ (pc.rel.day < 0))) + goto fail; + tm.tm_year = year; + tm.tm_mon = month; + tm.tm_mday = day; + tm.tm_hour = tm0.tm_hour; + tm.tm_min = tm0.tm_min; + tm.tm_sec = tm0.tm_sec; + tm.tm_isdst = tm0.tm_isdst; + Start = mktime (&tm); + if (Start == (time_t) -1) + goto fail; + } + + /* The only "output" of this if-block is an updated Start value, + so this block must follow others that clobber Start. */ + if (pc.zones_seen) + { + long int delta = pc.time_zone * 60; + time_t t1; +#ifdef HAVE_TM_GMTOFF + delta -= tm.tm_gmtoff; +#else + time_t t = Start; + struct tm const *gmt = gmtime (&t); + if (! gmt) + goto fail; + delta -= tm_diff (&tm, gmt); +#endif + t1 = Start - delta; + if ((Start < t1) != (delta < 0)) + goto fail; /* time_t overflow */ + Start = t1; + } + + /* Add relative hours, minutes, and seconds. On hosts that support + leap seconds, ignore the possibility of leap seconds; e.g., + "+ 10 minutes" adds 600 seconds, even if one of them is a + leap second. Typically this is not what the user wants, but it's + too hard to do it the other way, because the time zone indicator + must be applied before relative times, and if mktime is applied + again the time zone will be lost. */ + { + long int sum_ns = pc.seconds.tv_nsec + pc.rel.ns; + long int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; + time_t t0 = Start; + long int d1 = 60 * 60 * pc.rel.hour; + time_t t1 = t0 + d1; + long int d2 = 60 * pc.rel.minutes; + time_t t2 = t1 + d2; + intmax_t d3 = pc.rel.seconds; + intmax_t t3 = t2 + d3; + long int d4 = (sum_ns - normalized_ns) / BILLION; + intmax_t t4 = t3 + d4; + time_t t5 = t4; + + if ((d1 / (60 * 60) ^ pc.rel.hour) + | (d2 / 60 ^ pc.rel.minutes) + | ((t1 < t0) ^ (d1 < 0)) + | ((t2 < t1) ^ (d2 < 0)) + | ((t3 < t2) ^ (d3 < 0)) + | ((t4 < t3) ^ (d4 < 0)) + | (t5 != t4)) + goto fail; + + result->tv_sec = t5; + result->tv_nsec = normalized_ns; + } + } + + goto done; + + fail: + ok = false; + done: + if (tz_was_altered) + ok &= (tz0 ? setenv ("TZ", tz0, 1) : unsetenv ("TZ")) == 0; + if (tz0 != tz0buf) + free (tz0); + return ok; +} diff -Nru flatpak-0.11.3/bubblewrap/bind-mount.c flatpak-1.0.7/bubblewrap/bind-mount.c --- flatpak-0.11.3/bubblewrap/bind-mount.c 2016-12-19 09:50:47.000000000 +0000 +++ flatpak-1.0.7/bubblewrap/bind-mount.c 2018-09-26 08:39:11.000000000 +0000 @@ -389,7 +389,7 @@ if (src) { - if (mount (src, dest, NULL, MS_MGC_VAL | MS_BIND | (recursive ? MS_REC : 0), NULL) != 0) + if (mount (src, dest, NULL, MS_BIND | (recursive ? MS_REC : 0), NULL) != 0) return 1; } @@ -411,7 +411,7 @@ new_flags = current_flags | (devices ? 0 : MS_NODEV) | MS_NOSUID | (readonly ? MS_RDONLY : 0); if (new_flags != current_flags && mount ("none", resolved_dest, - NULL, MS_MGC_VAL | MS_BIND | MS_REMOUNT | new_flags, NULL) != 0) + NULL, MS_BIND | MS_REMOUNT | new_flags, NULL) != 0) return 3; /* We need to work around the fact that a bind mount does not apply the flags, so we need to manually @@ -426,7 +426,7 @@ new_flags = current_flags | (devices ? 0 : MS_NODEV) | MS_NOSUID | (readonly ? MS_RDONLY : 0); if (new_flags != current_flags && mount ("none", mount_tab[i].mountpoint, - NULL, MS_MGC_VAL | MS_BIND | MS_REMOUNT | new_flags, NULL) != 0) + NULL, MS_BIND | MS_REMOUNT | new_flags, NULL) != 0) { /* If we can't read the mountpoint we can't remount it, but that should be safe to ignore because its not something the user can access. */ diff -Nru flatpak-0.11.3/bubblewrap/bubblewrap.c flatpak-1.0.7/bubblewrap/bubblewrap.c --- flatpak-0.11.3/bubblewrap/bubblewrap.c 2018-02-01 08:33:27.000000000 +0000 +++ flatpak-1.0.7/bubblewrap/bubblewrap.c 2018-09-26 08:39:11.000000000 +0000 @@ -47,14 +47,15 @@ static gid_t real_gid; static uid_t overflow_uid; static gid_t overflow_gid; -static bool is_privileged; +static bool is_privileged; /* See acquire_privs() */ static const char *argv0; static const char *host_tty_dev; static int proc_fd = -1; -static char *opt_exec_label = NULL; -static char *opt_file_label = NULL; +static const char *opt_exec_label = NULL; +static const char *opt_file_label = NULL; +static bool opt_as_pid_1; -char *opt_chdir_path = NULL; +const char *opt_chdir_path = NULL; bool opt_unshare_user = FALSE; bool opt_unshare_user_try = FALSE; bool opt_unshare_pid = FALSE; @@ -70,9 +71,14 @@ gid_t opt_sandbox_gid = -1; int opt_sync_fd = -1; int opt_block_fd = -1; +int opt_userns_block_fd = -1; int opt_info_fd = -1; int opt_seccomp_fd = -1; -char *opt_sandbox_hostname = NULL; +const char *opt_sandbox_hostname = NULL; +char *opt_args_data = NULL; /* owned */ + +#define CAP_TO_MASK_0(x) (1L << ((x) & 31)) +#define CAP_TO_MASK_1(x) CAP_TO_MASK_0(x - 32) typedef enum { SETUP_BIND_MOUNT, @@ -112,6 +118,7 @@ struct _LockFile { const char *path; + int fd; LockFile *next; }; @@ -175,12 +182,12 @@ static void usage (int ecode, FILE *out) { - fprintf (out, "usage: %s [OPTIONS...] COMMAND [ARGS...]\n\n", argv0); + fprintf (out, "usage: %s [OPTIONS...] [--] COMMAND [ARGS...]\n\n", argv0); fprintf (out, " --help Print this help\n" " --version Print version\n" - " --args FD Parse nul-separated args from FD\n" + " --args FD Parse NUL-separated args from FD\n" " --unshare-all Unshare every namespace we support by default\n" " --share-net Retain the network namespace (can only combine with --unshare-all)\n" " --unshare-user Create new user namespace (may be automatically implied if not setuid)\n" @@ -192,7 +199,7 @@ " --unshare-cgroup Create new cgroup namespace\n" " --unshare-cgroup-try Create new cgroup namespace if possible else continue by skipping it\n" " --uid UID Custom uid in the sandbox (requires --unshare-user)\n" - " --gid GID Custon gid in the sandbox (requires --unshare-user)\n" + " --gid GID Custom gid in the sandbox (requires --unshare-user)\n" " --hostname NAME Custom hostname in the sandbox (requires --unshare-uts)\n" " --chdir DIR Change directory to DIR\n" " --setenv VAR VALUE Set an environment variable\n" @@ -202,23 +209,27 @@ " --bind SRC DEST Bind mount the host path SRC on DEST\n" " --dev-bind SRC DEST Bind mount the host path SRC on DEST, allowing device access\n" " --ro-bind SRC DEST Bind mount the host path SRC readonly on DEST\n" - " --remount-ro DEST Remount DEST as readonly, it doesn't recursively remount\n" - " --exec-label LABEL Exec Label for the sandbox\n" + " --remount-ro DEST Remount DEST as readonly; does not recursively remount\n" + " --exec-label LABEL Exec label for the sandbox\n" " --file-label LABEL File label for temporary sandbox content\n" - " --proc DEST Mount procfs on DEST\n" + " --proc DEST Mount new procfs on DEST\n" " --dev DEST Mount new dev on DEST\n" " --tmpfs DEST Mount new tmpfs on DEST\n" " --mqueue DEST Mount new mqueue on DEST\n" " --dir DEST Create dir at DEST\n" - " --file FD DEST Copy from FD to dest DEST\n" + " --file FD DEST Copy from FD to destination DEST\n" " --bind-data FD DEST Copy from FD to file which is bind-mounted on DEST\n" " --ro-bind-data FD DEST Copy from FD to file which is readonly bind-mounted on DEST\n" " --symlink SRC DEST Create symlink at DEST with target SRC\n" " --seccomp FD Load and use seccomp rules from FD\n" " --block-fd FD Block on FD until some data to read is available\n" + " --userns-block-fd FD Block on FD until the user namespace is ready\n" " --info-fd FD Write information about the running container to FD\n" " --new-session Create a new terminal session\n" " --die-with-parent Kills with SIGKILL child process (COMMAND) when bwrap or bwrap's parent dies.\n" + " --as-pid-1 Do not install a reaper process with PID=1\n" + " --cap-add CAP Add cap CAP when running as privileged user\n" + " --cap-drop CAP Drop cap CAP when running as privileged user\n" ); exit (ecode); } @@ -305,7 +316,7 @@ * the exit status via a eventfd. We also track the exit of the sandbox * pid 1 via a signalfd for SIGCHLD, and exit with an error in this case. * This is to catch e.g. problems during setup. */ -static void +static int monitor_child (int event_fd, pid_t child_pid) { int res; @@ -357,7 +368,7 @@ if (s == -1 && errno != EINTR && errno != EAGAIN) die_with_error ("read eventfd"); else if (s == 8) - exit ((int) val - 1); + return ((int) val - 1); } /* We need to read the signal_fd, or it will keep polling as read, @@ -374,9 +385,13 @@ /* We may be getting sigchild from other children too. For instance if someone created a child process, and then exec:ed bubblewrap. Ignore them */ if (died_pid == child_pid) - exit (propagate_exit_status (died_status)); + return propagate_exit_status (died_status); } } + + die ("Should not be reached"); + + return 0; } /* This is pid 1 in the app sandbox. It is needed because we're using @@ -409,6 +424,7 @@ die_with_error ("Unable to lock file %s", lock->path); /* Keep fd open to hang on to lock */ + lock->fd = fd; } /* Optionally bind our lifecycle to that of the caller */ @@ -445,11 +461,29 @@ } } + /* Close FDs. */ + for (lock = lock_files; lock != NULL; lock = lock->next) + { + if (lock->fd >= 0) + { + close (lock->fd); + lock->fd = -1; + } + } + return initial_exit_status; } +#define CAP_TO_MASK_0(x) (1L << ((x) & 31)) +#define CAP_TO_MASK_1(x) CAP_TO_MASK_0(x - 32) + +/* Set if --cap-add or --cap-drop were used */ +static bool opt_cap_add_or_drop_used; +/* The capability set we'll target, used if above is true */ +static uint32_t requested_caps[2] = {0, 0}; + /* low 32bit caps needed */ -#define REQUIRED_CAPS_0 (CAP_TO_MASK (CAP_SYS_ADMIN) | CAP_TO_MASK (CAP_SYS_CHROOT) | CAP_TO_MASK (CAP_NET_ADMIN) | CAP_TO_MASK (CAP_SETUID) | CAP_TO_MASK (CAP_SETGID)) +#define REQUIRED_CAPS_0 (CAP_TO_MASK_0 (CAP_SYS_ADMIN) | CAP_TO_MASK_0 (CAP_SYS_CHROOT) | CAP_TO_MASK_0 (CAP_NET_ADMIN) | CAP_TO_MASK_0 (CAP_SETUID) | CAP_TO_MASK_0 (CAP_SETGID)) /* high 32bit caps needed */ #define REQUIRED_CAPS_1 0 @@ -471,13 +505,43 @@ } static void -drop_all_caps (void) +drop_all_caps (bool keep_requested_caps) { struct __user_cap_header_struct hdr = { _LINUX_CAPABILITY_VERSION_3, 0 }; struct __user_cap_data_struct data[2] = { { 0 } }; + if (keep_requested_caps) + { + /* Avoid calling capset() unless we need to; currently + * systemd-nspawn at least is known to install a seccomp + * policy denying capset() for dubious reasons. + * + */ + if (!opt_cap_add_or_drop_used && real_uid == 0) + { + assert (!is_privileged); + return; + } + data[0].effective = requested_caps[0]; + data[0].permitted = requested_caps[0]; + data[0].inheritable = requested_caps[0]; + data[1].effective = requested_caps[1]; + data[1].permitted = requested_caps[1]; + data[1].inheritable = requested_caps[1]; + } + if (capset (&hdr, data) < 0) - die_with_error ("capset failed"); + { + /* While the above logic ensures we don't call capset() for the primary + * process unless configured to do so, we still try to drop privileges for + * the init process unconditionally. Since due to the systemd seccomp + * filter that will fail, let's just ignore it. + */ + if (errno == EPERM && real_uid == 0 && !is_privileged) + return; + else + die_with_error ("capset failed"); + } } static bool @@ -492,8 +556,12 @@ return data[0].permitted != 0 || data[1].permitted != 0; } +/* Most of the code here is used both to add caps to the ambient capabilities + * and drop caps from the bounding set. Handle both cases here and add + * drop_cap_bounding_set/set_ambient_capabilities wrappers to facilitate its usage. + */ static void -drop_cap_bounding_set (void) +prctl_caps (uint32_t *caps, bool do_cap_bounding, bool do_set_ambient) { unsigned long cap; @@ -504,14 +572,62 @@ * https://github.com/projectatomic/bubblewrap/pull/175#issuecomment-278051373 * https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/security/commoncap.c?id=160da84dbb39443fdade7151bc63a88f8e953077 */ - for (cap = 0; cap <= 63; cap++) + for (cap = 0; cap <= CAP_LAST_CAP; cap++) { - int res = prctl (PR_CAPBSET_DROP, cap, 0, 0, 0); - if (res == -1 && !(errno == EINVAL || errno == EPERM)) - die_with_error ("Dropping capability %ld from bounds", cap); + bool keep = FALSE; + if (cap < 32) + { + if (CAP_TO_MASK_0 (cap) & caps[0]) + keep = TRUE; + } + else + { + if (CAP_TO_MASK_1 (cap) & caps[1]) + keep = TRUE; + } + + if (keep && do_set_ambient) + { +#ifdef PR_CAP_AMBIENT + int res = prctl (PR_CAP_AMBIENT, PR_CAP_AMBIENT_RAISE, cap, 0, 0); + if (res == -1 && !(errno == EINVAL || errno == EPERM)) + die_with_error ("Adding ambient capability %ld", cap); +#else + /* We ignore the EINVAL that results from not having PR_CAP_AMBIENT + * in the current kernel at runtime, so also ignore not having it + * in the current kernel headers at compile-time */ +#endif + } + + if (!keep && do_cap_bounding) + { + int res = prctl (PR_CAPBSET_DROP, cap, 0, 0, 0); + if (res == -1 && !(errno == EINVAL || errno == EPERM)) + die_with_error ("Dropping capability %ld from bounds", cap); + } } } +static void +drop_cap_bounding_set (bool drop_all) +{ + if (!drop_all) + prctl_caps (requested_caps, TRUE, FALSE); + else + { + uint32_t no_caps[2] = {0, 0}; + prctl_caps (no_caps, TRUE, FALSE); + } +} + +static void +set_ambient_capabilities (void) +{ + if (is_privileged) + return; + prctl_caps (requested_caps, FALSE, TRUE); +} + /* This acquires the privileges that the bwrap will need it to work. * If bwrap is not setuid, then this does nothing, and it relies on * unprivileged user namespaces to be used. This case is @@ -536,11 +652,10 @@ /* Are we setuid ? */ if (real_uid != euid) { - if (euid == 0) - is_privileged = TRUE; - else + if (euid != 0) die ("Unexpected setuid user %d, should be 0", euid); + is_privileged = TRUE; /* We want to keep running as euid=0 until at the clone() * operation because doing so will make the user namespace be * owned by root, which makes it not ptrace:able by the user as @@ -560,8 +675,8 @@ if (new_fsuid != real_uid) die ("Unable to set fsuid (was %d)", (int)new_fsuid); - /* We never need capabilies after execve(), so lets drop everything from the bounding set */ - drop_cap_bounding_set (); + /* We never need capabilities after execve(), so lets drop everything from the bounding set */ + drop_cap_bounding_set (TRUE); /* Keep only the required capabilities for setup */ set_required_caps (); @@ -573,6 +688,21 @@ don't support anymore */ die ("Unexpected capabilities but not setuid, old file caps config?"); } + else if (real_uid == 0) + { + /* If our uid is 0, default to inheriting all caps; the caller + * can drop them via --cap-drop. This is used by at least rpm-ostree. + * Note this needs to happen before the argument parsing of --cap-drop. + */ + struct __user_cap_header_struct hdr = { _LINUX_CAPABILITY_VERSION_3, 0 }; + struct __user_cap_data_struct data[2] = { { 0 } }; + + if (capget (&hdr, data) < 0) + die_with_error ("capget (for uid == 0) failed"); + + requested_caps[0] = data[0].effective; + requested_caps[1] = data[1].effective; + } /* Else, we try unprivileged user namespaces */ } @@ -583,7 +713,7 @@ { /* If we're in a new user namespace, we got back the bounding set, clear it again */ if (opt_unshare_user) - drop_cap_bounding_set (); + drop_cap_bounding_set (FALSE); if (!is_privileged) return; @@ -599,17 +729,16 @@ set_required_caps (); } +/* Call setuid() and use capset() to adjust capabilities */ static void -drop_privs (void) +drop_privs (bool keep_requested_caps) { - if (!is_privileged) - return; - + assert (!keep_requested_caps || !is_privileged); /* Drop root uid */ - if (setuid (opt_sandbox_uid) < 0) + if (getuid () == 0 && setuid (opt_sandbox_uid) < 0) die_with_error ("unable to drop root uid"); - drop_all_caps (); + drop_all_caps (keep_requested_caps); } static char * @@ -648,7 +777,7 @@ else dir = xasprintf ("%d", pid); - dir_fd = openat (proc_fd, dir, O_RDONLY | O_PATH); + dir_fd = openat (proc_fd, dir, O_PATH); if (dir_fd < 0) die_with_error ("open /proc/%s failed", dir); @@ -777,20 +906,20 @@ break; case PRIV_SEP_OP_PROC_MOUNT: - if (mount ("proc", arg1, "proc", MS_MGC_VAL | MS_NOSUID | MS_NOEXEC | MS_NODEV, NULL) != 0) + if (mount ("proc", arg1, "proc", MS_NOSUID | MS_NOEXEC | MS_NODEV, NULL) != 0) die_with_error ("Can't mount proc on %s", arg1); break; case PRIV_SEP_OP_TMPFS_MOUNT: { cleanup_free char *opt = label_mount ("mode=0755", opt_file_label); - if (mount ("tmpfs", arg1, "tmpfs", MS_MGC_VAL | MS_NOSUID | MS_NODEV, opt) != 0) + if (mount ("tmpfs", arg1, "tmpfs", MS_NOSUID | MS_NODEV, opt) != 0) die_with_error ("Can't mount tmpfs on %s", arg1); break; } case PRIV_SEP_OP_DEVPTS_MOUNT: - if (mount ("devpts", arg1, "devpts", MS_MGC_VAL | MS_NOSUID | MS_NOEXEC, + if (mount ("devpts", arg1, "devpts", MS_NOSUID | MS_NOEXEC, "newinstance,ptmxmode=0666,mode=620") != 0) die_with_error ("Can't mount devpts on %s", arg1); break; @@ -855,7 +984,7 @@ case SETUP_BIND_MOUNT: if (source_mode == S_IFDIR) { - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); } else if (ensure_file (dest, 0666) != 0) @@ -874,7 +1003,7 @@ break; case SETUP_MOUNT_PROC: - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); if (unshare_pid) @@ -900,9 +1029,15 @@ for (i = 0; i < N_ELEMENTS (cover_proc_dirs); i++) { cleanup_free char *subdir = strconcat3 (dest, "/", cover_proc_dirs[i]); - /* Some of these may not exist */ - if (get_file_mode (subdir) == -1) - continue; + if (access (subdir, W_OK) < 0) + { + /* The file is already read-only or doesn't exist. */ + if (errno == EACCES || errno == ENOENT) + continue; + + die_with_error ("Can't access %s", subdir); + } + privileged_op (privileged_op_socket, PRIV_SEP_OP_BIND_MOUNT, BIND_READONLY, subdir, subdir); @@ -911,7 +1046,7 @@ break; case SETUP_MOUNT_DEV: - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); privileged_op (privileged_op_socket, @@ -939,6 +1074,16 @@ die_with_error ("Can't create symlink %s/%s", op->dest, stdionodes[i]); } + /* /dev/fd and /dev/core - legacy, but both nspawn and docker do these */ + { cleanup_free char *dev_fd = strconcat (dest, "/fd"); + if (symlink ("/proc/self/fd", dev_fd) < 0) + die_with_error ("Can't create symlink %s", dev_fd); + } + { cleanup_free char *dev_core = strconcat (dest, "/core"); + if (symlink ("/proc/kcore", dev_core) < 0) + die_with_error ("Can't create symlink %s", dev_core); + } + { cleanup_free char *pts = strconcat (dest, "/pts"); cleanup_free char *ptmx = strconcat (dest, "/ptmx"); @@ -977,7 +1122,7 @@ break; case SETUP_MOUNT_TMPFS: - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); privileged_op (privileged_op_socket, @@ -986,7 +1131,7 @@ break; case SETUP_MOUNT_MQUEUE: - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); privileged_op (privileged_op_socket, @@ -995,7 +1140,7 @@ break; case SETUP_MAKE_DIR: - if (mkdir (dest, 0755) != 0 && errno != EEXIST) + if (ensure_dir (dest, 0755) != 0) die_with_error ("Can't mkdir %s", op->dest); break; @@ -1012,6 +1157,7 @@ die_with_error ("Can't write data to file %s", op->dest); close (op->fd); + op->fd = -1; } break; @@ -1029,6 +1175,9 @@ die_with_error ("Can't write data to file %s", op->dest); close (op->fd); + op->fd = -1; + + assert (dest != NULL); if (ensure_file (dest, 0666) != 0) die_with_error ("Can't create file at %s", op->dest); @@ -1046,11 +1195,13 @@ break; case SETUP_MAKE_SYMLINK: + assert (op->source != NULL); /* guaranteed by the constructor */ if (symlink (op->source, dest) != 0) die_with_error ("Can't make symlink at %s", op->dest); break; case SETUP_SET_HOSTNAME: + assert (op->dest != NULL); /* guaranteed by the constructor */ privileged_op (privileged_op_socket, PRIV_SEP_OP_SET_HOSTNAME, 0, op->dest, NULL); @@ -1064,6 +1215,22 @@ PRIV_SEP_OP_DONE, 0, NULL, NULL); } +/* Do not leak file descriptors already used by setup_newroot () */ +static void +close_ops_fd (void) +{ + SetupOp *op; + + for (op = ops; op != NULL; op = op->next) + { + if (op->fd != -1) + { + (void) close (op->fd); + op->fd = -1; + } + } +} + /* We need to resolve relative symlinks in the sandbox before we chroot so that absolute symlinks are handled correctly. We also need to do this after we've switched to the real uid so that @@ -1150,14 +1317,14 @@ } static void -parse_args_recurse (int *argcp, - char ***argvp, - bool in_file, - int *total_parsed_argc_p) +parse_args_recurse (int *argcp, + const char ***argvp, + bool in_file, + int *total_parsed_argc_p) { SetupOp *op; int argc = *argcp; - char **argv = *argvp; + const char **argv = *argvp; /* I can't imagine a case where someone wants more than this. * If you do...you should be able to pass multiple files * via a single tmpfs and linking them there, etc. @@ -1189,11 +1356,10 @@ { int the_fd; char *endptr; - char *data, *p; - char *data_end; + const char *p, *data_end; size_t data_len; - cleanup_free char **data_argv = NULL; - char **data_argv_copy; + cleanup_free const char **data_argv = NULL; + const char **data_argv_copy; int data_argc; int i; @@ -1207,14 +1373,18 @@ if (argv[1][0] == 0 || endptr[0] != 0 || the_fd < 0) die ("Invalid fd: %s", argv[1]); - data = load_file_data (the_fd, &data_len); - if (data == NULL) + /* opt_args_data is essentially a recursive argv array, which we must + * keep allocated until exit time, since its argv entries get used + * by the other cases in parse_args_recurse() when we recurse. */ + opt_args_data = load_file_data (the_fd, &data_len); + if (opt_args_data == NULL) die_with_error ("Can't read --args data"); + (void) close (the_fd); - data_end = data + data_len; + data_end = opt_args_data + data_len; data_argc = 0; - p = data; + p = opt_args_data; while (p != NULL && p < data_end) { data_argc++; @@ -1229,7 +1399,7 @@ data_argv = xcalloc (sizeof (char *) * (data_argc + 1)); i = 0; - p = data; + p = opt_args_data; while (p != NULL && p < data_end) { /* Note: load_file_data always adds a nul terminator, so this is safe @@ -1542,6 +1712,23 @@ argv += 1; argc -= 1; } + else if (strcmp (arg, "--userns-block-fd") == 0) + { + int the_fd; + char *endptr; + + if (argc < 2) + die ("--userns-block-fd takes an argument"); + + the_fd = strtol (argv[1], &endptr, 10); + if (argv[1][0] == 0 || endptr[0] != 0 || the_fd < 0) + die ("Invalid fd: %s", argv[1]); + + opt_userns_block_fd = the_fd; + + argv += 1; + argc -= 1; + } else if (strcmp (arg, "--info-fd") == 0) { int the_fd; @@ -1652,6 +1839,68 @@ { opt_die_with_parent = TRUE; } + else if (strcmp (arg, "--as-pid-1") == 0) + { + opt_as_pid_1 = TRUE; + } + else if (strcmp (arg, "--cap-add") == 0) + { + cap_value_t cap; + if (argc < 2) + die ("--cap-add takes an argument"); + + opt_cap_add_or_drop_used = TRUE; + + if (strcasecmp (argv[1], "ALL") == 0) + { + requested_caps[0] = requested_caps[1] = 0xFFFFFFFF; + } + else + { + if (cap_from_name (argv[1], &cap) < 0) + die ("unknown cap: %s", argv[1]); + + if (cap < 32) + requested_caps[0] |= CAP_TO_MASK_0 (cap); + else + requested_caps[1] |= CAP_TO_MASK_1 (cap - 32); + } + + argv += 1; + argc -= 1; + } + else if (strcmp (arg, "--cap-drop") == 0) + { + cap_value_t cap; + if (argc < 2) + die ("--cap-drop takes an argument"); + + opt_cap_add_or_drop_used = TRUE; + + if (strcasecmp (argv[1], "ALL") == 0) + { + requested_caps[0] = requested_caps[1] = 0; + } + else + { + if (cap_from_name (argv[1], &cap) < 0) + die ("unknown cap: %s", argv[1]); + + if (cap < 32) + requested_caps[0] &= ~CAP_TO_MASK_0 (cap); + else + requested_caps[1] &= ~CAP_TO_MASK_1 (cap - 32); + } + + argv += 1; + argc -= 1; + } + else if (strcmp (arg, "--") == 0) + { + argv += 1; + argc -= 1; + break; + } else if (*arg == '-') { die ("Unknown option %s", arg); @@ -1670,8 +1919,8 @@ } static void -parse_args (int *argcp, - char ***argvp) +parse_args (int *argcp, + const char ***argvp) { int total_parsed_argc = *argcp; @@ -1721,6 +1970,7 @@ cleanup_free char *seccomp_data = NULL; size_t seccomp_len; struct sock_fprog seccomp_prog; + cleanup_free char *args_data = NULL; /* Handle --version early on before we try to acquire/drop * any capabilities so it works in a build environment; @@ -1756,7 +2006,20 @@ if (argc == 0) usage (EXIT_FAILURE, stderr); - parse_args (&argc, &argv); + parse_args (&argc, (const char ***) &argv); + + /* suck the args into a cleanup_free variable to control their lifecycle */ + args_data = opt_args_data; + opt_args_data = NULL; + + if ((requested_caps[0] || requested_caps[1]) && is_privileged) + die ("--cap-add in setuid mode can be used only by root"); + + if (opt_userns_block_fd != -1 && !opt_unshare_user) + die ("--userns-block-fd requires --unshare-user"); + + if (opt_userns_block_fd != -1 && opt_info_fd == -1) + die ("--userns-block-fd requires --info-fd"); /* We have to do this if we weren't installed setuid (and we're not * root), so let's just DWIM */ @@ -1783,6 +2046,15 @@ disabled = TRUE; } + /* Check for max_user_namespaces */ + if (stat ("/proc/sys/user/max_user_namespaces", &sbuf) == 0) + { + cleanup_free char *max_user_ns = NULL; + max_user_ns = load_file_at (AT_FDCWD, "/proc/sys/user/max_user_namespaces"); + if (max_user_ns != NULL && strcmp(max_user_ns, "0\n") == 0) + disabled = TRUE; + } + /* Debian lets you disable *unprivileged* user namespaces. However this is not a problem if we're privileged, and if we're not opt_unshare_user is TRUE already, and there is not much we can do, its just a non-working setup. */ @@ -1810,26 +2082,32 @@ if (!opt_unshare_uts && opt_sandbox_hostname != NULL) die ("Specifying --hostname requires --unshare-uts"); + if (opt_as_pid_1 && !opt_unshare_pid) + die ("Specifying --as-pid-1 requires --unshare-pid"); + + if (opt_as_pid_1 && lock_files != NULL) + die ("Specifying --as-pid-1 and --lock-file is not permitted"); + /* We need to read stuff from proc during the pivot_root dance, etc. Lets keep a fd to it open */ - proc_fd = open ("/proc", O_RDONLY | O_PATH); + proc_fd = open ("/proc", O_PATH); if (proc_fd == -1) die_with_error ("Can't open /proc"); /* We need *some* mountpoint where we can mount the root tmpfs. We first try in /run, and if that fails, try in /tmp. */ base_path = xasprintf ("/run/user/%d/.bubblewrap", real_uid); - if (mkdir (base_path, 0755) && errno != EEXIST) + if (ensure_dir (base_path, 0755)) { free (base_path); base_path = xasprintf ("/tmp/.bubblewrap-%d", real_uid); - if (mkdir (base_path, 0755) && errno != EEXIST) + if (ensure_dir (base_path, 0755)) die_with_error ("Creating root mountpoint failed"); } __debug__ (("creating new namespace\n")); - if (opt_unshare_pid) + if (opt_unshare_pid && !opt_as_pid_1) { event_fd = eventfd (0, EFD_CLOEXEC | EFD_NONBLOCK); if (event_fd == -1) @@ -1890,7 +2168,7 @@ { /* Parent, outside sandbox, privileged (initially) */ - if (is_privileged && opt_unshare_user) + if (is_privileged && opt_unshare_user && opt_userns_block_fd == -1) { /* We're running as euid 0, but the uid we want to map is * not 0. This means we're not allowed to write this from @@ -1908,17 +2186,11 @@ /* Initial launched process, wait for exec:ed command to exit */ /* We don't need any privileges in the launcher, drop them immediately. */ - drop_privs (); + drop_privs (FALSE); /* Optionally bind our lifecycle to that of the parent */ handle_die_with_parent (); - /* Let child run now that the uid maps are set up */ - val = 1; - res = write (child_wait_fd, &val, 8); - /* Ignore res, if e.g. the child died and closed child_wait_fd we don't want to error out here */ - close (child_wait_fd); - if (opt_info_fd != -1) { cleanup_free char *output = xasprintf ("{\n \"child-pid\": %i\n}\n", pid); @@ -1928,8 +2200,20 @@ close (opt_info_fd); } - monitor_child (event_fd, pid); - exit (0); /* Should not be reached, but better safe... */ + if (opt_userns_block_fd != -1) + { + char b[1]; + (void) TEMP_FAILURE_RETRY (read (opt_userns_block_fd, b, 1)); + close (opt_userns_block_fd); + } + + /* Let child run now that the uid maps are set up */ + val = 1; + res = write (child_wait_fd, &val, 8); + /* Ignore res, if e.g. the child died and closed child_wait_fd we don't want to error out here */ + close (child_wait_fd); + + return monitor_child (event_fd, pid); } /* Child, in sandbox, privileged in the parent or in the user namespace (if --unshare-user). @@ -1964,7 +2248,7 @@ ns_uid = opt_sandbox_uid; ns_gid = opt_sandbox_gid; - if (!is_privileged && opt_unshare_user) + if (!is_privileged && opt_unshare_user && opt_userns_block_fd == -1) { /* In the unprivileged case we have to write the uid/gid maps in * the child, because we have no caps in the parent */ @@ -2014,6 +2298,9 @@ if (mkdir ("newroot", 0755)) die_with_error ("Creating newroot failed"); + if (mount ("newroot", "newroot", NULL, MS_MGC_VAL | MS_BIND | MS_REC, NULL) < 0) + die_with_error ("setting up newroot bind"); + if (mkdir ("oldroot", 0755)) die_with_error ("Creating oldroot failed"); @@ -2038,7 +2325,7 @@ if (child == 0) { /* Unprivileged setup process */ - drop_privs (); + drop_privs (FALSE); close (privsep_sockets[0]); setup_newroot (opt_unshare_pid, privsep_sockets[1]); exit (0); @@ -2073,6 +2360,8 @@ setup_newroot (opt_unshare_pid, -1); } + close_ops_fd (); + /* The old root better be rprivate or we will send unmount events to the parent namespace */ if (mount ("oldroot", "oldroot", NULL, MS_REC | MS_PRIVATE, NULL) != 0) die_with_error ("Failed to make old root rprivate"); @@ -2080,8 +2369,40 @@ if (umount2 ("oldroot", MNT_DETACH)) die_with_error ("unmount old root"); + /* This is our second pivot. It's like we're a Silicon Valley startup flush + * with cash but short on ideas! + * + * We're aiming to make /newroot the real root, and get rid of /oldroot. To do + * that we need a temporary place to store it before we can unmount it. + */ + { cleanup_fd int oldrootfd = open ("/", O_DIRECTORY | O_RDONLY); + if (oldrootfd < 0) + die_with_error ("can't open /"); + if (chdir ("/newroot") != 0) + die_with_error ("chdir /newroot"); + /* While the documentation claims that put_old must be underneath + * new_root, it is perfectly fine to use the same directory as the + * kernel checks only if old_root is accessible from new_root. + * + * Both runc and LXC are using this "alternative" method for + * setting up the root of the container: + * + * https://github.com/opencontainers/runc/blob/master/libcontainer/rootfs_linux.go#L671 + * https://github.com/lxc/lxc/blob/master/src/lxc/conf.c#L1121 + */ + if (pivot_root (".", ".") != 0) + die_with_error ("pivot_root(/newroot)"); + if (fchdir (oldrootfd) < 0) + die_with_error ("fchdir to oldroot"); + if (umount2 (".", MNT_DETACH) < 0) + die_with_error ("umount old root"); + if (chdir ("/") != 0) + die_with_error ("chdir /"); + } + if (opt_unshare_user && - (ns_uid != opt_sandbox_uid || ns_gid != opt_sandbox_gid)) + (ns_uid != opt_sandbox_uid || ns_gid != opt_sandbox_gid) && + opt_userns_block_fd == -1) { /* Now that devpts is mounted and we've no need for mount permissions we can create a new userspace and map our uid @@ -2095,21 +2416,13 @@ -1, FALSE, FALSE); } - /* Now make /newroot the real root */ - if (chdir ("/newroot") != 0) - die_with_error ("chdir newroot"); - if (chroot ("/newroot") != 0) - die_with_error ("chroot /newroot"); - if (chdir ("/") != 0) - die_with_error ("chdir /"); - - /* All privileged ops are done now, so drop it */ - drop_privs (); + /* All privileged ops are done now, so drop caps we don't need */ + drop_privs (!is_privileged); if (opt_block_fd != -1) { char b[1]; - read (opt_block_fd, b, 1); + (void) TEMP_FAILURE_RETRY (read (opt_block_fd, b, 1)); close (opt_block_fd); } @@ -2162,7 +2475,7 @@ __debug__ (("forking for child\n")); - if (opt_unshare_pid || lock_files != NULL || opt_sync_fd != -1) + if (!opt_as_pid_1 && (opt_unshare_pid || lock_files != NULL || opt_sync_fd != -1)) { /* We have to have a pid 1 in the pid namespace, because * otherwise we'll get a bunch of zombies as nothing reaps @@ -2176,6 +2489,8 @@ if (pid != 0) { + drop_all_caps (FALSE); + /* Close fds in pid 1, except stdio and optionally event_fd (for syncing pid 2 lifetime with monitor_child) and opt_sync_fd (for syncing sandbox lifetime with outside @@ -2201,8 +2516,13 @@ if (proc_fd != -1) close (proc_fd); - if (opt_sync_fd != -1) - close (opt_sync_fd); + /* If we are using --as-pid-1 leak the sync fd into the sandbox. + --sync-fd will still work unless the container process doesn't close this file. */ + if (!opt_as_pid_1) + { + if (opt_sync_fd != -1) + close (opt_sync_fd); + } /* We want sigchild in the child */ unblock_sigchild (); @@ -2210,6 +2530,9 @@ /* Optionally bind our lifecycle */ handle_die_with_parent (); + if (!is_privileged) + set_ambient_capabilities (); + /* Should be the last thing before execve() so that filters don't * need to handle anything above */ if (seccomp_data != NULL && diff -Nru flatpak-0.11.3/bubblewrap/utils.c flatpak-1.0.7/bubblewrap/utils.c --- flatpak-0.11.3/bubblewrap/utils.c 2016-11-28 11:25:01.000000000 +0000 +++ flatpak-1.0.7/bubblewrap/utils.c 2018-05-30 12:59:04.000000000 +0000 @@ -29,6 +29,8 @@ va_list args; int errsv; + fprintf (stderr, "bwrap: "); + errsv = errno; va_start (args, format); @@ -45,6 +47,8 @@ { va_list args; + fprintf (stderr, "bwrap: "); + va_start (args, format); vfprintf (stderr, format, args); va_end (args); @@ -430,7 +434,7 @@ /* We check this ahead of time, otherwise the create file will fail in the read-only - case with EROFD instead of EEXIST */ + case with EROFS instead of EEXIST */ if (stat (path, &buf) == 0 && S_ISREG (buf.st_mode)) return 0; @@ -589,6 +593,34 @@ return buf.st_mode & S_IFMT; } +int +ensure_dir (const char *path, + mode_t mode) +{ + struct stat buf; + + /* We check this ahead of time, otherwise + the mkdir call can fail in the read-only + case with EROFS instead of EEXIST on some + filesystems (such as NFS) */ + if (stat (path, &buf) == 0) + { + if (!S_ISDIR (buf.st_mode)) + { + errno = ENOTDIR; + return -1; + } + + return 0; + } + + if (mkdir (path, mode) == -1 && errno != EEXIST) + return -1; + + return 0; +} + + /* Sets errno on error (!= 0) */ int mkdir_with_parents (const char *pathname, @@ -597,7 +629,6 @@ { cleanup_free char *fn = NULL; char *p; - struct stat buf; if (pathname == NULL || *pathname == '\0') { @@ -624,16 +655,8 @@ if (!create_last && p == NULL) break; - if (stat (fn, &buf) != 0) - { - if (mkdir (fn, mode) == -1 && errno != EEXIST) - return -1; - } - else if (!S_ISDIR (buf.st_mode)) - { - errno = ENOTDIR; - return -1; - } + if (ensure_dir (fn, mode) != 0) + return -1; if (p) { diff -Nru flatpak-0.11.3/bubblewrap/utils.h flatpak-1.0.7/bubblewrap/utils.h --- flatpak-0.11.3/bubblewrap/utils.h 2018-02-18 20:38:41.000000000 +0000 +++ flatpak-1.0.7/bubblewrap/utils.h 2018-05-30 12:59:04.000000000 +0000 @@ -101,6 +101,8 @@ const char *content); int ensure_file (const char *path, mode_t mode); +int ensure_dir (const char *path, + mode_t mode); int get_file_mode (const char *pathname); int mkdir_with_parents (const char *pathname, int mode, diff -Nru flatpak-0.11.3/buildutil/glib-tap.mk flatpak-1.0.7/buildutil/glib-tap.mk --- flatpak-0.11.3/buildutil/glib-tap.mk 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/buildutil/glib-tap.mk 2018-10-04 16:21:41.000000000 +0000 @@ -120,7 +120,10 @@ %.test: %$(EXEEXT) Makefile $(AM_V_GEN) (echo '[Test]' > $@.tmp; \ echo 'Type=session' >> $@.tmp; \ - echo 'Exec=env G_TEST_SRCDIR=$(installed_testdir) G_TEST_BUILDDIR=$(installed_testdir) $(installed_testdir)/$(notdir $<) --tap' >> $@.tmp; \ + if [[ $(notdir $<) == *.wrap ]]; then \ + wrapper=$(installed_testdir)/test-wrapper.sh; \ + fi; \ + echo "Exec=env G_TEST_SRCDIR=$(installed_testdir) G_TEST_BUILDDIR=$(installed_testdir) $$wrapper $(installed_testdir)/$(notdir $<) --tap" >> $@.tmp; \ echo 'Output=TAP' >> $@.tmp; \ mv $@.tmp $@) diff -Nru flatpak-0.11.3/buildutil/tap-test flatpak-1.0.7/buildutil/tap-test --- flatpak-0.11.3/buildutil/tap-test 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/buildutil/tap-test 2018-10-03 13:41:21.000000000 +0000 @@ -1,14 +1,12 @@ #! /bin/bash # -# Run a test in tap mode, ensuring we have a temporary directory. We -# always use /var/tmp because we might want to use user xattrs, which -# aren't available on tmpfs. +# Run a test in tap mode, ensuring we have a temporary directory. # # The test binary is passed as $1 srcd=$(cd $(dirname $1) && pwd) bn=$(basename $1) -tempdir=$(mktemp -d /var/tmp/tap-test.XXXXXX) +tempdir=$(mktemp -d /tmp/tap-test.XXXXXX) touch ${tempdir}/.testtmp function cleanup () { if test -n "${TEST_SKIP_CLEANUP:-}"; then @@ -20,4 +18,7 @@ } trap cleanup EXIT cd ${tempdir} -${srcd}/${bn} -k --tap +if [[ $bn == *.wrap ]]; then + WRAPPER=${srcd}/test-wrapper.sh +fi +$WRAPPER ${srcd}/${bn} -k --tap diff -Nru flatpak-0.11.3/common/flatpak-bundle-ref.c flatpak-1.0.7/common/flatpak-bundle-ref.c --- flatpak-0.11.3/common/flatpak-bundle-ref.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-bundle-ref.c 2018-09-12 08:41:11.000000000 +0000 @@ -0,0 +1,351 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-bundle-ref.h" +#include "flatpak-enum-types.h" + +/** + * SECTION:flatpak-bundle-ref + * @Title: FlatpakBundleRef + * @Short_description: Application bundle reference + * + * A FlatpakBundleRef refers to a single-file bundle containing an + * application or runtime. + */ + +typedef struct _FlatpakBundleRefPrivate FlatpakBundleRefPrivate; + +struct _FlatpakBundleRefPrivate +{ + GFile *file; + char *origin; + char *runtime_repo; + GBytes *metadata; + GBytes *appstream; + GBytes *icon_64; + GBytes *icon_128; + guint64 installed_size; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakBundleRef, flatpak_bundle_ref, FLATPAK_TYPE_REF) + +enum { + PROP_0, + + PROP_FILE, +}; + +static void +flatpak_bundle_ref_finalize (GObject *object) +{ + FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + g_clear_object (&priv->file); + + g_bytes_unref (priv->metadata); + g_bytes_unref (priv->appstream); + g_bytes_unref (priv->icon_64); + g_bytes_unref (priv->icon_128); + g_free (priv->origin); + g_free (priv->runtime_repo); + + G_OBJECT_CLASS (flatpak_bundle_ref_parent_class)->finalize (object); +} + +static void +flatpak_bundle_ref_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_FILE: + g_set_object (&priv->file, g_value_get_object (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_bundle_ref_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_FILE: + g_value_set_object (value, priv->file); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_bundle_ref_class_init (FlatpakBundleRefClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_bundle_ref_get_property; + object_class->set_property = flatpak_bundle_ref_set_property; + object_class->finalize = flatpak_bundle_ref_finalize; + + /** + * FlatpakBundleRef:file: + * + * The bundle file that this ref refers to. + */ + g_object_class_install_property (object_class, + PROP_FILE, + g_param_spec_object ("file", + "", + "", + G_TYPE_FILE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); +} + +static void +flatpak_bundle_ref_init (FlatpakBundleRef *self) +{ +} + +/** + * flatpak_bundle_ref_get_file: + * @self: a #FlatpakBundleRef + * + * Get the file this bundle is stored in. + * + * Returns: (transfer full) : an #GFile + */ +GFile * +flatpak_bundle_ref_get_file (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + return g_object_ref (priv->file); +} + +/** + * flatpak_bundle_ref_get_metadata: + * @self: a #FlatpakBundleRef + * + * Get the metadata for the app/runtime + * + * Returns: (transfer full) : an #GBytes with the metadata contents, or %NULL + */ +GBytes * +flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + if (priv->metadata) + return g_bytes_ref (priv->metadata); + return NULL; +} + +/** + * flatpak_bundle_ref_get_appstream: + * @self: a #FlatpakBundleRef + * + * Get the compressed appstream for the app/runtime + * + * Returns: (transfer full) : an #GBytes with the appstream contents, or %NULL + */ +GBytes * +flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + if (priv->appstream) + return g_bytes_ref (priv->appstream); + return NULL; +} + +/** + * flatpak_bundle_ref_get_icon: + * @self: a #FlatpakBundleRef + * @size: 64 or 128 + * + * Get the icon png data for the app/runtime + * + * Returns: (transfer full) : an #GBytes with png contents + */ +GBytes * +flatpak_bundle_ref_get_icon (FlatpakBundleRef *self, + int size) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + if (size == 64 && priv->icon_64) + return g_bytes_ref (priv->icon_64); + + if (size == 128 && priv->icon_128) + return g_bytes_ref (priv->icon_128); + + return NULL; +} + +/** + * flatpak_bundle_ref_get_origin: + * @self: a #FlatpakBundleRef + * + * Get the origin url stored in the bundle + * + * Returns: (transfer full) : an url string, or %NULL + */ +char * +flatpak_bundle_ref_get_origin (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + return g_strdup (priv->origin); +} + + +/** + * flatpak_bundle_ref_get_runtime_repo_url: + * @self: a #FlatpakBundleRef + * + * Get the runtime flatpakrepo url stored in the bundle (if any) + * + * Returns: (transfer full) : an url string, or %NULL + * + * Since: 0.8.0 + */ +char * +flatpak_bundle_ref_get_runtime_repo_url (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + return g_strdup (priv->runtime_repo); +} + +/** + * flatpak_bundle_ref_get_installed_size: + * @self: a FlatpakBundleRef + * + * Returns the installed size for the bundle. + * + * Returns: the installed size + */ +guint64 +flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self) +{ + FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); + + return priv->installed_size; +} + +/** + * flatpak_bundle_ref_new: + * @file: a #GFile + * @error: (allow-none): return location for an error + * + * Creates a new bundle ref for the given file. + * + * Returns: a new bundle ref. + */ +FlatpakBundleRef * +flatpak_bundle_ref_new (GFile *file, + GError **error) +{ + FlatpakRefKind kind = FLATPAK_REF_KIND_APP; + FlatpakBundleRefPrivate *priv; + + g_auto(GStrv) parts = NULL; + FlatpakBundleRef *ref; + g_autoptr(GVariant) metadata = NULL; + g_autofree char *commit = NULL; + g_autofree char *full_ref = NULL; + g_autofree char *origin = NULL; + g_autofree char *runtime_repo = NULL; + g_autofree char *metadata_contents = NULL; + g_autoptr(GVariant) appstream = NULL; + g_autoptr(GVariant) icon_64 = NULL; + g_autoptr(GVariant) icon_128 = NULL; + guint64 installed_size; + g_autofree char *collection_id = NULL; + + metadata = flatpak_bundle_load (file, &commit, &full_ref, &origin, &runtime_repo, &metadata_contents, &installed_size, + NULL, &collection_id, error); + if (metadata == NULL) + return NULL; + + parts = flatpak_decompose_ref (full_ref, error); + if (parts == NULL) + return NULL; + + if (strcmp (parts[0], "app") != 0) + kind = FLATPAK_REF_KIND_RUNTIME; + + ref = g_object_new (FLATPAK_TYPE_BUNDLE_REF, + "kind", kind, + "name", parts[1], + "arch", parts[2], + "branch", parts[3], + "commit", commit, + "file", file, + "collection-id", collection_id, + NULL); + priv = flatpak_bundle_ref_get_instance_private (ref); + + if (metadata_contents) + priv->metadata = g_bytes_new_take (metadata_contents, + strlen (metadata_contents)); + metadata_contents = NULL; /* Stolen */ + + appstream = g_variant_lookup_value (metadata, "appdata", G_VARIANT_TYPE_BYTESTRING); + if (appstream) + priv->appstream = g_variant_get_data_as_bytes (appstream); + + icon_64 = g_variant_lookup_value (metadata, "icon-64", G_VARIANT_TYPE_BYTESTRING); + if (icon_64) + priv->icon_64 = g_variant_get_data_as_bytes (icon_64); + + icon_128 = g_variant_lookup_value (metadata, "icon-128", G_VARIANT_TYPE_BYTESTRING); + if (icon_128) + priv->icon_128 = g_variant_get_data_as_bytes (icon_128); + + priv->installed_size = installed_size; + + priv->origin = g_steal_pointer (&origin); + priv->runtime_repo = g_steal_pointer (&runtime_repo); + + return ref; +} diff -Nru flatpak-0.11.3/common/flatpak-bundle-ref.h flatpak-1.0.7/common/flatpak-bundle-ref.h --- flatpak-0.11.3/common/flatpak-bundle-ref.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-bundle-ref.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,65 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_BUNDLE_REF_H__ +#define __FLATPAK_BUNDLE_REF_H__ + +typedef struct _FlatpakBundleRef FlatpakBundleRef; + +#include +#include + +#define FLATPAK_TYPE_BUNDLE_REF flatpak_bundle_ref_get_type () +#define FLATPAK_BUNDLE_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_BUNDLE_REF, FlatpakBundleRef)) +#define FLATPAK_IS_BUNDLE_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_BUNDLE_REF)) + +FLATPAK_EXTERN GType flatpak_bundle_ref_get_type (void); + +struct _FlatpakBundleRef +{ + FlatpakRef parent; +}; + +typedef struct +{ + FlatpakRefClass parent_class; +} FlatpakBundleRefClass; + +FLATPAK_EXTERN FlatpakBundleRef *flatpak_bundle_ref_new (GFile *file, + GError **error); +FLATPAK_EXTERN GFile *flatpak_bundle_ref_get_file (FlatpakBundleRef *self); +FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self); +FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self); +FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_icon (FlatpakBundleRef *self, + int size); +FLATPAK_EXTERN char *flatpak_bundle_ref_get_origin (FlatpakBundleRef *self); +FLATPAK_EXTERN guint64 flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self); +FLATPAK_EXTERN char *flatpak_bundle_ref_get_runtime_repo_url (FlatpakBundleRef *self); + + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakBundleRef, g_object_unref) +#endif + +#endif /* __FLATPAK_BUNDLE_REF_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-bwrap.c flatpak-1.0.7/common/flatpak-bwrap.c --- flatpak-0.11.3/common/flatpak-bwrap.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-bwrap.c 2019-02-11 12:42:20.000000000 +0000 @@ -32,28 +32,33 @@ #include #include -#include +#include #include #include "libglnx/libglnx.h" -#include "flatpak-bwrap.h" -#include "flatpak-utils.h" +#include "flatpak-bwrap-private.h" +#include "flatpak-utils-private.h" static void clear_fd (gpointer data) { int *fd_p = data; + if (fd_p != NULL && *fd_p != -1) close (*fd_p); } +char *flatpak_bwrap_empty_env[] = { NULL }; + FlatpakBwrap * flatpak_bwrap_new (char **env) { FlatpakBwrap *bwrap = g_new0 (FlatpakBwrap, 1); bwrap->argv = g_ptr_array_new_with_free_func (g_free); + bwrap->noinherit_fds = g_array_new (FALSE, TRUE, sizeof (int)); + g_array_set_clear_func (bwrap->noinherit_fds, clear_fd); bwrap->fds = g_array_new (FALSE, TRUE, sizeof (int)); g_array_set_clear_func (bwrap->fds, clear_fd); @@ -69,15 +74,22 @@ flatpak_bwrap_free (FlatpakBwrap *bwrap) { g_ptr_array_unref (bwrap->argv); + g_array_unref (bwrap->noinherit_fds); g_array_unref (bwrap->fds); g_strfreev (bwrap->envp); g_free (bwrap); } +gboolean +flatpak_bwrap_is_empty (FlatpakBwrap *bwrap) +{ + return bwrap->argv->len == 0; +} + void flatpak_bwrap_set_env (FlatpakBwrap *bwrap, - const char *variable, - const char *value, + const char *variable, + const char *value, gboolean overwrite) { bwrap->envp = g_environ_setenv (bwrap->envp, variable, value, overwrite); @@ -85,12 +97,47 @@ void flatpak_bwrap_unset_env (FlatpakBwrap *bwrap, - const char *variable) + const char *variable) { bwrap->envp = g_environ_unsetenv (bwrap->envp, variable); } void +flatpak_bwrap_add_arg (FlatpakBwrap *bwrap, const char *arg) +{ + g_ptr_array_add (bwrap->argv, g_strdup (arg)); +} + +void +flatpak_bwrap_finish (FlatpakBwrap *bwrap) +{ + g_ptr_array_add (bwrap->argv, NULL); +} + +void +flatpak_bwrap_add_noinherit_fd (FlatpakBwrap *bwrap, + int fd) +{ + g_array_append_val (bwrap->noinherit_fds, fd); +} + +void +flatpak_bwrap_add_fd (FlatpakBwrap *bwrap, + int fd) +{ + g_array_append_val (bwrap->fds, fd); +} + +void +flatpak_bwrap_add_arg_printf (FlatpakBwrap *bwrap, const char *format, ...) +{ + va_list args; + + va_start (args, format); + g_ptr_array_add (bwrap->argv, g_strdup_vprintf (format, args)); + va_end (args); +} +void flatpak_bwrap_add_args (FlatpakBwrap *bwrap, ...) { va_list args; @@ -98,14 +145,14 @@ va_start (args, bwrap); while ((arg = va_arg (args, const gchar *))) - g_ptr_array_add (bwrap->argv, g_strdup (arg)); + flatpak_bwrap_add_arg (bwrap, arg); va_end (args); } void flatpak_bwrap_append_argsv (FlatpakBwrap *bwrap, - char **args, - int len) + char **args, + int len) { int i; @@ -118,22 +165,62 @@ void flatpak_bwrap_append_args (FlatpakBwrap *bwrap, - GPtrArray *other_array) + GPtrArray *other_array) { flatpak_bwrap_append_argsv (bwrap, - (char **)other_array->pdata, + (char **) other_array->pdata, other_array->len); } +static int * +flatpak_bwrap_steal_fds (FlatpakBwrap *bwrap, + gsize *len_out) +{ + gsize len = bwrap->fds->len; + int *res = (int *) g_array_free (bwrap->fds, FALSE); + + bwrap->fds = g_array_new (FALSE, TRUE, sizeof (int)); + *len_out = len; + return res; +} + +void +flatpak_bwrap_append_bwrap (FlatpakBwrap *bwrap, + FlatpakBwrap *other) +{ + g_autofree int *fds = NULL; + gsize n_fds, i; + + fds = flatpak_bwrap_steal_fds (other, &n_fds); + for (i = 0; i < n_fds; i++) + flatpak_bwrap_add_fd (bwrap, fds[i]); + + flatpak_bwrap_append_argsv (bwrap, + (char **) other->argv->pdata, + other->argv->len); + + for (i = 0; other->envp[i] != NULL; i++) + { + char *key_val = other->envp[i]; + char *eq = strchr (key_val, '='); + if (eq) + { + g_autofree char *key = g_strndup (key_val, eq - key_val); + flatpak_bwrap_set_env (bwrap, + key, eq + 1, TRUE); + } + } +} + void flatpak_bwrap_add_args_data_fd (FlatpakBwrap *bwrap, - const char *op, - int fd, - const char *path_optional) + 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_fd (bwrap, fd); flatpak_bwrap_add_args (bwrap, op, fd_str, path_optional, NULL); @@ -147,18 +234,18 @@ */ gboolean flatpak_bwrap_add_args_data (FlatpakBwrap *bwrap, - const char *name, - const char *content, - gssize content_size, - const char *path, - GError **error) + 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); + flatpak_bwrap_add_args_data_fd (bwrap, "--ro-bind-data", glnx_steal_fd (&args_tmpf.fd), path); return TRUE; } @@ -171,9 +258,9 @@ */ void flatpak_bwrap_add_bind_arg (FlatpakBwrap *bwrap, - const char *type, - const char *src, - const char *dest) + 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); @@ -185,3 +272,82 @@ flatpak_bwrap_add_args (bwrap, type, src, dest_real, NULL); } } + +gboolean +flatpak_bwrap_bundle_args (FlatpakBwrap *bwrap, + int start, + int end, + gboolean one_arg, + GError **error) +{ + gchar *data; + gchar *ptr; + gint i; + gsize data_len = 0; + int fd; + + g_auto(GLnxTmpfile) args_tmpf = { 0, }; + + if (end == -1) + end = bwrap->argv->len; + + for (i = start; i < end; i++) + data_len += strlen (bwrap->argv->pdata[i]) + 1; + + data = g_new (gchar, data_len); + *data = 0; + ptr = data; + for (i = start; i < end; i++) + ptr = g_stpcpy (ptr, bwrap->argv->pdata[i]) + 1; + + if (!flatpak_buffer_to_sealed_memfd_or_tmpfile (&args_tmpf, "bwrap-args", data, data_len, error)) + return FALSE; + + fd = glnx_steal_fd (&args_tmpf.fd); + + { + g_autofree char *commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata + start, end - start); + flatpak_debug2 ("bwrap --args %d = %s", fd, commandline); + } + + flatpak_bwrap_add_fd (bwrap, fd); + g_ptr_array_remove_range (bwrap->argv, start, end - start); + if (one_arg) + { + g_ptr_array_insert (bwrap->argv, start, g_strdup_printf ("--args=%d", fd)); + } + else + { + g_ptr_array_insert (bwrap->argv, start, g_strdup ("--args")); + g_ptr_array_insert (bwrap->argv, start + 1, g_strdup_printf ("%d", fd)); + } + + return TRUE; +} + +/* Unset FD_CLOEXEC on the array of fds passed in @user_data */ +void +flatpak_bwrap_child_setup_cb (gpointer user_data) +{ + GArray *fd_array = user_data; + int i; + + /* If no fd_array was specified, don't care. */ + if (fd_array == NULL) + return; + + /* Otherwise, mark not - close-on-exec all the fds in the array */ + for (i = 0; i < fd_array->len; i++) + { + int fd = g_array_index (fd_array, int, i); + + /* We also seek all fds to the start, because this lets + us use the same fd_array multiple times */ + if (lseek (fd, 0, SEEK_SET) < 0) + { + /* Ignore the error, this happens on e.g. pipe fds */ + } + + fcntl (fd, F_SETFD, 0); + } +} diff -Nru flatpak-0.11.3/common/flatpak-bwrap.h flatpak-1.0.7/common/flatpak-bwrap.h --- flatpak-0.11.3/common/flatpak-bwrap.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-bwrap.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -/* - * 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 -Nru flatpak-0.11.3/common/flatpak-bwrap-private.h flatpak-1.0.7/common/flatpak-bwrap-private.h --- flatpak-0.11.3/common/flatpak-bwrap-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-bwrap-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,88 @@ +/* + * 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 *noinherit_fds; /* Just keep these open while the bwrap lives */ + GArray *fds; + GStrv envp; +} FlatpakBwrap; + +extern char *flatpak_bwrap_empty_env[1]; + +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); +gboolean flatpak_bwrap_is_empty (FlatpakBwrap *bwrap); +void flatpak_bwrap_finish (FlatpakBwrap *bwrap); +void flatpak_bwrap_unset_env (FlatpakBwrap *bwrap, + const char *variable); +void flatpak_bwrap_add_arg (FlatpakBwrap *bwrap, + const char *arg); +void flatpak_bwrap_add_noinherit_fd (FlatpakBwrap *bwrap, + int fd); +void flatpak_bwrap_add_fd (FlatpakBwrap *bwrap, + int fd); +void flatpak_bwrap_add_args (FlatpakBwrap *bwrap, + ...); +void flatpak_bwrap_add_arg_printf (FlatpakBwrap *bwrap, + const char *format, + ...) G_GNUC_PRINTF (2, 3); +void flatpak_bwrap_append_argsv (FlatpakBwrap *bwrap, + char **args, + int len); +void flatpak_bwrap_append_bwrap (FlatpakBwrap *bwrap, + FlatpakBwrap *other); /* Steals the fds */ +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); +gboolean flatpak_bwrap_bundle_args (FlatpakBwrap *bwrap, + int start, + int end, + gboolean one_arg, + GError **error); + +void flatpak_bwrap_child_setup_cb (gpointer user_data); + + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakBwrap, flatpak_bwrap_free) + + +#endif /* __FLATPAK_BWRAP_H__ */ diff -Nru flatpak-0.11.3/common/flatpak.c flatpak-1.0.7/common/flatpak.c --- flatpak-0.11.3/common/flatpak.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak.c 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,3 @@ +#include "config.h" + +#include "flatpak-version-macros.h" diff -Nru flatpak-0.11.3/common/flatpak-chain-input-stream.c flatpak-1.0.7/common/flatpak-chain-input-stream.c --- flatpak-0.11.3/common/flatpak-chain-input-stream.c 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-chain-input-stream.c 2018-08-08 14:56:20.000000000 +0000 @@ -20,7 +20,7 @@ #include "config.h" -#include "flatpak-chain-input-stream.h" +#include "flatpak-chain-input-stream-private.h" enum { PROP_0, diff -Nru flatpak-0.11.3/common/flatpak-chain-input-stream.h flatpak-1.0.7/common/flatpak-chain-input-stream.h --- flatpak-0.11.3/common/flatpak-chain-input-stream.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-chain-input-stream.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- - * - * Copyright (C) 2011 Colin Walters - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. - * - */ - -#pragma once - -#ifndef __GI_SCANNER__ - -#include - -G_BEGIN_DECLS - -#define FLATPAK_TYPE_CHAIN_INPUT_STREAM (flatpak_chain_input_stream_get_type ()) -#define FLATPAK_CHAIN_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStream)) -#define FLATPAK_CHAIN_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStreamClass)) -#define FLATPAK_IS_CHAIN_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM)) -#define FLATPAK_IS_CHAIN_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), FLATPAK_TYPE_CHAIN_INPUT_STREAM)) -#define FLATPAK_CHAIN_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStreamClass)) - -typedef struct _FlatpakChainInputStream FlatpakChainInputStream; -typedef struct _FlatpakChainInputStreamClass FlatpakChainInputStreamClass; -typedef struct _FlatpakChainInputStreamPrivate FlatpakChainInputStreamPrivate; - -struct _FlatpakChainInputStream -{ - GInputStream parent_instance; - - /*< private >*/ - FlatpakChainInputStreamPrivate *priv; -}; - -struct _FlatpakChainInputStreamClass -{ - GInputStreamClass parent_class; - - /*< private >*/ - /* Padding for future expansion */ - void (*_g_reserved1) (void); - void (*_g_reserved2) (void); - void (*_g_reserved3) (void); - void (*_g_reserved4) (void); - void (*_g_reserved5) (void); -}; - -GType flatpak_chain_input_stream_get_type (void) G_GNUC_CONST; - -FlatpakChainInputStream * flatpak_chain_input_stream_new (GPtrArray *streams); - -G_END_DECLS - -#endif diff -Nru flatpak-0.11.3/common/flatpak-chain-input-stream-private.h flatpak-1.0.7/common/flatpak-chain-input-stream-private.h --- flatpak-0.11.3/common/flatpak-chain-input-stream-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-chain-input-stream-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,68 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2011 Colin Walters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307, USA. + * + */ + +#pragma once + +#ifndef __GI_SCANNER__ + +#include + +G_BEGIN_DECLS + +#define FLATPAK_TYPE_CHAIN_INPUT_STREAM (flatpak_chain_input_stream_get_type ()) +#define FLATPAK_CHAIN_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStream)) +#define FLATPAK_CHAIN_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStreamClass)) +#define FLATPAK_IS_CHAIN_INPUT_STREAM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM)) +#define FLATPAK_IS_CHAIN_INPUT_STREAM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), FLATPAK_TYPE_CHAIN_INPUT_STREAM)) +#define FLATPAK_CHAIN_INPUT_STREAM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), FLATPAK_TYPE_CHAIN_INPUT_STREAM, FlatpakChainInputStreamClass)) + +typedef struct _FlatpakChainInputStream FlatpakChainInputStream; +typedef struct _FlatpakChainInputStreamClass FlatpakChainInputStreamClass; +typedef struct _FlatpakChainInputStreamPrivate FlatpakChainInputStreamPrivate; + +struct _FlatpakChainInputStream +{ + GInputStream parent_instance; + + /*< private >*/ + FlatpakChainInputStreamPrivate *priv; +}; + +struct _FlatpakChainInputStreamClass +{ + GInputStreamClass parent_class; + + /*< private >*/ + /* Padding for future expansion */ + void (*_g_reserved1) (void); + void (*_g_reserved2) (void); + void (*_g_reserved3) (void); + void (*_g_reserved4) (void); + void (*_g_reserved5) (void); +}; + +GType flatpak_chain_input_stream_get_type (void) G_GNUC_CONST; + +FlatpakChainInputStream * flatpak_chain_input_stream_new (GPtrArray *streams); + +G_END_DECLS + +#endif diff -Nru flatpak-0.11.3/common/flatpak-common-types.h flatpak-1.0.7/common/flatpak-common-types.h --- flatpak-0.11.3/common/flatpak-common-types.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-common-types.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +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_COMMON_TYPES_H__ -#define __FLATPAK_COMMON_TYPES_H__ - -typedef enum { - FLATPAK_KINDS_APP = 1 << 0, - FLATPAK_KINDS_RUNTIME = 1 << 1, -} FlatpakKinds; - -typedef struct FlatpakDir FlatpakDir; -typedef struct FlatpakDeploy FlatpakDeploy; -typedef struct FlatpakOciRegistry FlatpakOciRegistry; -typedef struct _FlatpakOciManifest FlatpakOciManifest; - -#endif /* __FLATPAK_COMMON_TYPES_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-common-types-private.h flatpak-1.0.7/common/flatpak-common-types-private.h --- flatpak-0.11.3/common/flatpak-common-types-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-common-types-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,57 @@ +/* + * 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_COMMON_TYPES_H__ +#define __FLATPAK_COMMON_TYPES_H__ + +typedef enum { + FLATPAK_KINDS_APP = 1 << 0, + FLATPAK_KINDS_RUNTIME = 1 << 1, +} FlatpakKinds; + +typedef enum { + FLATPAK_RUN_FLAG_DEVEL = (1 << 0), + FLATPAK_RUN_FLAG_BACKGROUND = (1 << 1), + FLATPAK_RUN_FLAG_LOG_SESSION_BUS = (1 << 2), + FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS = (1 << 3), + FLATPAK_RUN_FLAG_NO_SESSION_HELPER = (1 << 4), + FLATPAK_RUN_FLAG_MULTIARCH = (1 << 5), + FLATPAK_RUN_FLAG_WRITABLE_ETC = (1 << 6), + FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY = (1 << 7), + FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY = (1 << 8), + FLATPAK_RUN_FLAG_SET_PERSONALITY = (1 << 9), + FLATPAK_RUN_FLAG_FILE_FORWARDING = (1 << 10), + FLATPAK_RUN_FLAG_DIE_WITH_PARENT = (1 << 11), + FLATPAK_RUN_FLAG_LOG_A11Y_BUS = (1 << 12), + FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY = (1 << 13), + FLATPAK_RUN_FLAG_SANDBOX = (1 << 14), + FLATPAK_RUN_FLAG_NO_DOCUMENTS_PORTAL = (1 << 15), + FLATPAK_RUN_FLAG_BLUETOOTH = (1 << 16), + FLATPAK_RUN_FLAG_CANBUS = (1 << 17), + FLATPAK_RUN_FLAG_NO_PROC = (1 << 19), +} FlatpakRunFlags; + +typedef struct FlatpakDir FlatpakDir; +typedef struct FlatpakDeploy FlatpakDeploy; +typedef struct FlatpakOciRegistry FlatpakOciRegistry; +typedef struct _FlatpakOciManifest FlatpakOciManifest; +typedef struct FlatpakCompletion FlatpakCompletion; + +#endif /* __FLATPAK_COMMON_TYPES_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-context.c flatpak-1.0.7/common/flatpak-context.c --- flatpak-0.11.3/common/flatpak-context.c 2018-02-19 12:56:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-context.c 2019-02-11 12:42:20.000000000 +0000 @@ -32,17 +32,17 @@ #include #include -#include +#include #include #include "libglnx/libglnx.h" -#include "flatpak-run.h" +#include "flatpak-run-private.h" #include "flatpak-proxy.h" -#include "flatpak-utils.h" -#include "flatpak-dir.h" -#include "flatpak-systemd-dbus.h" -#include "lib/flatpak-error.h" +#include "flatpak-utils-private.h" +#include "flatpak-dir-private.h" +#include "flatpak-systemd-dbus-generated.h" +#include "flatpak-error.h" /* Same order as enum */ const char *flatpak_context_shares[] = { @@ -59,6 +59,7 @@ "session-bus", "system-bus", "fallback-x11", + "ssh-auth", NULL }; @@ -72,6 +73,8 @@ const char *flatpak_context_features[] = { "devel", "multiarch", + "bluetooth", + "canbus", NULL }; @@ -87,7 +90,7 @@ 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); + g_free, (GDestroyNotify) g_strfreev); return context; } @@ -170,7 +173,7 @@ if (shares == 0) { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_shares); + 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); } @@ -187,7 +190,7 @@ static void flatpak_context_shared_to_args (FlatpakContextShares shares, FlatpakContextShares valid, - GPtrArray *args) + GPtrArray *args) { return flatpak_context_bitmask_to_args (shares, valid, flatpak_context_shares, "--share", "--unshare", args); } @@ -195,7 +198,7 @@ static FlatpakPolicy flatpak_policy_from_string (const char *string, GError **error) { - const char *policies[] = { "none", "see", "filtered", "talk", "own", NULL }; + const char *policies[] = { "none", "see", "talk", "own", NULL }; int i; g_autofree char *values = NULL; @@ -205,7 +208,7 @@ return i; } - values = g_strjoinv (", ", (char **)policies); + 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); @@ -245,7 +248,7 @@ return TRUE; g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - _("Invalid dbus name %s\n"), name); + _("Invalid dbus name %s"), name); return FALSE; } @@ -256,7 +259,7 @@ if (sockets == 0) { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_sockets); + 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); } @@ -273,7 +276,7 @@ static void flatpak_context_sockets_to_args (FlatpakContextSockets sockets, FlatpakContextSockets valid, - GPtrArray *args) + GPtrArray *args) { return flatpak_context_bitmask_to_args (sockets, valid, flatpak_context_sockets, "--socket", "--nosocket", args); } @@ -285,7 +288,7 @@ if (devices == 0) { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_devices); + 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); } @@ -301,7 +304,7 @@ static void flatpak_context_devices_to_args (FlatpakContextDevices devices, FlatpakContextDevices valid, - GPtrArray *args) + GPtrArray *args) { return flatpak_context_bitmask_to_args (devices, valid, flatpak_context_devices, "--device", "--nodevice", args); } @@ -313,7 +316,7 @@ if (feature == 0) { - g_autofree char *values = g_strjoinv (", ", (char **)flatpak_context_features); + 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); } @@ -329,8 +332,8 @@ static void flatpak_context_features_to_args (FlatpakContextFeatures features, - FlatpakContextFeatures valid, - GPtrArray *args) + FlatpakContextFeatures valid, + GPtrArray *args) { return flatpak_context_bitmask_to_args (features, valid, flatpak_context_features, "--allow", "--disallow", args); } @@ -384,16 +387,16 @@ } static void -flatpak_context_add_features (FlatpakContext *context, - FlatpakContextFeatures features) +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) +flatpak_context_remove_features (FlatpakContext *context, + FlatpakContextFeatures features) { context->features_valid |= features; context->features &= ~features; @@ -415,6 +418,23 @@ g_hash_table_insert (context->session_bus_policy, g_strdup (name), GINT_TO_POINTER (policy)); } +GStrv +flatpak_context_get_session_bus_policy_allowed_own_names (FlatpakContext *context) +{ + GHashTableIter iter; + gpointer key, value; + + g_autoptr(GPtrArray) names = g_ptr_array_new_with_free_func (g_free); + + g_hash_table_iter_init (&iter, context->session_bus_policy); + while (g_hash_table_iter_next (&iter, &key, &value)) + if (GPOINTER_TO_INT (value) == FLATPAK_POLICY_OWN) + g_ptr_array_add (names, g_strdup (key)); + + g_ptr_array_add (names, NULL); + return (GStrv) g_ptr_array_free (g_steal_pointer (&names), FALSE); +} + void flatpak_context_set_system_bus_policy (FlatpakContext *context, const char *name, @@ -463,7 +483,7 @@ } static gboolean -get_xdg_dir_from_prefix (const char *prefix, +get_xdg_dir_from_prefix (const char *prefix, const char **where, const char **dir) { @@ -497,7 +517,7 @@ /* 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, +get_xdg_dir_from_string (const char *filesystem, const char **suffix, const char **where) { @@ -641,33 +661,84 @@ } static char * -parse_filesystem_flags (const char *filesystem, FlatpakFilesystemMode *mode) +unparse_filesystem_flags (const char *path, + FlatpakFilesystemMode mode) { - gsize len = strlen (filesystem); + g_autoptr(GString) s = g_string_new (""); + const char *p; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + for (p = path; *p != 0; p++) + { + if (*p == ':') + g_string_append (s, "\\:"); + else if (*p == '\\') + g_string_append (s, "\\\\"); + else + g_string_append_c (s, *p); + } - if (g_str_has_suffix (filesystem, ":ro")) + switch (mode) { - len -= 3; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_ONLY; + case FLATPAK_FILESYSTEM_MODE_READ_ONLY: + g_string_append (s, ":ro"); + break; + + case FLATPAK_FILESYSTEM_MODE_CREATE: + g_string_append (s, ":create"); + break; + + case FLATPAK_FILESYSTEM_MODE_READ_WRITE: + break; + + default: + g_warning ("Unexpected filesystem mode %d", mode); + break; } - else if (g_str_has_suffix (filesystem, ":rw")) + + return g_string_free (g_steal_pointer (&s), FALSE); +} + +static char * +parse_filesystem_flags (const char *filesystem, + FlatpakFilesystemMode *mode_out) +{ + g_autoptr(GString) s = g_string_new (""); + const char *p, *suffix; + FlatpakFilesystemMode mode; + + p = filesystem; + while (*p != 0 && *p != ':') { - len -= 3; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + if (*p == '\\') + { + p++; + if (*p != 0) + g_string_append_c (s, *p++); + } + else + g_string_append_c (s, *p++); } - else if (g_str_has_suffix (filesystem, ":create")) + + mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + + if (*p == ':') { - len -= 7; - if (mode) - *mode = FLATPAK_FILESYSTEM_MODE_CREATE; + suffix = p + 1; + + if (strcmp (suffix, "ro") == 0) + mode = FLATPAK_FILESYSTEM_MODE_READ_ONLY; + else if (strcmp (suffix, "rw") == 0) + mode = FLATPAK_FILESYSTEM_MODE_READ_WRITE; + else if (strcmp (suffix, "create") == 0) + mode = FLATPAK_FILESYSTEM_MODE_CREATE; + else if (*suffix != 0) + g_warning ("Unexpected filesystem suffix %s, ignoring", suffix); } - return g_strndup (filesystem, len); + if (mode_out) + *mode_out = mode; + + return g_string_free (g_steal_pointer (&s), FALSE); } static gboolean @@ -758,11 +829,11 @@ 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; + 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]); + flatpak_context_apply_generic_policy (context, (char *) key, policy_values[i]); } } @@ -1041,14 +1112,26 @@ t = strchr (value, '='); if (t == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE")); + return FALSE; + } 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"); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE")); + return FALSE; + } if (policy_value[0] == '!') - return flatpak_fail (error, "--policy values can't start with \"!\""); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy values can't start with \"!\"")); + return FALSE; + } flatpak_context_apply_generic_policy (context, key, policy_value); @@ -1069,14 +1152,26 @@ t = strchr (value, '='); if (t == NULL) - return flatpak_fail (error, "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE"); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE")); + return FALSE; + } 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"); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE")); + return FALSE; + } if (policy_value[0] == '!') - return flatpak_fail (error, "--policy values can't start with \"!\""); + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + _("--policy values can't start with \"!\"")); + return FALSE; + } extended_value = g_strconcat ("!", policy_value, NULL); @@ -1123,10 +1218,10 @@ { NULL } }; -void -flatpak_context_complete (FlatpakContext *context, FlatpakCompletion *completion) +GOptionEntry * +flatpak_context_get_option_entries (void) { - flatpak_complete_options (completion, context_options); + return context_options; } GOptionGroup * @@ -1176,6 +1271,7 @@ GError **error) { gboolean remove; + g_auto(GStrv) groups = NULL; int i; @@ -1251,7 +1347,7 @@ 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); + FLATPAK_METADATA_KEY_FEATURES, NULL, error); if (features == NULL) return FALSE; @@ -1416,7 +1512,7 @@ FlatpakContextDevices devices_mask = context->devices; FlatpakContextDevices devices_valid = context->devices_valid; FlatpakContextFeatures features_mask = context->features; - FlatpakContextFeatures features_valid = context->features; + FlatpakContextFeatures features_valid = context->features_valid; g_auto(GStrv) groups = NULL; int i; @@ -1425,7 +1521,7 @@ /* 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; @@ -1514,12 +1610,8 @@ { 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)); + if (mode != 0) + g_ptr_array_add (array, unparse_filesystem_flags (key, mode)); else g_ptr_array_add (array, g_strconcat ("!", key, NULL)); } @@ -1597,10 +1689,10 @@ 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_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; + const char **policy_values = (const char **) value; g_autoptr(GPtrArray) new = g_ptr_array_new (); for (i = 0; policy_values[i] != NULL; i++) @@ -1608,7 +1700,7 @@ const char *policy_value = policy_values[i]; if (!flatten || policy_value[0] != '!') - g_ptr_array_add (new, (char *)policy_value); + g_ptr_array_add (new, (char *) policy_value); } if (new->len > 0) @@ -1616,7 +1708,7 @@ 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, + (const char * const *) new->pdata, new->len); } } @@ -1641,7 +1733,7 @@ } gboolean -flatpak_context_allows_features (FlatpakContext *context, +flatpak_context_allows_features (FlatpakContext *context, FlatpakContextFeatures features) { return (context->features & features) == features; @@ -1649,7 +1741,7 @@ void flatpak_context_to_args (FlatpakContext *context, - GPtrArray *args) + GPtrArray *args) { GHashTableIter iter; gpointer key, value; @@ -1661,11 +1753,11 @@ 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_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_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)) @@ -1690,14 +1782,13 @@ { 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)); + if (mode != 0) + { + g_autofree char *fs = unparse_filesystem_flags (key, mode); + g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s", fs)); + } else - g_ptr_array_add (args, g_strdup_printf ("--nofilesystem=%s", (char *)key)); + g_ptr_array_add (args, g_strdup_printf ("--nofilesystem=%s", (char *) key)); } } @@ -1705,33 +1796,85 @@ flatpak_context_add_bus_filters (FlatpakContext *context, const char *app_id, gboolean session_bus, - GPtrArray *dbus_proxy_argv) + FlatpakBwrap *bwrap) { GHashTable *ht; GHashTableIter iter; gpointer key, value; - g_ptr_array_add (dbus_proxy_argv, g_strdup ("--filter")); + flatpak_bwrap_add_arg (bwrap, "--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)); + flatpak_bwrap_add_arg_printf (bwrap, "--own=%s.*", app_id); + flatpak_bwrap_add_arg_printf (bwrap, "--own=org.mpris.MediaPlayer2.%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)); + flatpak_bwrap_add_arg_printf (bwrap, "--%s=%s", + flatpak_policy_to_string (policy), + (char *) key); } } +void +flatpak_context_reset_non_permissions (FlatpakContext *context) +{ + g_hash_table_remove_all (context->env_vars); +} + +void +flatpak_context_reset_permissions (FlatpakContext *context) +{ + context->shares_valid = 0; + context->sockets_valid = 0; + context->devices_valid = 0; + context->features_valid = 0; + + context->shares = 0; + context->sockets = 0; + context->devices = 0; + context->features = 0; + + g_hash_table_remove_all (context->persistent); + g_hash_table_remove_all (context->filesystems); + g_hash_table_remove_all (context->session_bus_policy); + g_hash_table_remove_all (context->system_bus_policy); + g_hash_table_remove_all (context->generic_policy); +} + +void +flatpak_context_make_sandboxed (FlatpakContext *context) +{ + /* We drop almost everything from the app permission, except + * multiarch which is inherited, to make sure app code keeps + * running. */ + context->shares_valid &= 0; + context->sockets_valid &= 0; + context->devices_valid &= 0; + context->features_valid &= FLATPAK_CONTEXT_FEATURE_MULTIARCH; + + context->shares &= context->shares_valid; + context->sockets &= context->sockets_valid; + context->devices &= context->devices_valid; + context->features &= context->features_valid; + + g_hash_table_remove_all (context->persistent); + g_hash_table_remove_all (context->filesystems); + g_hash_table_remove_all (context->session_bus_policy); + g_hash_table_remove_all (context->system_bus_policy); + g_hash_table_remove_all (context->generic_policy); +} + const char *dont_mount_in_root[] = { ".", "..", "lib", "lib32", "lib64", "bin", "sbin", "usr", "boot", "root", "tmp", "etc", "app", "run", "proc", "sys", "dev", "var", NULL @@ -1740,10 +1883,10 @@ static void flatpak_context_export (FlatpakContext *context, FlatpakExports *exports, - GFile *app_id_dir, - gboolean do_create, - GString *xdg_dirs_conf, - gboolean *home_access_out) + GFile *app_id_dir, + gboolean do_create, + GString *xdg_dirs_conf, + gboolean *home_access_out) { gboolean home_access = FALSE; FlatpakFilesystemMode fs_mode, home_mode; @@ -1878,7 +2021,7 @@ FlatpakExports * flatpak_context_get_exports (FlatpakContext *context, - const char *app_id) + const char *app_id) { g_autoptr(FlatpakExports) exports = flatpak_exports_new (); g_autoptr(GFile) app_id_dir = flatpak_get_data_dir (app_id); @@ -1887,11 +2030,31 @@ return g_steal_pointer (&exports); } +FlatpakRunFlags +flatpak_context_get_run_flags (FlatpakContext *context) +{ + FlatpakRunFlags flags = 0; + + if (flatpak_context_allows_features (context, FLATPAK_CONTEXT_FEATURE_DEVEL)) + flags |= FLATPAK_RUN_FLAG_DEVEL; + + if (flatpak_context_allows_features (context, FLATPAK_CONTEXT_FEATURE_MULTIARCH)) + flags |= FLATPAK_RUN_FLAG_MULTIARCH; + + if (flatpak_context_allows_features (context, FLATPAK_CONTEXT_FEATURE_BLUETOOTH)) + flags |= FLATPAK_RUN_FLAG_BLUETOOTH; + + if (flatpak_context_allows_features (context, FLATPAK_CONTEXT_FEATURE_CANBUS)) + flags |= FLATPAK_RUN_FLAG_CANBUS; + + return flags; +} + void -flatpak_context_append_bwrap_filesystem (FlatpakContext *context, - FlatpakBwrap *bwrap, - const char *app_id, - GFile *app_id_dir, +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 (); @@ -1922,19 +2085,20 @@ } } - { - 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)) + if (app_id_dir != 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)) 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 (); diff -Nru flatpak-0.11.3/common/flatpak-context.h flatpak-1.0.7/common/flatpak-context.h --- flatpak-0.11.3/common/flatpak-context.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-context.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -/* - * 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 -Nru flatpak-0.11.3/common/flatpak-context-private.h flatpak-1.0.7/common/flatpak-context-private.h --- flatpak-0.11.3/common/flatpak-context-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-context-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,136 @@ +/* + * 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 +#include "flatpak-exports-private.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 */ + FLATPAK_CONTEXT_SOCKET_SSH_AUTH = 1 << 6, +} 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, + FLATPAK_CONTEXT_FEATURE_BLUETOOTH = 1 << 2, + FLATPAK_CONTEXT_FEATURE_CANBUS = 1 << 3, +} 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); +GOptionEntry *flatpak_context_get_option_entries (void); +GOptionGroup *flatpak_context_get_options (FlatpakContext *context); +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); +GStrv flatpak_context_get_session_bus_policy_allowed_own_names (FlatpakContext *context); +void flatpak_context_set_system_bus_policy (FlatpakContext *context, + const char *name, + FlatpakPolicy policy); +void flatpak_context_to_args (FlatpakContext *context, + GPtrArray *args); +FlatpakRunFlags flatpak_context_get_run_flags (FlatpakContext *context); +void flatpak_context_add_bus_filters (FlatpakContext *context, + const char *app_id, + gboolean session_bus, + FlatpakBwrap *bwrap); + +gboolean flatpak_context_get_needs_session_bus_proxy (FlatpakContext *context); +gboolean flatpak_context_get_needs_system_bus_proxy (FlatpakContext *context); + +void flatpak_context_reset_permissions (FlatpakContext *context); +void flatpak_context_reset_non_permissions (FlatpakContext *context); +void flatpak_context_make_sandboxed (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 -Nru flatpak-0.11.3/common/flatpak-dir.c flatpak-1.0.7/common/flatpak-dir.c --- flatpak-0.11.3/common/flatpak-dir.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-dir.c 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,8 @@ #include #include -#include +#include +#include #include #include @@ -38,19 +39,19 @@ #include #include #include "libglnx/libglnx.h" -#include "lib/flatpak-error.h" +#include "flatpak-error.h" #include -#include "flatpak-dir.h" -#include "flatpak-utils.h" -#include "flatpak-oci-registry.h" -#include "flatpak-run.h" +#include "flatpak-dir-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-oci-registry-private.h" +#include "flatpak-run-private.h" #include "errno.h" #define NO_SYSTEM_HELPER ((FlatpakSystemHelper *) (gpointer) 1) -#define SUMMARY_CACHE_TIMEOUT_SEC 5*60 +#define SUMMARY_CACHE_TIMEOUT_SEC 5 *60 #define SYSCONF_INSTALLATIONS_DIR "installations.d" #define SYSCONF_INSTALLATIONS_FILE_EXT ".conf" @@ -64,14 +65,19 @@ GLnxLockFile *file_lock, GError **error); +static OstreeRepo * flatpak_dir_create_child_repo (FlatpakDir *self, + GFile *cache_dir, + GLnxLockFile *file_lock, + const char *optional_commit, + GError **error); static OstreeRepo * flatpak_dir_create_system_child_repo (FlatpakDir *self, GLnxLockFile *file_lock, - const char *optional_checksum, + const char *optional_commit, GError **error); static gboolean flatpak_dir_mirror_oci (FlatpakDir *self, FlatpakOciRegistry *dst_registry, - const char *remote, + FlatpakRemoteState *state, const char *ref, const char *skip_if_current_is, OstreeAsyncProgress *progress, @@ -85,29 +91,29 @@ GCancellable *cancellable, GError **error); -static GVariant *fetch_remote_summary_file (FlatpakDir *self, - const char *remote, - GBytes **summary_sig_bytes_out, - GCancellable *cancellable, - GError **error); - 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); + +static gboolean flatpak_dir_cleanup_remote_for_url_change (FlatpakDir *self, + const char *remote_name, + const char *url, + GCancellable *cancellable, + GError **error); + +static gboolean _flatpak_dir_fetch_remote_state_metadata_branch (FlatpakDir *self, + FlatpakRemoteState *state, + GCancellable *cancellable, + GError **error); + +static void ensure_soup_session (FlatpakDir *self); typedef struct { GBytes *bytes; GBytes *bytes_sig; - char *remote; - char *url; + char *remote; + char *url; guint64 time; } CachedSummary; @@ -121,19 +127,19 @@ struct FlatpakDir { - GObject parent; + GObject parent; - gboolean user; - GFile *basedir; - DirExtraData *extra_data; - OstreeRepo *repo; - gboolean no_system_helper; + gboolean user; + GFile *basedir; + DirExtraData *extra_data; + OstreeRepo *repo; + gboolean no_system_helper; - FlatpakSystemHelper *system_helper; + GDBusConnection *system_helper_bus; - GHashTable *summary_cache; + GHashTable *summary_cache; - SoupSession *soup_session; + SoupSession *soup_session; }; typedef struct @@ -181,13 +187,273 @@ gsize setup_value = 0; const char *config_dir = g_getenv ("FLATPAK_CONFIG_DIR"); if (config_dir != NULL) - setup_value = (gsize)config_dir; + setup_value = (gsize) config_dir; else - setup_value = (gsize)FLATPAK_CONFIGDIR; + setup_value = (gsize) FLATPAK_CONFIGDIR; g_once_init_leave (&path, setup_value); + } + + return (const char *) path; +} + +static FlatpakRemoteState * +flatpak_remote_state_new (void) +{ + FlatpakRemoteState *state = g_new0 (FlatpakRemoteState, 1); + state->refcount = 1; + return state; +} + +FlatpakRemoteState * +flatpak_remote_state_ref (FlatpakRemoteState *remote_state) +{ + g_assert (remote_state->refcount > 0); + remote_state->refcount++; + return remote_state; +} + +void +flatpak_remote_state_unref (FlatpakRemoteState *remote_state) +{ + g_assert (remote_state->refcount > 0); + remote_state->refcount--; + + if (remote_state->refcount == 0) + { + g_free (remote_state->remote_name); + g_free (remote_state->collection_id); + g_clear_pointer (&remote_state->summary, g_variant_unref); + g_clear_pointer (&remote_state->summary_sig_bytes, g_bytes_unref); + g_clear_error (&remote_state->summary_fetch_error); + g_clear_pointer (&remote_state->metadata, g_variant_unref); + g_clear_error (&remote_state->metadata_fetch_error); + + g_free (remote_state); } +} + +gboolean +flatpak_remote_state_ensure_summary (FlatpakRemoteState *self, + GError **error) +{ + if (self->summary == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Unable to load summary from remote %s: %s"), self->remote_name, + self->summary_fetch_error != NULL ? self->summary_fetch_error->message : "unknown error"); + + return TRUE; +} + +gboolean +flatpak_remote_state_ensure_metadata (FlatpakRemoteState *self, + GError **error) +{ + if (self->metadata == NULL) + { + g_autofree char *error_msg = NULL; + + /* If the collection ID is NULL the metadata comes from the summary */ + if (self->metadata_fetch_error != NULL) + error_msg = g_strdup (self->metadata_fetch_error->message); + else if (self->collection_id == NULL && self->summary_fetch_error != NULL) + error_msg = g_strdup_printf ("summary fetch error: %s", self->summary_fetch_error->message); + + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Unable to load metadata from remote %s: %s"), self->remote_name, + error_msg != NULL ? error_msg : "unknown error"); + } + + return TRUE; +} + +/* Returns TRUE if the ref is found in the summary or cache. out_checksum and + * out_variant are not guaranteed to be set even when the ref is found. */ +gboolean +flatpak_remote_state_lookup_ref (FlatpakRemoteState *self, + const char *ref, + char **out_checksum, + GVariant **out_variant, + GError **error) +{ + if (self->collection_id == NULL || self->summary != NULL) + { + if (!flatpak_remote_state_ensure_summary (self, error)) + return FALSE; + + if (!flatpak_summary_lookup_ref (self->summary, self->collection_id, ref, out_checksum, out_variant)) + { + if (self->collection_id != NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No such ref (%s, %s) in remote %s"), self->collection_id, ref, self->remote_name); + else + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No such ref '%s' in remote %s"), ref, self->remote_name); + return FALSE; + } + } + else + { + if (!flatpak_remote_state_ensure_metadata (self, error)) + return FALSE; + + if (!flatpak_remote_state_lookup_cache (self, ref, NULL, NULL, NULL, error)) + return FALSE; + } + + return TRUE; +} + +char ** +flatpak_remote_state_match_subrefs (FlatpakRemoteState *self, + const char *ref) +{ + if (self->summary == NULL) + { + const char *empty[] = { NULL }; + g_debug ("flatpak_remote_state_match_subrefs with no summary"); + return g_strdupv ((char **) empty); + } + + return flatpak_summary_match_subrefs (self->summary, self->collection_id, ref); +} + + +gboolean +flatpak_remote_state_lookup_repo_metadata (FlatpakRemoteState *self, + const char *key, + const char *format_string, + ...) +{ + g_autoptr(GVariant) value = NULL; + va_list args; + + if (self->metadata == NULL) + return FALSE; + + /* Extract the metadata from it, if set. */ + value = g_variant_lookup_value (self->metadata, key, NULL); + if (value == NULL) + return FALSE; + + if (!g_variant_check_format_string (value, format_string, FALSE)) + return FALSE; + + va_start (args, format_string); + g_variant_get_va (value, format_string, NULL, &args); + va_end (args); + + return TRUE; +} + +gboolean +flatpak_remote_state_lookup_cache (FlatpakRemoteState *self, + const char *ref, + guint64 *download_size, + guint64 *installed_size, + const char **metadata, + GError **error) +{ + g_autoptr(GVariant) cache_v = NULL; + g_autoptr(GVariant) cache = NULL; + g_autoptr(GVariant) res = NULL; + g_autoptr(GVariant) refdata = NULL; + int pos; + + if (!flatpak_remote_state_ensure_metadata (self, error)) + return FALSE; + + cache_v = g_variant_lookup_value (self->metadata, "xa.cache", NULL); + if (cache_v == NULL) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + _("No flatpak cache in remote '%s' summary"), self->remote_name); + return FALSE; + } + + cache = g_variant_get_child_value (cache_v, 0); + + if (!flatpak_variant_bsearch_str (cache, ref, &pos)) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + _("No entry for %s in remote '%s' summary flatpak cache "), ref, self->remote_name); + return FALSE; + } + + refdata = g_variant_get_child_value (cache, pos); + res = g_variant_get_child_value (refdata, 1); + + if (installed_size) + { + guint64 v; + g_variant_get_child (res, 0, "t", &v); + *installed_size = GUINT64_FROM_BE (v); + } + + if (download_size) + { + guint64 v; + g_variant_get_child (res, 1, "t", &v); + *download_size = GUINT64_FROM_BE (v); + } + + if (metadata) + g_variant_get_child (res, 2, "&s", metadata); + + return TRUE; +} - return (const char *)path; +GVariant * +flatpak_remote_state_lookup_sparse_cache (FlatpakRemoteState *self, + const char *ref, + GError **error) +{ + g_autoptr(GVariant) cache = NULL; + int pos; + + if (!flatpak_remote_state_ensure_metadata (self, error)) + return FALSE; + + cache = g_variant_lookup_value (self->metadata, "xa.sparse-cache", NULL); + if (cache != NULL && flatpak_variant_bsearch_str (cache, ref, &pos)) + { + g_autoptr(GVariant) refdata = g_variant_get_child_value (cache, pos); + return g_variant_get_child_value (refdata, 1); + } + + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + _("No entry for %s in remote summary flatpak sparse cache "), ref); + + return FALSE; +} + +static gboolean +flatpak_remote_state_save_summary (FlatpakRemoteState *self, + GFile *dir, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) summary_file = g_file_get_child (dir, "summary"); + g_autoptr(GBytes) summary_bytes = NULL; + + /* For non-p2p case we always require a summary */ + if (!flatpak_remote_state_ensure_summary (self, error)) + return FALSE; + + summary_bytes = g_variant_get_data_as_bytes (self->summary); + + if (!g_file_replace_contents (summary_file, + g_bytes_get_data (summary_bytes, NULL), + g_bytes_get_size (summary_bytes), + NULL, FALSE, 0, NULL, cancellable, error)) + return FALSE; + + if (self->summary_sig_bytes != NULL) + { + g_autoptr(GFile) summary_sig_file = g_file_get_child (dir, "summary.sig"); + if (!g_file_replace_contents (summary_sig_file, + g_bytes_get_data (self->summary_sig_bytes, NULL), + g_bytes_get_size (self->summary_sig_bytes), + NULL, FALSE, 0, NULL, cancellable, error)) + return FALSE; + } + + return TRUE; } static DirExtraData * @@ -197,6 +463,7 @@ FlatpakDirStorageType type) { DirExtraData *dir_extra_data = g_new0 (DirExtraData, 1); + dir_extra_data->id = g_strdup (id); dir_extra_data->display_name = g_strdup (display_name); dir_extra_data->priority = priority; @@ -229,10 +496,11 @@ { gsize size; gconstpointer data; + data = g_bytes_get_data (bytes, &size); g_bytes_ref (bytes); return g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), data, size, - TRUE, (GDestroyNotify)g_bytes_unref, bytes)); + TRUE, (GDestroyNotify) g_bytes_unref, bytes)); } static void @@ -271,7 +539,7 @@ } GVariant * -flatpak_load_deploy_data (GFile *deploy_dir, +flatpak_load_deploy_data (GFile *deploy_dir, GCancellable *cancellable, GError **error) { @@ -301,8 +569,8 @@ GVariant * flatpak_deploy_get_deploy_data (FlatpakDeploy *deploy, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { return flatpak_load_deploy_data (deploy->dir, cancellable, @@ -363,13 +631,13 @@ gsize setup_value = 0; const char *system_dir = g_getenv ("FLATPAK_SYSTEM_DIR"); if (system_dir != NULL) - setup_value = (gsize)system_dir; + setup_value = (gsize) system_dir; else - setup_value = (gsize)FLATPAK_SYSTEMDIR; + setup_value = (gsize) FLATPAK_SYSTEMDIR; g_once_init_leave (&path, setup_value); - } + } - return g_file_new_for_path ((char *)path); + return g_file_new_for_path ((char *) path); } static FlatpakDirStorageType @@ -425,7 +693,7 @@ extra_data = dir_extra_data_new (id, display_name, priority, storage_type); g_object_set_data_full (G_OBJECT (location), "extra-data", extra_data, - (GDestroyNotify)dir_extra_data_free); + (GDestroyNotify) dir_extra_data_free); g_ptr_array_add (locations, location); } @@ -461,11 +729,18 @@ size_t len; if (!g_str_has_prefix (groups[i], "Installation \"")) - continue; + { + if (g_str_has_prefix (groups[i], "Installation ")) + g_warning ("Installation without quotes (%s). Ignoring", groups[i]); + continue; + } id = g_strdup (&groups[i][14]); if (!g_str_has_suffix (id, "\"")) - continue; + { + g_warning ("Installation without closing quote (%s). Ignoring", groups[i]); + continue; + } len = strlen (id); if (len > 0) @@ -508,15 +783,15 @@ ret = TRUE; - out: +out: return ret; } static gint system_locations_compare_func (gconstpointer location_a, gconstpointer location_b) { - const GFile *location_object_a = *(const GFile **)location_a; - const GFile *location_object_b = *(const GFile **)location_b; + const GFile *location_object_a = *(const GFile **) location_a; + const GFile *location_object_b = *(const GFile **) location_b; DirExtraData *extra_data_a = NULL; DirExtraData *extra_data_b = NULL; gint prio_a = 0; @@ -595,7 +870,7 @@ } } - out: +out: return g_steal_pointer (&locations); } @@ -638,7 +913,7 @@ gsize setup_value = 0; setup_value = (gsize) get_system_locations (cancellable, error); g_once_init_leave (&array, setup_value); - } + } return (GPtrArray *) array; } @@ -664,7 +939,7 @@ g_once_init_leave (&file, setup_value); } - return g_object_ref ((GFile *)file); + return g_object_ref ((GFile *) file); } /* This is a cache directory similar to ~/.cache/flatpak/system-cache, @@ -750,71 +1025,82 @@ } static GFile * -flatpak_ensure_oci_summary_cache_dir_location (GError **error) +flatpak_dir_get_oci_cache_file (FlatpakDir *self, + const char *remote, + const char *suffix, + GError **error) { - g_autoptr(GFile) cache_dir = NULL; - g_autoptr(GFile) dir = NULL; - - cache_dir = flatpak_get_user_cache_dir_location (); - dir = g_file_get_child (cache_dir, "oci-summaries"); + g_autoptr(GFile) oci_dir = NULL; + g_autofree char *filename = NULL; - if (g_mkdir_with_parents (flatpak_file_get_path_cached (dir), 0755) != 0) + oci_dir = g_file_get_child (flatpak_dir_get_path (self), "oci"); + if (g_mkdir_with_parents (flatpak_file_get_path_cached (oci_dir), 0755) != 0) { glnx_set_error_from_errno (error); return NULL; } - return g_steal_pointer (&dir); + filename = g_strconcat (remote, suffix, NULL); + return g_file_get_child (oci_dir, filename); } -static FlatpakSystemHelper * -flatpak_dir_get_system_helper (FlatpakDir *self) +static GFile * +flatpak_dir_get_oci_index_location (FlatpakDir *self, + const char *remote, + GError **error) { - g_autoptr(GError) error = NULL; + return flatpak_dir_get_oci_cache_file (self, remote, ".index.gz", error); +} - if (g_once_init_enter (&self->system_helper)) - { - FlatpakSystemHelper *system_helper; - const char *on_session = g_getenv ("FLATPAK_SYSTEM_HELPER_ON_SESSION"); +static GFile * +flatpak_dir_get_oci_summary_location (FlatpakDir *self, + const char *remote, + GError **error) +{ + return flatpak_dir_get_oci_cache_file (self, remote, ".summary", error); +} - /* To ensure reverse mapping */ - flatpak_error_quark (); +static gboolean +flatpak_dir_remove_oci_file (FlatpakDir *self, + const char *remote, + const char *suffix, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) file = flatpak_dir_get_oci_cache_file (self, remote, suffix, error); + g_autoptr(GError) local_error = NULL; - system_helper = - flatpak_system_helper_proxy_new_for_bus_sync (on_session != NULL ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM, - G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | - G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS, - "org.freedesktop.Flatpak.SystemHelper", - "/org/freedesktop/Flatpak/SystemHelper", - NULL, &error); - if (error != NULL) - { - g_warning ("Can't find org.freedesktop.Flatpak.SystemHelper: %s", error->message); - system_helper = NO_SYSTEM_HELPER; - } - else - { - g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (system_helper), G_MAXINT); - } - g_once_init_leave (&self->system_helper, system_helper); + if (file == NULL) + return FALSE; + + if (!g_file_delete (file, cancellable, &local_error) && + !g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; } - if (self->system_helper != NO_SYSTEM_HELPER) - return self->system_helper; - return NULL; + return TRUE; } static gboolean -flatpak_dir_use_system_helper (FlatpakDir *self, - const char *installing_from_remote) +flatpak_dir_remove_oci_files (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error) { - FlatpakSystemHelper *system_helper; - -#ifndef USE_SYSTEM_HELPER - if (TRUE) + if (!flatpak_dir_remove_oci_file (self, remote, ".index.gz", cancellable, error) || + !flatpak_dir_remove_oci_file (self, remote, ".summary", cancellable, error)) return FALSE; -#endif + return TRUE; +} + +static gboolean +flatpak_dir_use_system_helper (FlatpakDir *self, + const char *installing_from_remote) +{ +#ifdef USE_SYSTEM_HELPER if (self->no_system_helper || self->user || getuid () == 0) return FALSE; @@ -822,37 +1108,309 @@ if (installing_from_remote != NULL && flatpak_dir_get_remote_oci (self, installing_from_remote)) return FALSE; - system_helper = flatpak_dir_get_system_helper (self); + return TRUE; +#else + return FALSE; +#endif - return system_helper != NULL; } -static OstreeRepo * -system_ostree_repo_new (GFile *repodir) +static GVariant * +flatpak_dir_system_helper_call (FlatpakDir *self, + const gchar *method_name, + GVariant *parameters, + GCancellable *cancellable, + GError **error) { - g_autofree char *config_dir = NULL; + GVariant *res; - config_dir = g_strdup_printf ("%s/%s", - get_config_dir_location (), - "/remotes.d"); + if (g_once_init_enter (&self->system_helper_bus)) + { + const char *on_session = g_getenv ("FLATPAK_SYSTEM_HELPER_ON_SESSION"); + GDBusConnection *system_helper_bus = + g_bus_get_sync (on_session != NULL ? G_BUS_TYPE_SESSION : G_BUS_TYPE_SYSTEM, + cancellable, NULL); - return g_object_new (OSTREE_TYPE_REPO, "path", repodir, - "remotes-config-dir", - config_dir, - NULL); -} + /* To ensure reverse mapping */ + flatpak_error_quark (); -static void -flatpak_dir_finalize (GObject *object) -{ - FlatpakDir *self = FLATPAK_DIR (object); + g_once_init_leave (&self->system_helper_bus, system_helper_bus ? system_helper_bus : (gpointer) 1 ); + } - g_clear_object (&self->repo); - g_clear_object (&self->basedir); - g_clear_pointer (&self->extra_data, dir_extra_data_free); + if (self->system_helper_bus == (gpointer) 1) + { + flatpak_fail (error, _("Unable to connect to system bus")); + return NULL; + } - if (self->system_helper != NO_SYSTEM_HELPER) - g_clear_object (&self->system_helper); + g_debug ("Calling system helper: %s", method_name); + res = g_dbus_connection_call_sync (self->system_helper_bus, + "org.freedesktop.Flatpak.SystemHelper", + "/org/freedesktop/Flatpak/SystemHelper", + "org.freedesktop.Flatpak.SystemHelper", + method_name, + parameters, + NULL, G_DBUS_CALL_FLAGS_NONE, G_MAXINT, + cancellable, + error); + if (res == NULL && error) + g_dbus_error_strip_remote_error (*error); + + return res; +} + +static gboolean +flatpak_dir_system_helper_call_deploy (FlatpakDir *self, + const gchar *arg_repo_path, + guint arg_flags, + const gchar *arg_ref, + const gchar *arg_origin, + const gchar *const *arg_subpaths, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "Deploy", + g_variant_new ("(^ayuss^ass)", + arg_repo_path, + arg_flags, + arg_ref, + arg_origin, + arg_subpaths, + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_deploy_appstream (FlatpakDir *self, + const gchar *arg_repo_path, + const gchar *arg_origin, + const gchar *arg_arch, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "DeployAppstream", + g_variant_new ("(^aysss)", + arg_repo_path, + arg_origin, + arg_arch, + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_uninstall (FlatpakDir *self, + guint arg_flags, + const gchar *arg_ref, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "Uninstall", + g_variant_new ("(uss)", + arg_flags, + arg_ref, + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_install_bundle (FlatpakDir *self, + const gchar *arg_bundle_path, + guint arg_flags, + const gchar *arg_remote, + const gchar *arg_installation, + gchar **out_ref, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "InstallBundle", + g_variant_new ("(^ayuss)", + arg_bundle_path, + arg_flags, + arg_remote, + arg_installation), + cancellable, error); + if (ret == NULL) + return FALSE; + + g_variant_get (ret, "(s)", out_ref); + return TRUE; +} + +static gboolean +flatpak_dir_system_helper_call_configure_remote (FlatpakDir *self, + guint arg_flags, + const gchar *arg_remote, + const gchar *arg_config, + GVariant *arg_gpg_key, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "ConfigureRemote", + g_variant_new ("(uss@ays)", + arg_flags, + arg_remote, + arg_config, + arg_gpg_key, + arg_installation), + cancellable, + error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_configure (FlatpakDir *self, + guint arg_flags, + const gchar *arg_key, + const gchar *arg_value, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "Configure", + g_variant_new ("(usss)", + arg_flags, + arg_key, + arg_value, + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_update_remote (FlatpakDir *self, + guint arg_flags, + const gchar *arg_remote, + const gchar *arg_installation, + const gchar *arg_summary_path, + const gchar *arg_summary_sig_path, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "UpdateRemote", + g_variant_new ("(uss^ay^ay)", + arg_flags, + arg_remote, + arg_installation, + arg_summary_path, + arg_summary_sig_path), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_remove_local_ref (FlatpakDir *self, + const gchar *arg_remote, + const gchar *arg_ref, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "RemoveLocalRef", + g_variant_new ("(sss)", + arg_remote, + arg_ref, + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_prune_local_repo (FlatpakDir *self, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "PruneLocalRepo", + g_variant_new ("(s)", + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_run_triggers (FlatpakDir *self, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "RunTriggers", + g_variant_new ("(s)", + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_ensure_repo (FlatpakDir *self, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "EnsureRepo", + g_variant_new ("(s)", + arg_installation), + cancellable, error); + return ret != NULL; +} + +static gboolean +flatpak_dir_system_helper_call_update_summary (FlatpakDir *self, + const gchar *arg_installation, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GVariant) ret = + flatpak_dir_system_helper_call (self, "UpdateSummary", + g_variant_new ("(s)", + arg_installation), + cancellable, error); + return ret != NULL; +} + +static OstreeRepo * +system_ostree_repo_new (GFile *repodir) +{ + g_autofree char *config_dir = NULL; + + config_dir = g_strdup_printf ("%s/%s", + get_config_dir_location (), + "/remotes.d"); + + return g_object_new (OSTREE_TYPE_REPO, "path", repodir, + "remotes-config-dir", + config_dir, + NULL); +} + +static void +flatpak_dir_finalize (GObject *object) +{ + FlatpakDir *self = FLATPAK_DIR (object); + + g_clear_object (&self->repo); + g_clear_object (&self->basedir); + g_clear_pointer (&self->extra_data, dir_extra_data_free); + + if (self->system_helper_bus != (gpointer)1) + g_clear_object (&self->system_helper_bus); g_clear_object (&self->soup_session); g_clear_pointer (&self->summary_cache, g_hash_table_unref); @@ -1133,6 +1691,38 @@ return g_key_file_save_to_file (metakey, filename, error); } +gboolean +flatpak_remove_override_keyfile (const char *app_id, + gboolean user, + GError **error) +{ + g_autoptr(GFile) base_dir = NULL; + g_autoptr(GFile) override_dir = NULL; + g_autoptr(GFile) file = NULL; + g_autoptr(GError) local_error = NULL; + + if (user) + base_dir = flatpak_get_user_base_dir_location (); + else + base_dir = flatpak_get_system_default_base_dir_location (); + + override_dir = g_file_get_child (base_dir, "overrides"); + + if (app_id) + file = g_file_get_child (override_dir, app_id); + else + file = g_file_get_child (override_dir, "global"); + + if (!g_file_delete (file, NULL, &local_error) && + !g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + return TRUE; +} + /* Note: passing a checksum only works here for non-sub-set deploys, not e.g. a partial locale install, because it will not find the real deploy directory. This is ok for now, because checksum is only @@ -1156,8 +1746,12 @@ deploy_dir = flatpak_dir_get_if_deployed (self, ref, checksum, cancellable); if (deploy_dir == NULL) { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - _("%s not installed"), ref); + if (checksum == NULL) + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, + _("%s not installed"), ref); + else + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, + _("%s (commit %s) not installed"), ref, checksum); return NULL; } @@ -1215,8 +1809,8 @@ } char * -flatpak_dir_get_deploy_subdir (FlatpakDir *self, - const char *checksum, +flatpak_dir_get_deploy_subdir (FlatpakDir *self, + const char *checksum, const char * const * subpaths) { if (subpaths == NULL || *subpaths == NULL) @@ -1347,7 +1941,40 @@ return alt_id; } -/** +const char * +flatpak_deploy_data_get_eol (GVariant *deploy_data) +{ + g_autoptr(GVariant) metadata = g_variant_get_child_value (deploy_data, 4); + const char *eol = NULL; + + g_variant_lookup (metadata, "eol", "&s", &eol); + + return eol; +} + +const char * +flatpak_deploy_data_get_eol_rebase (GVariant *deploy_data) +{ + g_autoptr(GVariant) metadata = g_variant_get_child_value (deploy_data, 4); + const char *eol = NULL; + + g_variant_lookup (metadata, "eolr", "&s", &eol); + + return eol; +} + +const char * +flatpak_deploy_data_get_runtime (GVariant *deploy_data) +{ + g_autoptr(GVariant) metadata = g_variant_get_child_value (deploy_data, 4); + const char *runtime = NULL; + + g_variant_lookup (metadata, "runtime", "&s", &runtime); + + return runtime; +} + +/* * flatpak_deploy_data_get_subpaths: * * Returns: (array length=length zero-terminated=1) (transfer container): an array of constant strings @@ -1580,11 +2207,12 @@ /* Warning: This is not threadsafe, don't use in libflatpak */ gboolean flatpak_dir_recreate_repo (FlatpakDir *self, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { gboolean res; OstreeRepo *old_repo = g_steal_pointer (&self->repo); + res = flatpak_dir_ensure_repo (self, cancellable, error); g_clear_object (&old_repo); return res; @@ -1599,109 +2227,158 @@ 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 (self->repo != NULL) + return TRUE; + + if (!g_file_query_exists (self->basedir, cancellable)) { - if (!flatpak_dir_ensure_path (self, cancellable, &my_error)) + if (flatpak_dir_use_system_helper (self, NULL)) { - if (allow_empty) - return TRUE; + g_autoptr(GError) local_error = NULL; + const char *installation = flatpak_dir_get_id (self); - g_propagate_error (error, g_steal_pointer (&my_error)); - return FALSE; - } + if (!flatpak_dir_system_helper_call_ensure_repo (self, + installation ? installation : "", + NULL, &local_error)) + { + if (allow_empty) + return TRUE; - repodir = g_file_get_child (self->basedir, "repo"); - if (self->no_system_helper || self->user || getuid () == 0) - { - repo = system_ostree_repo_new (repodir); + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } } else { - g_autoptr(GFile) cache_dir = NULL; - g_autofree char *cache_path = NULL; + g_autoptr(GError) local_error = NULL; + if (!flatpak_dir_ensure_path (self, cancellable, &local_error)) + { + if (allow_empty) + return TRUE; - repo = system_ostree_repo_new (repodir); - use_helper = TRUE; + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + } - cache_dir = flatpak_ensure_user_cache_dir_location (error); - if (cache_dir == NULL) - return FALSE; + repodir = g_file_get_child (self->basedir, "repo"); - cache_path = g_file_get_path (cache_dir); - if (!ostree_repo_set_cache_dir (repo, - AT_FDCWD, cache_path, - cancellable, error)) - return FALSE; - } + if (flatpak_dir_use_system_helper (self, NULL)) + { + g_autoptr(GFile) cache_dir = NULL; + g_autofree char *cache_path = NULL; - if (!g_file_query_exists (repodir, cancellable)) - { - OstreeRepoMode mode = OSTREE_REPO_MODE_BARE_USER_ONLY; - const char *mode_env = g_getenv ("FLATPAK_OSTREE_REPO_MODE"); + repo = system_ostree_repo_new (repodir); - if (g_strcmp0 (mode_env, "user-only") == 0) - mode = OSTREE_REPO_MODE_BARE_USER_ONLY; - if (g_strcmp0 (mode_env, "user") == 0) - mode = OSTREE_REPO_MODE_BARE_USER; + cache_dir = flatpak_ensure_user_cache_dir_location (error); + if (cache_dir == NULL) + return FALSE; - if (!ostree_repo_create (repo, mode, cancellable, &my_error)) - { - flatpak_rm_rf (repodir, cancellable, NULL); + cache_path = g_file_get_path (cache_dir); + if (!ostree_repo_set_cache_dir (repo, + AT_FDCWD, cache_path, + cancellable, error)) + return FALSE; + } + else if (self->user) + repo = ostree_repo_new (repodir); + else + repo = system_ostree_repo_new (repodir); - if (allow_empty) - return TRUE; + if (!g_file_query_exists (repodir, cancellable)) + { + /* We always use bare-user-only these days, except old installations + that still user bare-user */ + OstreeRepoMode mode = OSTREE_REPO_MODE_BARE_USER_ONLY; - g_propagate_error (error, g_steal_pointer (&my_error)); - return FALSE; - } + if (!ostree_repo_create (repo, mode, cancellable, &my_error)) + { + flatpak_rm_rf (repodir, cancellable, NULL); - /* Create .changes file early to avoid polling non-existing file in monitor */ - if (!flatpak_dir_mark_changed (self, &my_error)) - { - g_warning ("Error marking directory as changed: %s", my_error->message); - g_clear_error (&my_error); - } + if (allow_empty) + return TRUE; + + g_propagate_error (error, g_steal_pointer (&my_error)); + return FALSE; } - else + + /* Create .changes file early to avoid polling non-existing file in monitor */ + if (!flatpak_dir_mark_changed (self, &my_error)) { - if (!ostree_repo_open (repo, cancellable, error)) - { - g_autofree char *repopath = NULL; + g_warning ("Error marking directory as changed: %s", my_error->message); + g_clear_error (&my_error); + } + } + else + { + if (!ostree_repo_open (repo, cancellable, error)) + { + g_autofree char *repopath = NULL; - repopath = g_file_get_path (repodir); - g_prefix_error (error, _("While opening repository %s: "), repopath); - return FALSE; - } + repopath = g_file_get_path (repodir); + g_prefix_error (error, _("While opening repository %s: "), repopath); + return FALSE; } + } - /* Reset min-free-space-percent to 0, this keeps being a problem for a lot of people */ - if (!use_helper) - { - GKeyFile *orig_config = NULL; - g_autofree char *orig_min_free_space_percent = NULL; + /* Earlier flatpak used to reset min-free-space-percent to 0 everytime, but now we + * favor min-free-space-size instead of it (See below). + */ + if (!flatpak_dir_use_system_helper (self, NULL)) + { + GKeyFile *orig_config = NULL; + g_autoptr(GKeyFile) new_config = NULL; + g_autofree char *orig_min_free_space_percent = NULL; + g_autofree char *orig_min_free_space_size = NULL; + const char *min_free_space_size = "500MB"; + guint64 min_free_space_percent_int; - orig_config = ostree_repo_get_config (repo); - orig_min_free_space_percent = g_key_file_get_value (orig_config, "core", "min-free-space-percent", NULL); - if (orig_min_free_space_percent == NULL) - { - GKeyFile *config = ostree_repo_copy_config (repo); + orig_config = ostree_repo_get_config (repo); + orig_min_free_space_percent = g_key_file_get_value (orig_config, "core", "min-free-space-percent", NULL); + orig_min_free_space_size = g_key_file_get_value (orig_config, "core", "min-free-space-size", NULL); - g_key_file_set_string (config, "core", "min-free-space-percent", "0"); - if (!ostree_repo_write_config (repo, config, error)) - return FALSE; + if (orig_min_free_space_size == NULL) + new_config = ostree_repo_copy_config (repo); - if (!ostree_repo_reload_config (repo, cancellable, error)) - return FALSE; + /* Scrap previously written min-free-space-percent=0 and replace it with min-free-space-size */ + if (orig_min_free_space_size == NULL && + orig_min_free_space_percent != NULL && + flatpak_utils_ascii_string_to_unsigned (orig_min_free_space_percent, 10, + 0, G_MAXUINT64, + &min_free_space_percent_int, &my_error)) + { + if (min_free_space_percent_int == 0) + { + g_key_file_remove_key (new_config, "core", "min-free-space-percent", NULL); + g_key_file_set_string (new_config, "core", "min-free-space-size", min_free_space_size); } } + else if (my_error != NULL) + { + g_propagate_error (error, g_steal_pointer (&my_error)); + return FALSE; + } + + if (orig_min_free_space_size == NULL && + orig_min_free_space_percent == NULL) + g_key_file_set_string (new_config, "core", "min-free-space-size", min_free_space_size); - /* Make sure we didn't reenter weirdly */ - g_assert (self->repo == NULL); - self->repo = g_object_ref (repo); + if (new_config != NULL) + { + if (!ostree_repo_write_config (repo, new_config, error)) + return FALSE; + + if (!ostree_repo_reload_config (repo, cancellable, error)) + return FALSE; + } } + /* Make sure we didn't reenter weirdly */ + g_assert (self->repo == NULL); + self->repo = g_object_ref (repo); + return TRUE; } @@ -1738,29 +2415,24 @@ const char *value, GError **error) { - GKeyFile *config = ostree_repo_copy_config (self->repo); + g_autoptr(GKeyFile) config = ostree_repo_copy_config (self->repo); g_autofree char *ostree_key = g_strconcat ("xa.", key, NULL); if (flatpak_dir_use_system_helper (self, NULL)) { - FlatpakSystemHelper *system_helper; FlatpakHelperConfigureFlags flags = 0; const char *installation = flatpak_dir_get_id (self); - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - if (value == NULL) - { - flags |= FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET; - value = ""; - } - - g_debug ("Calling system helper: Configure"); - if (!flatpak_system_helper_call_configure_sync (system_helper, - flags, key, value, - installation ? installation : "", - NULL, error)) + { + flags |= FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET; + value = ""; + } + + if (!flatpak_dir_system_helper_call_configure (self, + flags, key, value, + installation ? installation : "", + NULL, error)) return FALSE; return TRUE; @@ -1785,10 +2457,19 @@ GError **error) { g_autoptr(GFile) changed_file = NULL; + g_autofree char * changed_path = NULL; changed_file = flatpak_dir_get_changed_path (self); + changed_path = g_file_get_path (changed_file); + + if (!g_utime (changed_path, NULL)) + return TRUE; + + if (errno != ENOENT) + return glnx_throw_errno (error); + if (!g_file_replace_contents (changed_file, "", 0, NULL, FALSE, - G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, error)) + G_FILE_CREATE_NONE, NULL, NULL, error)) return FALSE; return TRUE; @@ -1817,12 +2498,12 @@ } gboolean -flatpak_dir_deploy_appstream (FlatpakDir *self, - const char *remote, - const char *arch, - gboolean *out_changed, - GCancellable *cancellable, - GError **error) +flatpak_dir_deploy_appstream (FlatpakDir *self, + const char *remote, + const char *arch, + gboolean *out_changed, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) appstream_dir = NULL; g_autoptr(GFile) remote_dir = NULL; @@ -1846,6 +2527,7 @@ g_autoptr(GFileInfo) file_info = NULL; g_autofree char *tmpname = g_strdup (".active-XXXXXX"); g_auto(GLnxLockFile) lock = { 0, }; + gboolean do_compress = FALSE; /* Keep a shared repo lock to avoid prunes removing objects we're relying on * while we do the checkout. This could happen if the ref changes after we @@ -1876,11 +2558,28 @@ if (file_info != NULL) old_checksum = g_file_info_get_symlink_target (file_info); - branch = g_strdup_printf ("appstream/%s", arch); + branch = g_strdup_printf ("appstream2/%s", arch); remote_and_branch = g_strdup_printf ("%s:%s", remote, branch); if (!ostree_repo_resolve_rev (self->repo, remote_and_branch, TRUE, &new_checksum, error)) return FALSE; + if (new_checksum == NULL) + { + /* Fall back to old branch */ + g_clear_pointer (&branch, g_free); + g_clear_pointer (&remote_and_branch, g_free); + branch = g_strdup_printf ("appstream/%s", arch); + remote_and_branch = g_strdup_printf ("%s:%s", remote, branch); + if (!ostree_repo_resolve_rev (self->repo, remote_and_branch, TRUE, &new_checksum, error)) + return FALSE; + do_compress = FALSE; + } + else + do_compress = TRUE; + + if (new_checksum == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No appstream commit to deploy")); + real_checkout_dir = g_file_get_child (arch_dir, new_checksum); checkout_exists = g_file_query_exists (real_checkout_dir, NULL); @@ -1921,6 +2620,31 @@ cancellable, error)) return FALSE; + if (do_compress) + { + g_autoptr(GFile) appstream_xml = g_file_get_child (checkout_dir, "appstream.xml"); + g_autoptr(GFile) appstream_gz_xml = g_file_get_child (checkout_dir, "appstream.xml.gz"); + g_autoptr(GZlibCompressor) compressor = NULL; + g_autoptr(GOutputStream) out2 = NULL; + g_autoptr(GFileOutputStream) out = NULL; + g_autoptr(GFileInputStream) in = NULL; + + in = g_file_read (appstream_xml, NULL, NULL); + if (in) + { + compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); + out = g_file_replace (appstream_gz_xml, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, + NULL, error); + if (out == NULL) + return FALSE; + + out2 = g_converter_output_stream_new (G_OUTPUT_STREAM (out), G_CONVERTER (compressor)); + if (g_output_stream_splice (out2, G_INPUT_STREAM (in), G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, + NULL, error) < 0) + return FALSE; + } + } + glnx_gen_temp_name (tmpname); active_tmp_link = g_file_get_child (arch_dir, tmpname); @@ -1977,53 +2701,47 @@ return TRUE; } -static gboolean -repo_get_remote_collection_id (OstreeRepo *repo, - const char *remote_name, - char **collection_id_out, - GError **error); +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, + FlatpakRemoteState *state, 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) + if (state->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_ref = { state->collection_id, (char *) ref }; OstreeCollectionRef *collection_refs_to_fetch[2] = { &collection_ref, NULL }; gsize i; + g_autoptr(GMainContextPopDefault) context = NULL; /* Find options */ g_variant_builder_init (&find_builder, G_VARIANT_TYPE ("a{sv}")); @@ -2036,19 +2754,19 @@ find_options = g_variant_ref_sink (g_variant_builder_end (&find_builder)); - context = g_main_context_new (); - g_main_context_push_thread_default (context); + context = flatpak_main_context_new_default (); ostree_repo_find_remotes_async (self->repo, (const OstreeCollectionRef * const *) collection_refs_to_fetch, find_options, - NULL /* default finders */, - NULL /* no progress reporting */, + 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; @@ -2057,8 +2775,8 @@ 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); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No such ref (%s, %s) in remote %s or elsewhere"), + collection_ref.collection_id, collection_ref.ref_name, state->remote_name); return FALSE; } @@ -2067,17 +2785,18 @@ 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); + flatpak_remote_state_lookup_ref (state, ref, &latest_rev, NULL, error); if (latest_rev == NULL) - return FALSE; - + { + if (error != NULL && *error == NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + return FALSE; + } + if (out_rev != NULL) *out_rev = g_steal_pointer (&latest_rev); } @@ -2085,54 +2804,502 @@ return TRUE; } +FlatpakDirResolve * +flatpak_dir_resolve_new (const char *remote, + const char *ref, + const char *opt_commit) +{ + FlatpakDirResolve *resolve = g_new0 (FlatpakDirResolve, 1); + + resolve->remote = g_strdup (remote); + resolve->ref = g_strdup (ref); + resolve->opt_commit = g_strdup (opt_commit); + return resolve; +} + +void +flatpak_dir_resolve_free (FlatpakDirResolve *resolve) +{ + if (resolve) + { + g_free (resolve->remote); + g_free (resolve->ref); + g_free (resolve->opt_commit); + g_free (resolve->resolved_commit); + g_bytes_unref (resolve->resolved_metadata); + g_free (resolve); + } +} + +static const char * +find_latest_p2p_result (OstreeRepoFinderResult **results, OstreeCollectionRef *cr) +{ + const char *latest_rev = NULL; + int i; + + for (i = 0; results[i] != NULL && latest_rev == NULL; i++) + latest_rev = g_hash_table_lookup (results[i]->ref_to_checksum, cr); + + return latest_rev; +} + +static void +remove_ref_from_p2p_results (OstreeRepoFinderResult **results, OstreeCollectionRef *cr) +{ + int i; + + for (i = 0; results[i] != NULL; i++) + g_hash_table_remove (results[i]->ref_to_checksum, cr); +} + +typedef struct +{ + FlatpakDirResolve *resolve; /* not owned */ + OstreeCollectionRef collection_ref; /* owns the collection_id member only */ + char *local_commit; +} FlatpakDirResolveData; + +static void +flatpak_dir_resolve_data_free (FlatpakDirResolveData *data) +{ + if (data == NULL) + return; + + g_free (data->collection_ref.collection_id); + g_free (data->local_commit); + g_free (data); +} + +static gboolean +flatpak_dir_do_resolve_p2p_refs (FlatpakDir *self, + FlatpakDirResolveData **datas, + gboolean with_commit_ids, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) collection_refs_to_fetch = g_ptr_array_new (); + g_autoptr(GPtrArray) commit_ids_to_fetch = NULL; + g_autoptr(GAsyncResult) find_result = NULL; + g_auto(OstreeRepoFinderResultv) results = NULL; + g_autoptr(GVariant) find_options = NULL; + g_auto(GVariantBuilder) find_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; + GVariantBuilder pull_builder; + g_autoptr(GVariant) pull_options = NULL; + g_autoptr(GAsyncResult) pull_result = NULL; + g_autoptr(GMainContextPopDefault) main_context = NULL; + g_autoptr(FlatpakRepoTransaction) transaction = NULL; + g_autoptr(OstreeRepo) child_repo = NULL; + g_auto(GLnxLockFile) child_repo_lock = { 0, }; + g_autoptr(GFile) user_cache_dir = NULL; + g_autoptr(FlatpakTempDir) child_repo_tmp_dir = NULL; + int i; + + main_context = flatpak_main_context_new_default (); + + if (with_commit_ids) + commit_ids_to_fetch = g_ptr_array_new (); + + for (i = 0; datas[i] != NULL; i++) + { + FlatpakDirResolveData *data = datas[i]; + FlatpakDirResolve *resolve = data->resolve; + + g_ptr_array_add (collection_refs_to_fetch, &data->collection_ref); + if (commit_ids_to_fetch) + { + g_assert (resolve->opt_commit != NULL); + g_ptr_array_add (commit_ids_to_fetch, resolve->opt_commit); + } + } + + g_ptr_array_add (collection_refs_to_fetch, NULL); + + g_variant_builder_init (&find_builder, G_VARIANT_TYPE ("a{sv}")); + if (commit_ids_to_fetch) + g_variant_builder_add (&find_builder, "{s@v}", "override-commit-ids", + g_variant_new_variant (g_variant_new_strv ((const char * const *) commit_ids_to_fetch->pdata, + commit_ids_to_fetch->len))); + find_options = g_variant_ref_sink (g_variant_builder_end (&find_builder)); + + /* We create a temporary child repo in the user homedir so that we can just blow it away when we're done. + * This lets us always write to the directory in the system-helper case, but also lets us properly clean up + * the transaction state directory, as that doesn't happen on abort. */ + user_cache_dir = flatpak_ensure_user_cache_dir_location (error); + if (user_cache_dir == NULL) + return FALSE; + + child_repo = flatpak_dir_create_child_repo (self, user_cache_dir, &child_repo_lock, NULL, error); + if (child_repo == NULL) + return FALSE; + + /* Ensure we clean up the child repo */ + child_repo_tmp_dir = g_object_ref (ostree_repo_get_path (child_repo)); + + ostree_repo_find_remotes_async (child_repo, + (const OstreeCollectionRef * const *) collection_refs_to_fetch->pdata, + find_options, + NULL /* default finders */, + NULL /* no progress reporting */, + cancellable, async_result_cb, &find_result); + + while (find_result == NULL) + g_main_context_iteration (main_context, TRUE); + + results = ostree_repo_find_remotes_finish (child_repo, find_result, error); + if (results == NULL) + return FALSE; + + /* Drop from the results all ops that are no-op updates */ + for (i = 0; datas[i] != NULL; i++) + { + FlatpakDirResolveData *data = datas[i]; + FlatpakDirResolve *resolve = data->resolve; + const char *latest_rev = NULL; + + if (data->local_commit == NULL) + continue; + + latest_rev = find_latest_p2p_result (results, &data->collection_ref); + if (g_strcmp0 (latest_rev, data->local_commit) == 0) + { + g_autoptr(GVariant) commit_data = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + const char *xa_metadata = NULL; + + /* We already have the latest commit, so resolve it from + * the local commit and remove from all results. This way we + * avoid pulling this ref from all remotes. */ + + if (!ostree_repo_load_commit (child_repo, data->local_commit, &commit_data, NULL, NULL)) + return FALSE; + + resolve->resolved_commit = g_strdup (data->local_commit); + commit_metadata = g_variant_get_child_value (commit_data, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_message ("Warning: No xa.metadata in commit %s ref %s", resolve->resolved_commit, resolve->ref); + else + resolve->resolved_metadata = g_bytes_new (xa_metadata, strlen (xa_metadata) + 1); + + remove_ref_from_p2p_results (results, &data->collection_ref); + } + } + + g_variant_builder_init (&pull_builder, G_VARIANT_TYPE ("a{sv}")); + g_variant_builder_add (&pull_builder, "{s@v}", "flags", + g_variant_new_variant (g_variant_new_int32 (OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY))); + g_variant_builder_add (&pull_builder, "{s@v}", "inherit-transaction", + g_variant_new_variant (g_variant_new_boolean (TRUE))); + pull_options = g_variant_ref_sink (g_variant_builder_end (&pull_builder)); + + transaction = flatpak_repo_transaction_start (child_repo, cancellable, error); + if (transaction == NULL) + return FALSE; + + ostree_repo_pull_from_remotes_async (child_repo, (const OstreeRepoFinderResult * const *) results, + pull_options, NULL, + cancellable, async_result_cb, + &pull_result); + + while (pull_result == NULL) + g_main_context_iteration (main_context, TRUE); + + if (!ostree_repo_pull_from_remotes_finish (child_repo, pull_result, error)) + return FALSE; + + for (i = 0; datas[i] != NULL; i++) + { + FlatpakDirResolveData *data = datas[i]; + FlatpakDirResolve *resolve = data->resolve; + g_autoptr(GVariant) commit_data = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + g_autofree char *refspec = NULL; + const char *xa_metadata = NULL; + + if (resolve->resolved_commit != NULL) + continue; + + refspec = g_strdup_printf ("%s:%s", resolve->remote, resolve->ref); + if (!ostree_repo_resolve_rev (child_repo, refspec, FALSE, &resolve->resolved_commit, error)) + return FALSE; + + if (!ostree_repo_load_commit (child_repo, resolve->resolved_commit, &commit_data, NULL, error)) + return FALSE; + + commit_metadata = g_variant_get_child_value (commit_data, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_message ("Warning: No xa.metadata in commit %s ref %s", resolve->resolved_commit, resolve->ref); + else + resolve->resolved_metadata = g_bytes_new (xa_metadata, strlen (xa_metadata) + 1); + } + + return TRUE; +} + gboolean -flatpak_dir_check_for_appstream_update (FlatpakDir *self, - const char *remote, - const char *arch) +flatpak_dir_resolve_p2p_refs (FlatpakDir *self, + FlatpakDirResolve **resolves, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) latest_resolves = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_dir_resolve_data_free); + g_autoptr(GPtrArray) specific_resolves = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_dir_resolve_data_free); + int i; + + for (i = 0; resolves[i] != NULL; i++) + { + FlatpakDirResolve *resolve = resolves[i]; + FlatpakDirResolveData *data = g_new0 (FlatpakDirResolveData, 1); + g_autofree char *refspec = g_strdup_printf ("%s:%s", resolve->remote, resolve->ref); + + g_assert (resolve->ref != NULL); + g_assert (resolve->remote != NULL); + + data->resolve = resolve; + data->collection_ref.ref_name = resolve->ref; + data->collection_ref.collection_id = flatpak_dir_get_remote_collection_id (self, resolve->remote); + + g_assert (data->collection_ref.collection_id != NULL); + + if (resolve->opt_commit == NULL) + ostree_repo_resolve_rev (self->repo, refspec, TRUE, &data->local_commit, NULL); + + /* The ostree p2p api doesn't let you mix pulls with specific commit IDs + * and HEAD (https://github.com/ostreedev/ostree/issues/1622) so we need + * to split these into two pull ops */ + if (resolve->opt_commit) + g_ptr_array_add (specific_resolves, data); + else + g_ptr_array_add (latest_resolves, data); + } + + if (specific_resolves->len > 0) + { + g_ptr_array_add (specific_resolves, NULL); + if (!flatpak_dir_do_resolve_p2p_refs (self, (FlatpakDirResolveData **) specific_resolves->pdata, TRUE, + cancellable, error)) + return FALSE; + } + + if (latest_resolves->len > 0) + { + g_ptr_array_add (latest_resolves, NULL); + if (!flatpak_dir_do_resolve_p2p_refs (self, (FlatpakDirResolveData **) latest_resolves->pdata, FALSE, + cancellable, error)) + return FALSE; + } + + return TRUE; +} + +static gboolean +child_repo_ensure_summary (OstreeRepo *child_repo, + FlatpakRemoteState *state, + GCancellable *cancellable, + GError **error) +{ + if (state->collection_id != NULL) + { + /* Regenerate the summary in the child repo because the summary copied + * into the repo by flatpak_dir_pull() 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. It's also possible that + * ostree didn't copy the remote summary into the repo at all if the + * "branches" key is set in the remote config. See + * https://github.com/ostreedev/ostree/issues/1461 */ + if (!ostree_repo_regenerate_summary (child_repo, NULL, cancellable, error)) + return FALSE; + } + else + { + if (!flatpak_remote_state_save_summary (state, ostree_repo_get_path (child_repo), + cancellable, error)) + return FALSE; + } + + return TRUE; +} + +static gboolean +get_mtime (GFile *file, + GTimeVal *result, + GCancellable *cancellable) +{ + g_autoptr(GFileInfo) info = g_file_query_info (file, + G_FILE_ATTRIBUTE_TIME_MODIFIED, + G_FILE_QUERY_INFO_NONE, + cancellable, NULL); + if (info) + { + g_file_info_get_modification_time (info, result); + return TRUE; + } + else + { + return FALSE; + } +} + +static gboolean +check_destination_mtime (GFile *src, + GFile *dest, + GCancellable *cancellable) +{ + GTimeVal src_mtime; + GTimeVal dest_mtime; + + return get_mtime (src, &src_mtime, cancellable) && + get_mtime (dest, &dest_mtime, cancellable) && + (src_mtime.tv_sec < dest_mtime.tv_sec || + (src_mtime.tv_sec == dest_mtime.tv_sec && src_mtime.tv_usec < dest_mtime.tv_usec)); +} + +static GFile * +flatpak_dir_update_oci_index (FlatpakDir *self, + const char *remote, + char **index_uri_out, + GCancellable *cancellable, + GError **error) { - 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; + g_autoptr(GFile) index_cache = NULL; + g_autofree char *oci_uri = NULL; - if (!flatpak_dir_maybe_ensure_repo (self, NULL, NULL)) - return TRUE; + index_cache = flatpak_dir_get_oci_index_location (self, remote, error); + if (index_cache == NULL) + return NULL; - active_link = flatpak_build_file (flatpak_dir_get_path (self), - "appstream", - remote, - arch, - "active", - NULL); + ensure_soup_session (self); - 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); + if (!ostree_repo_remote_get_url (self->repo, + remote, + &oci_uri, + error)) + return NULL; + + if (!flatpak_oci_index_ensure_cached (self->soup_session, oci_uri, + index_cache, index_uri_out, + cancellable, &local_error)) + { + if (!g_error_matches (local_error, FLATPAK_OCI_ERROR, FLATPAK_OCI_ERROR_NOT_CHANGED)) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return NULL; + } + + g_clear_error (&local_error); + } + + return g_steal_pointer (&index_cache); +} + +static gboolean +replace_contents_compressed (GFile *dest, + GBytes *contents, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GZlibCompressor) compressor = NULL; + g_autoptr(GFileOutputStream) out = NULL; + g_autoptr(GOutputStream) out2 = NULL; + + compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); + out = g_file_replace (dest, NULL, FALSE, G_FILE_CREATE_REPLACE_DESTINATION, + NULL, error); + out2 = g_converter_output_stream_new (G_OUTPUT_STREAM (out), G_CONVERTER (compressor)); + if (out == NULL) + return FALSE; - branch = g_strdup_printf ("appstream/%s", arch); + if (!g_output_stream_write_all (out2, + g_bytes_get_data (contents, NULL), + g_bytes_get_size (contents), + NULL, + cancellable, error)) + return FALSE; + + if (!g_output_stream_close (out2, cancellable, error)) + return FALSE; - if (!flatpak_dir_find_latest_rev (self, remote, branch, &new_checksum, - NULL, NULL, &local_error)) + return TRUE; +} + +static gboolean +flatpak_dir_update_appstream_oci (FlatpakDir *self, + const char *remote, + const char *arch, + gboolean *out_changed, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) arch_dir = NULL; + g_autoptr(GFile) lock_file = NULL; + g_auto(GLnxLockFile) lock = { 0, }; + g_autoptr(GFile) index_cache = NULL; + g_autofree char *index_uri = NULL; + g_autoptr(GFile) timestamp_file = NULL; + g_autoptr(GFile) icons_dir = NULL; + glnx_autofd int icons_dfd = -1; + g_autoptr(GBytes) appstream = NULL; + g_autoptr(GFile) new_appstream_file = NULL; + + arch_dir = flatpak_build_file (flatpak_dir_get_path (self), + "appstream", remote, arch, NULL); + if (g_mkdir_with_parents (flatpak_file_get_path_cached (arch_dir), 0755) != 0) { - 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; + glnx_set_error_from_errno (error); + return FALSE; } - if (new_checksum == NULL) + + lock_file = g_file_get_child (arch_dir, "lock"); + if (!glnx_make_lock_file (AT_FDCWD, flatpak_file_get_path_cached (lock_file), + LOCK_EX, &lock, error)) + return FALSE; + + index_cache = flatpak_dir_update_oci_index (self, remote, &index_uri, cancellable, error); + if (index_cache == NULL) + return FALSE; + + timestamp_file = g_file_get_child (arch_dir, ".timestamp"); + if (check_destination_mtime (index_cache, timestamp_file, cancellable)) + return TRUE; + + icons_dir = g_file_get_child (arch_dir, "icons"); + if (g_mkdir_with_parents (flatpak_file_get_path_cached (icons_dir), 0755) != 0) { - g_debug ("No %s branch for remote %s, ignoring", branch, remote); - return FALSE; /* No appstream branch, don't update, no error */ + glnx_set_error_from_errno (error); + return FALSE; } - return g_strcmp0 (new_checksum, old_checksum) != 0; + if (!glnx_opendirat (AT_FDCWD, flatpak_file_get_path_cached (icons_dir), + FALSE, &icons_dfd, error)) + return FALSE; + + ensure_soup_session (self); + + appstream = flatpak_oci_index_make_appstream (self->soup_session, + index_cache, + index_uri, + arch, + icons_dfd, + cancellable, + error); + if (appstream == NULL) + return FALSE; + + new_appstream_file = g_file_get_child (arch_dir, "appstream.xml.gz"); + if (!replace_contents_compressed (new_appstream_file, appstream, cancellable, error)) + return FALSE; + + if (!g_file_replace_contents (timestamp_file, "", 0, NULL, FALSE, + G_FILE_CREATE_REPLACE_DESTINATION, NULL, NULL, error)) + return FALSE; + + if (out_changed) + *out_changed = TRUE; + + return TRUE; } gboolean @@ -2144,10 +3311,17 @@ GCancellable *cancellable, GError **error) { - g_autofree char *branch = NULL; + g_autofree char *new_branch = NULL; + g_autofree char *old_branch = NULL; + const char *used_branch = NULL; g_autofree char *remote_and_branch = NULL; g_autofree char *new_checksum = NULL; + + g_autoptr(GError) first_error = NULL; + g_autoptr(GError) second_error = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; const char *installation; + gboolean is_oci; if (out_changed) *out_changed = FALSE; @@ -2155,132 +3329,145 @@ if (arch == NULL) arch = flatpak_get_arch (); - branch = g_strdup_printf ("appstream/%s", arch); + new_branch = g_strdup_printf ("appstream2/%s", arch); + old_branch = g_strdup_printf ("appstream/%s", arch); - if (!flatpak_dir_ensure_repo (self, cancellable, error)) + is_oci = flatpak_dir_get_remote_oci (self, remote); + + state = flatpak_dir_get_remote_state_optional (self, remote, cancellable, error); + if (state == NULL) return FALSE; if (flatpak_dir_use_system_helper (self, NULL)) { g_auto(GLnxLockFile) child_repo_lock = { 0, }; - FlatpakSystemHelper *system_helper; - gboolean is_oci; + g_autofree char *url = NULL; 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); + gboolean gpg_verify_summary; + gboolean gpg_verify; - g_assert (system_helper != NULL); + if (!ostree_repo_remote_get_url (self->repo, + state->remote_name, + &url, + error)) + return FALSE; - if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) + if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, state->remote_name, + &gpg_verify_summary, error)) return FALSE; - is_oci = flatpak_dir_get_remote_oci (self, remote); + if (!ostree_repo_remote_get_gpg_verify (self->repo, state->remote_name, + &gpg_verify, error)) + return FALSE; if (is_oci) { - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(GError) local_error = NULL; - g_autofree char *latest_alt_commit = NULL; - G_GNUC_UNUSED g_autofree char *latest_commit = - flatpak_dir_read_latest (self, remote, branch, &latest_alt_commit, cancellable, NULL); - - registry = flatpak_dir_create_system_child_oci_registry (self, &child_repo_lock, error); - if (registry == NULL) - return FALSE; - - child_repo_file = g_file_new_for_uri (flatpak_oci_registry_get_uri (registry)); + /* In the OCI case, we just ask the system helper do the network i/o, since + * there is no way to verify the index validity without actually downloading it. + * While we try to avoid network i/o as root, there's no hard line where doing + * network i/o as root is much worse than parsing the results of network i/o + * as root. A trusted, but unprivileged helper could be used to do the download + * if necessary. + */ + } + else if ((!gpg_verify_summary && state->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 (!flatpak_dir_mirror_oci (self, registry, remote, branch, latest_alt_commit, progress, cancellable, &local_error)) - { - if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) - return TRUE; - else - { - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - } + If @collection_id is non-%NULL, we can verify the refs in commit + metadata, so don’t need to verify the summary. */ + if (!g_str_has_prefix (url, "file:")) + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Can't pull from untrusted non-gpg verified remote")); } else { - g_autoptr(GBytes) summary_copy = NULL; - g_autoptr(GBytes) summary_sig_copy = NULL; - g_autoptr(GFile) summary_file = NULL; - g_autoptr(GFile) summary_sig_file = NULL; - g_autoptr(OstreeRepo) child_repo = flatpak_dir_create_system_child_repo (self, &child_repo_lock, NULL, error); if (child_repo == NULL) return FALSE; - /* 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; - /* No need to use an existing OstreeRepoFinderResult array, since * appstream updates do not need to be atomic wrt other updates. */ - if (!flatpak_dir_pull (self, remote, branch, NULL, NULL, NULL, + used_branch = new_branch; + if (!flatpak_dir_pull (self, state, used_branch, NULL, NULL, NULL, child_repo, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_MIRROR, - progress, cancellable, error)) - return FALSE; - - if (summary_copy != NULL) + progress, cancellable, &first_error)) { - 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; - - 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; + used_branch = old_branch; + if (!flatpak_dir_pull (self, state, used_branch, NULL, NULL, NULL, + child_repo, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_MIRROR, + progress, cancellable, &second_error)) + { + g_prefix_error (&first_error, "Error updating appstream2: "); + g_prefix_error (&second_error, "Error updating appstream: "); + g_propagate_prefixed_error (error, g_steal_pointer (&second_error), "%s; ", first_error->message); + return FALSE; + } } - if (!ostree_repo_resolve_rev (child_repo, branch, TRUE, &new_checksum, error)) + if (!child_repo_ensure_summary (child_repo, state, cancellable, error)) + return FALSE; + + remote_and_branch = g_strdup_printf ("%s:%s", remote, used_branch); + + if (!ostree_repo_resolve_rev (child_repo, remote_and_branch, TRUE, &new_checksum, error)) return FALSE; child_repo_file = g_object_ref (ostree_repo_get_path (child_repo)); } - child_repo_path = g_file_get_path (child_repo_file); + if (child_repo_file) + child_repo_path = g_file_get_path (child_repo_file); installation = flatpak_dir_get_id (self); - g_debug ("Calling system helper: DeployAppstream"); - if (!flatpak_system_helper_call_deploy_appstream_sync (system_helper, - child_repo_path, - remote, - arch, - installation ? installation : "", - cancellable, - error)) + if (!flatpak_dir_system_helper_call_deploy_appstream (self, + child_repo_path ? child_repo_path : "", + remote, + arch, + installation ? installation : "", + cancellable, + error)) return FALSE; - (void) flatpak_rm_rf (child_repo_file, NULL, NULL); + if (child_repo_file) + (void) flatpak_rm_rf (child_repo_file, NULL, NULL); return TRUE; } + if (is_oci) + { + return flatpak_dir_update_appstream_oci (self, remote, arch, + out_changed, progress, cancellable, + error); + } + /* No need to use an existing OstreeRepoFinderResult array, since * appstream updates do not need to be atomic wrt other updates. */ - if (!flatpak_dir_pull (self, remote, branch, NULL, NULL, NULL, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_NONE, progress, - cancellable, error)) - return FALSE; + used_branch = new_branch; + if (!flatpak_dir_pull (self, state, used_branch, NULL, NULL, NULL, NULL, + FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_NONE, progress, + cancellable, &first_error)) + { + used_branch = old_branch; + if (!flatpak_dir_pull (self, state, used_branch, NULL, NULL, NULL, NULL, + FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_NONE, progress, + cancellable, &second_error)) + { + g_prefix_error (&first_error, "Error updating appstream2: "); + g_prefix_error (&second_error, "Error updating appstream: "); + g_propagate_prefixed_error (error, g_steal_pointer (&second_error), "%s; ", first_error->message); + return FALSE; + } + } - remote_and_branch = g_strdup_printf ("%s:%s", remote, branch); + remote_and_branch = g_strdup_printf ("%s:%s", remote, used_branch); if (!ostree_repo_resolve_rev (self->repo, remote_and_branch, TRUE, &new_checksum, error)) return FALSE; @@ -2314,9 +3501,11 @@ } else { + g_autoptr(GVariant) outstanding_fetches = NULL; /* 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) + outstanding_fetches = ostree_async_progress_get_variant (progress, "outstanding-fetches"); + if (outstanding_fetches == NULL) return; ostree_repo_pull_default_console_progress_changed (progress, user_data); @@ -2327,12 +3516,11 @@ * %NULL. Return %TRUE if the ID was fetched successfully, or if it was unset or * empty. */ static gboolean -repo_get_remote_collection_id (OstreeRepo *repo, - const char *remote_name, - char **collection_id_out, - GError **error) +repo_get_remote_collection_id (OstreeRepo *repo, + const char *remote_name, + char **collection_id_out, + GError **error) { -#ifdef FLATPAK_ENABLE_P2P if (collection_id_out != NULL) { if (!ostree_repo_get_remote_option (repo, remote_name, "collection-id", @@ -2341,10 +3529,6 @@ if (*collection_id_out != NULL && **collection_id_out == '\0') g_clear_pointer (collection_id_out, g_free); } -#else /* if !FLATPAK_ENABLE_P2P */ - if (collection_id_out != NULL) - *collection_id_out = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ return TRUE; } @@ -2353,17 +3537,20 @@ * 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, + const char *current_local_checksum, gboolean force_disable_deltas, OstreeRepoPullFlags flags, OstreeAsyncProgress *progress) { guint32 update_freq = 0; + GVariantBuilder hdr_builder; if (dirs_to_pull) { g_variant_builder_add (builder, "{s@v}", "subdirs", - g_variant_new_variant (g_variant_new_strv ((const char * const *)dirs_to_pull, -1))); + g_variant_new_variant (g_variant_new_strv ((const char * const *) dirs_to_pull, -1))); force_disable_deltas = TRUE; } @@ -2379,6 +3566,16 @@ 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); + if (current_local_checksum) + g_variant_builder_add (&hdr_builder, "(ss)", "Flatpak-Upgrade-From", current_local_checksum); + g_variant_builder_add (builder, "{s@v}", "http-headers", + g_variant_new_variant (g_variant_builder_end (&hdr_builder))); + g_variant_builder_add (builder, "{s@v}", "append-user-agent", + g_variant_new_variant (g_variant_new_string ("flatpak/" PACKAGE_VERSION))); + if (progress != NULL) update_freq = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (progress), "update-frequency")); if (update_freq == 0) @@ -2388,29 +3585,33 @@ 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; g_autofree char *current_checksum = NULL; + g_autoptr(GVariant) old_commit = NULL; g_autoptr(GVariant) new_commit = NULL; const char *revs_to_fetch[2]; gboolean res = FALSE; g_autofree gchar *collection_id = NULL; + g_autoptr(GError) dummy_error = NULL; + + /* The ostree fetcher asserts if error is NULL */ + if (error == NULL) + error = &dummy_error; /* If @results_to_fetch is set, @rev_to_fetch must be. */ g_assert (results_to_fetch == NULL || rev_to_fetch != NULL); @@ -2418,20 +3619,27 @@ /* We always want this on for every type of pull */ flags |= OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES; + remote_and_branch = g_strdup_printf ("%s:%s", remote_name, ref_to_fetch); + if (!ostree_repo_resolve_rev (self, remote_and_branch, TRUE, ¤t_checksum, error)) + return FALSE; + + if (current_checksum != NULL && + !ostree_repo_load_commit (self, current_checksum, &old_commit, NULL, error)) + return FALSE; + if (!repo_get_remote_collection_id (self, remote_name, &collection_id, NULL)) g_clear_pointer (&collection_id, g_free); -#ifdef FLATPAK_ENABLE_P2P if (collection_id != NULL) { GVariantBuilder find_builder, pull_builder; g_autoptr(GVariant) find_options = NULL, pull_options = NULL; - g_autoptr(GMainContext) context = NULL; g_autoptr(GAsyncResult) find_result = NULL, pull_result = NULL; g_auto(OstreeRepoFinderResultv) results = NULL; OstreeCollectionRef collection_ref; OstreeCollectionRef *collection_refs_to_fetch[2]; guint32 update_freq = 0; + g_autoptr(GMainContextPopDefault) context = NULL; /* Find options */ g_variant_builder_init (&find_builder, G_VARIANT_TYPE ("a{sv}")); @@ -2456,7 +3664,7 @@ 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) + if (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))); @@ -2466,18 +3674,17 @@ /* 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, current_checksum, force_disable_deltas, flags, progress); pull_options = g_variant_ref_sink (g_variant_builder_end (&pull_builder)); - context = g_main_context_new (); - g_main_context_push_thread_default (context); + context = flatpak_main_context_new_default (); if (results_to_fetch == NULL) { ostree_repo_find_remotes_async (self, (const OstreeCollectionRef * const *) collection_refs_to_fetch, find_options, - NULL /* default finders */, progress, cancellable, + NULL /* default finders */, progress, cancellable, async_result_cb, &find_result); while (find_result == NULL) @@ -2501,8 +3708,6 @@ } else res = FALSE; - - g_main_context_pop_thread_default (context); } else res = FALSE; @@ -2513,7 +3718,6 @@ g_debug ("Failed to pull using find-remotes; falling back to normal pull: %s", (*error)->message); g_clear_error (error); } -#endif /* FLATPAK_ENABLE_P2P */ if (!res) { @@ -2523,7 +3727,7 @@ /* 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, current_checksum, force_disable_deltas, flags, progress); refs_to_fetch[0] = ref_to_fetch; @@ -2538,13 +3742,6 @@ options = g_variant_ref_sink (g_variant_builder_end (&builder)); - remote_and_branch = g_strdup_printf ("%s:%s", remote_name, ref_to_fetch); - if (!ostree_repo_resolve_rev (self, remote_and_branch, TRUE, ¤t_checksum, error)) - return FALSE; - if (current_checksum != NULL && - !ostree_repo_load_commit (self, current_checksum, &old_commit, NULL, error)) - return FALSE; - if (!ostree_repo_pull_with_options (self, remote_name, options, progress, cancellable, error)) return FALSE; @@ -2563,7 +3760,7 @@ 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 (error, FLATPAK_ERROR_DOWNGRADE, "Update is older than current version"); } return TRUE; @@ -2585,13 +3782,14 @@ } } -typedef struct { +typedef struct +{ OstreeAsyncProgress *progress; - guint64 previous_dl; + guint64 previous_dl; } ExtraDataProgress; static void -extra_data_progress_report (guint64 downloaded_bytes, +extra_data_progress_report (guint64 downloaded_bytes, gpointer user_data) { ExtraDataProgress *extra_progress = user_data; @@ -2603,16 +3801,16 @@ } static gboolean -flatpak_dir_setup_extra_data (FlatpakDir *self, - OstreeRepo *repo, - const char *repository, - const char *ref, - const char *rev, +flatpak_dir_setup_extra_data (FlatpakDir *self, + OstreeRepo *repo, + const char *repository, + const char *ref, + const char *rev, const OstreeRepoFinderResult * const *results, - FlatpakPullFlags flatpak_flags, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error) + FlatpakPullFlags flatpak_flags, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) { g_autoptr(GVariant) extra_data_sources = NULL; int i; @@ -2628,16 +3826,16 @@ /* 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); @@ -2652,7 +3850,7 @@ if (n_extra_data > 0) { if ((flatpak_flags & FLATPAK_PULL_FLAGS_DOWNLOAD_EXTRA_DATA) == 0) - return flatpak_fail (error, "extra data not supported for non-gpg-verified local system installs"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Extra data not supported for non-gpg-verified local system installs")); for (i = 0; i < n_extra_data; i++) { @@ -2721,7 +3919,7 @@ return TRUE; if ((flatpak_flags & FLATPAK_PULL_FLAGS_DOWNLOAD_EXTRA_DATA) == 0) - return flatpak_fail (error, "extra data not supported for non-gpg-verified local system installs"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Extra data not supported for non-gpg-verified local system installs")); extra_data_builder = g_variant_builder_new (G_VARIANT_TYPE ("a(ayay)")); @@ -2758,19 +3956,19 @@ &extra_data_uri); if (sha256_bytes == NULL) - return flatpak_fail (error, _("Invalid sha256 for extra data uri %s"), extra_data_uri); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid checksum for extra data uri %s"), extra_data_uri); extra_data_sha256 = ostree_checksum_from_bytes (sha256_bytes); if (*extra_data_name == 0) - return flatpak_fail (error, _("Empty name for extra data uri %s"), extra_data_uri); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Empty name for extra data uri %s"), extra_data_uri); /* Don't allow file uris here as that could read local files based on remote data */ if (!g_str_has_prefix (extra_data_uri, "http:") && !g_str_has_prefix (extra_data_uri, "https:")) { reset_async_progress_extra_data (progress); - return flatpak_fail (error, _("Unsupported extra data uri %s"), extra_data_uri); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Unsupported extra data uri %s"), extra_data_uri); } /* TODO: Download to disk to support resumed downloads on error */ @@ -2778,23 +3976,23 @@ extra_local_file = flatpak_build_file (base_dir, "extra-data", extra_data_sha256, extra_data_name, NULL); if (g_file_query_exists (extra_local_file, cancellable)) { - g_debug ("Loading extra-data from local file %s", g_file_get_path (extra_local_file)); + g_debug ("Loading extra-data from local file %s", flatpak_file_get_path_cached (extra_local_file)); gsize extra_local_size; g_autofree char *extra_local_contents = NULL; g_autoptr(GError) my_error = NULL; if (!g_file_load_contents (extra_local_file, cancellable, &extra_local_contents, &extra_local_size, NULL, &my_error)) - return flatpak_fail (error, _("Failed to load local extra-data %s: %s"), + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Failed to load local extra-data %s: %s"), flatpak_file_get_path_cached (extra_local_file), my_error->message); if (extra_local_size != download_size) - return flatpak_fail (error, _("Wrong size for extra-data %s"), flatpak_file_get_path_cached (extra_local_file)); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong size for extra-data %s"), flatpak_file_get_path_cached (extra_local_file)); bytes = g_bytes_new (extra_local_contents, extra_local_size); } else { ensure_soup_session (self); - bytes = flatpak_load_http_uri (self->soup_session, extra_data_uri, 0, NULL, NULL, + bytes = flatpak_load_http_uri (self->soup_session, extra_data_uri, 0, extra_data_progress_report, &extra_data_progress, cancellable, error); } @@ -2809,7 +4007,7 @@ if (g_bytes_get_size (bytes) != download_size) { reset_async_progress_extra_data (progress); - return flatpak_fail (error, _("Wrong size for extra data %s"), extra_data_uri); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong size for extra data %s"), extra_data_uri); } extra_data_progress.previous_dl += download_size; @@ -2820,7 +4018,7 @@ if (strcmp (sha256, extra_data_sha256) != 0) { reset_async_progress_extra_data (progress); - return flatpak_fail (error, _("Invalid checksum for extra data %s"), extra_data_uri); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid checksum for extra data %s"), extra_data_uri); } g_variant_builder_add (extra_data_builder, @@ -2872,57 +4070,20 @@ static char * lookup_oci_registry_uri_from_summary (GVariant *summary, - GError **error) + 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")); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("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) -{ - g_autoptr(GVariant) summary = NULL; - g_autofree char *latest_rev = NULL; - g_autofree char *collection_id = NULL; - - summary = fetch_remote_summary_file (self, remote, NULL, cancellable, error); - if (summary == NULL) - return NULL; - - /* Derive the collection ID from the remote we are querying. This will act as - * a sanity check on the summary ref lookup. */ - if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) - return FALSE; - - if (!flatpak_summary_lookup_ref (summary, collection_id, ref, &latest_rev, out_variant)) - { - 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); -} - static void oci_pull_init_progress (OstreeAsyncProgress *progress) { @@ -2984,85 +4145,10 @@ NULL); } -/* Look up a piece of per-repository metadata. Previously, this was stored in - * the summary file; now it’s stored the commit metadata of a special branch. - * Differentiate based on whether the collection ID is set for the remote. - * Returns %FALSE on error or if @key doesn’t exist (in which case, no error is - * set). */ -gboolean -flatpak_dir_lookup_repo_metadata (FlatpakDir *self, - const char *remote_name, - GCancellable *cancellable, - GError **error, - const char *key, - const char *format_string, - ...) -{ - va_list args; - g_autoptr(GVariant) metadata = NULL; - g_autoptr(GVariant) value = NULL; - g_autofree char *collection_id = NULL; - - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return FALSE; - - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return FALSE; - - if (collection_id == NULL) - { - g_autoptr(GVariant) summary_v = NULL; - - summary_v = fetch_remote_summary_file (self, remote_name, NULL, cancellable, error); - if (summary_v == NULL) - return FALSE; - - metadata = g_variant_get_child_value (summary_v, 1); - } - else - { -#ifdef FLATPAK_ENABLE_P2P - g_autofree char *latest_rev = NULL; - g_autoptr(GVariant) commit_v = NULL; - - /* Make sure the branch is up to date. */ - if (!flatpak_dir_fetch_remote_repo_metadata (self, remote_name, cancellable, error)) - return FALSE; - - /* Look up the commit containing the latest repository metadata. */ - latest_rev = flatpak_dir_read_latest (self, remote_name, OSTREE_REPO_METADATA_REF, - NULL, cancellable, error); - if (latest_rev == NULL) - return FALSE; - - if (!ostree_repo_load_commit (self->repo, latest_rev, &commit_v, NULL, error)) - return FALSE; - - metadata = g_variant_get_child_value (commit_v, 0); -#else /* if !FLATPAK_ENABLE_P2P */ - g_assert_not_reached (); -#endif /* !FLATPAK_ENABLE_P2P */ - } - - /* Extract the metadata from it, if set. */ - value = g_variant_lookup_value (metadata, key, NULL); - - if (value == NULL) - return FALSE; - if (!g_variant_check_format_string (value, format_string, FALSE)) - return FALSE; - - va_start (args, format_string); - g_variant_get_va (value, format_string, NULL, &args); - va_end (args); - - return TRUE; -} - static gboolean flatpak_dir_mirror_oci (FlatpakDir *self, FlatpakOciRegistry *dst_registry, - const char *remote, + FlatpakRemoteState *state, const char *ref, const char *skip_if_current_is, OstreeAsyncProgress *progress, @@ -3070,34 +4156,30 @@ GError **error) { 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 *oci_repository = NULL; gboolean res; - if (!ostree_repo_remote_get_url (self->repo, - remote, - &oci_uri, - error)) - 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, &summary, - cancellable, error); + flatpak_remote_state_lookup_ref (state, ref, &latest_rev, &summary_element, error); if (latest_rev == NULL) - return FALSE; + { + if (error != NULL && *error == NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + return FALSE; + } if (skip_if_current_is != NULL && strcmp (latest_rev, skip_if_current_is) == 0) { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s commit %s already installed"), ref, latest_rev); + flatpak_fail_error (error, FLATPAK_ERROR_ALREADY_INSTALLED, _("%s commit %s already installed"), + ref, latest_rev); return FALSE; } @@ -3106,7 +4188,7 @@ oci_digest = g_strconcat ("sha256:", latest_rev, NULL); - registry_uri = lookup_oci_registry_uri_from_summary (summary, error); + registry_uri = lookup_oci_registry_uri_from_summary (state->summary, error); if (registry_uri == NULL) return FALSE; @@ -3142,7 +4224,7 @@ static gboolean flatpak_dir_pull_oci (FlatpakDir *self, - const char *remote, + FlatpakRemoteState *state, const char *ref, OstreeRepo *repo, FlatpakPullFlags flatpak_flags, @@ -3154,7 +4236,6 @@ g_autoptr(FlatpakOciRegistry) registry = NULL; 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; @@ -3162,27 +4243,21 @@ g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; g_autoptr(GVariant) summary_element = NULL; - g_autoptr(GVariant) summary = NULL; g_autofree char *latest_alt_commit = NULL; g_autoptr(GVariant) metadata = NULL; g_autofree char *latest_rev = NULL; G_GNUC_UNUSED g_autofree char *latest_commit = - flatpak_dir_read_latest (self, remote, ref, &latest_alt_commit, cancellable, NULL); - - /* This doesn't support specifying a specific digest, because that can't work - with OCI signatures. We need to get that from the index */ - if (!ostree_repo_remote_get_url (self->repo, - remote, - &oci_uri, - error)) - return FALSE; + flatpak_dir_read_latest (self, state->remote_name, ref, &latest_alt_commit, cancellable, NULL); /* 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, &summary, - cancellable, error); + flatpak_remote_state_lookup_ref (state, ref, &latest_rev, &summary_element, error); if (latest_rev == NULL) - return FALSE; + { + if (error != NULL && *error == NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + return FALSE; + } metadata = g_variant_get_child_value (summary_element, 2); g_variant_lookup (metadata, "xa.oci-repository", "s", &oci_repository); @@ -3193,7 +4268,7 @@ if (latest_alt_commit != NULL && strcmp (oci_digest + strlen ("sha256:"), latest_alt_commit) == 0) return TRUE; - registry_uri = lookup_oci_registry_uri_from_summary (summary, error); + registry_uri = lookup_oci_registry_uri_from_summary (state->summary, error); if (registry_uri == NULL) return FALSE; @@ -3202,18 +4277,14 @@ return FALSE; versioned = flatpak_oci_registry_load_versioned (registry, oci_repository, oci_digest, - NULL, cancellable, error); + NULL, cancellable, error); if (versioned == NULL) return FALSE; if (!FLATPAK_IS_OCI_MANIFEST (versioned)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "Image is not a manifest"); - return FALSE; - } + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); - full_ref = g_strdup_printf ("%s:%s", remote, ref); + full_ref = g_strdup_printf ("%s:%s", state->remote_name, ref); if (repo == NULL) repo = self->repo; @@ -3233,7 +4304,7 @@ g_debug ("Pulling OCI image %s", oci_digest); checksum = flatpak_pull_from_oci (repo, registry, oci_repository, oci_digest, FLATPAK_OCI_MANIFEST (versioned), - remote, ref, oci_pull_progress_cb, progress, cancellable, error); + state->remote_name, ref, oci_pull_progress_cb, progress, cancellable, error); if (progress) ostree_async_progress_finish (progress); @@ -3247,28 +4318,27 @@ } gboolean -flatpak_dir_pull (FlatpakDir *self, - const char *repository, - const char *ref, - const char *opt_rev, +flatpak_dir_pull (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + const char *opt_rev, const OstreeRepoFinderResult * const *opt_results, - const char **subpaths, - OstreeRepo *repo, - FlatpakPullFlags flatpak_flags, - OstreeRepoPullFlags flags, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error) + const char **subpaths, + OstreeRepo *repo, + FlatpakPullFlags flatpak_flags, + OstreeRepoPullFlags flags, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) { gboolean ret = FALSE; - const char *rev; + g_autofree char *rev = NULL; g_autofree char *url = NULL; + g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; g_autoptr(GPtrArray) subdirs_arg = NULL; -#ifdef FLATPAK_ENABLE_P2P g_auto(OstreeRepoFinderResultv) allocated_results = NULL; -#endif const OstreeRepoFinderResult * const *results; g_auto(GLnxLockFile) lock = { 0, }; @@ -3287,12 +4357,12 @@ if (repo == NULL && !flatpak_dir_repo_lock (self, &lock, LOCK_SH, cancellable, error)) return FALSE; - if (flatpak_dir_get_remote_oci (self, repository)) - return flatpak_dir_pull_oci (self, repository, ref, repo, flatpak_flags, + if (flatpak_dir_get_remote_oci (self, state->remote_name)) + return flatpak_dir_pull_oci (self, state, ref, repo, flatpak_flags, flags, progress, cancellable, error); if (!ostree_repo_remote_get_url (self->repo, - repository, + state->remote_name, &url, error)) return FALSE; @@ -3316,28 +4386,22 @@ pulls (e.g. with subpaths) */ if (opt_rev != NULL) { - rev = opt_rev; + rev = g_strdup (opt_rev); results = opt_results; } else { -#ifdef FLATPAK_ENABLE_P2P - g_autofree char *collection_id = NULL; - - if (!repo_get_remote_collection_id (self->repo, repository, &collection_id, NULL)) - collection_id = NULL; - - if (collection_id != NULL && *collection_id != '\0') + if (state->collection_id) { GVariantBuilder find_builder; g_autoptr(GVariant) find_options = NULL; - g_autoptr(GMainContext) context = NULL; g_autoptr(GAsyncResult) find_result = NULL; OstreeCollectionRef collection_ref; OstreeCollectionRef *collection_refs_to_fetch[2]; gboolean force_disable_deltas = (flatpak_flags & FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS) != 0; guint update_freq = 0; gsize i; + g_autoptr(GMainContextPopDefault) context = NULL; g_variant_builder_init (&find_builder, G_VARIANT_TYPE ("a{sv}")); @@ -3347,7 +4411,7 @@ g_variant_new_variant (g_variant_new_boolean (TRUE))); } - collection_ref.collection_id = collection_id; + collection_ref.collection_id = state->collection_id; collection_ref.ref_name = (char *) ref; collection_refs_to_fetch[0] = &collection_ref; @@ -3363,12 +4427,11 @@ find_options = g_variant_ref_sink (g_variant_builder_end (&find_builder)); - context = g_main_context_new (); - g_main_context_push_thread_default (context); + context = flatpak_main_context_new_default (); ostree_repo_find_remotes_async (self->repo, (const OstreeCollectionRef * const *) collection_refs_to_fetch, find_options, - NULL /* default finders */, progress, cancellable, + NULL /* default finders */, progress, cancellable, async_result_cb, &find_result); while (find_result == NULL) @@ -3376,23 +4439,24 @@ allocated_results = ostree_repo_find_remotes_finish (self->repo, find_result, error); - g_main_context_pop_thread_default (context); - results = (const OstreeRepoFinderResult * const *) allocated_results; if (results == NULL) return FALSE; for (i = 0, rev = NULL; results[i] != NULL && rev == NULL; i++) - rev = g_hash_table_lookup (results[i]->ref_to_checksum, &collection_ref); + rev = g_strdup (g_hash_table_lookup (results[i]->ref_to_checksum, &collection_ref)); if (rev == NULL) - return flatpak_fail (error, "No such ref (%s, %s) in remote %s or elsewhere", - collection_ref.collection_id, collection_ref.ref_name, repository); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No such ref (%s, %s) in remote %s or elsewhere"), + collection_ref.collection_id, collection_ref.ref_name, state->remote_name); } else -#endif /* FLATPAK_ENABLE_P2P */ { - rev = flatpak_dir_lookup_ref_from_summary (self, repository, ref, NULL, NULL, cancellable, error); + flatpak_remote_state_lookup_ref (state, ref, &rev, NULL, error); + if (rev == NULL && error != NULL && *error == NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + results = NULL; } @@ -3425,7 +4489,7 @@ /* Setup extra data information before starting to pull, so we can have precise * progress reports */ - if (!flatpak_dir_setup_extra_data (self, repo, repository, + if (!flatpak_dir_setup_extra_data (self, repo, state->remote_name, ref, rev, results, flatpak_flags, progress, @@ -3433,18 +4497,18 @@ 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, state->remote_name, + 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); + g_prefix_error (error, _("While pulling %s from remote %s: "), ref, state->remote_name); goto out; } if (!flatpak_dir_pull_extra_data (self, repo, - repository, + state->remote_name, ref, rev, flatpak_flags, progress, @@ -3469,20 +4533,21 @@ } 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; + const OstreeRepoPullFlags flags = OSTREE_REPO_PULL_FLAGS_UNTRUSTED | OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES; GVariantBuilder builder; + g_autoptr(GVariant) options = NULL; g_auto(GVariantBuilder) refs_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; g_auto(GLnxConsoleRef) console = { 0, }; g_autoptr(OstreeAsyncProgress) console_progress = NULL; @@ -3491,6 +4556,11 @@ const char *refs[2] = { NULL, NULL }; const char *commits[2] = { NULL, NULL }; g_autofree char *collection_id = NULL; + g_autoptr(GError) dummy_error = NULL; + + /* The ostree fetcher asserts if error is NULL */ + if (error == NULL) + error = &dummy_error; if (progress == NULL) { @@ -3540,12 +4610,13 @@ if (dirs_to_pull) { g_variant_builder_add (&builder, "{s@v}", "subdirs", - g_variant_new_variant (g_variant_new_strv ((const char * const *)dirs_to_pull, -1))); + g_variant_new_variant (g_variant_new_strv ((const char * const *) dirs_to_pull, -1))); g_variant_builder_add (&builder, "{s@v}", "disable-static-deltas", g_variant_new_variant (g_variant_new_boolean (TRUE))); } - res = ostree_repo_pull_with_options (repo, url, g_variant_builder_end (&builder), + options = g_variant_ref_sink (g_variant_builder_end (&builder)); + res = ostree_repo_pull_with_options (repo, url, options, progress, cancellable, error); if (progress) @@ -3593,10 +4664,10 @@ 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; @@ -3614,7 +4685,7 @@ /* This was verified in the client, but lets do it here too */ if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) - return flatpak_fail (error, "Can't pull from untrusted non-gpg verified remote"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Can't pull from untrusted non-gpg verified remote")); /* We verify the summary manually before anything else to make sure we've got something right before looking too hard at the repo and @@ -3623,14 +4694,14 @@ if (!g_file_load_contents (summary_file, cancellable, &summary_data, &summary_data_size, NULL, NULL)) - return flatpak_fail (error, "No summary found"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No summary found")); summary_bytes = g_bytes_new_take (summary_data, summary_data_size); if (gpg_verify_summary) { if (!g_file_load_contents (summary_sig_file, cancellable, &summary_sig_data, &summary_sig_data_size, NULL, NULL)) - return flatpak_fail (error, "GPG verification enabled, but no summary signatures found"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("GPG verification enabled, but no summary signatures found for remote '%s'"), remote_name); summary_sig_bytes = g_bytes_new_take (summary_sig_data, summary_sig_data_size); @@ -3643,22 +4714,11 @@ return FALSE; if (ostree_gpg_verify_result_count_valid (gpg_result) == 0) - return flatpak_fail (error, "GPG signatures found, but none are in trusted keyring"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("GPG signatures found for remote '%s', but none are in trusted keyring"), remote_name); } g_clear_object (&gpg_result); - summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, summary_bytes, FALSE)); - if (!flatpak_summary_lookup_ref (summary, - collection_id, - ref, - &checksum, NULL)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - _("Can't find %s in remote %s"), ref, remote_name); - return FALSE; - } - remote_and_branch = g_strdup_printf ("%s:%s", remote_name, ref); if (!ostree_repo_resolve_rev (self->repo, remote_and_branch, TRUE, ¤t_checksum, error)) return FALSE; @@ -3671,6 +4731,23 @@ if (!ostree_repo_open (src_repo, cancellable, error)) return FALSE; + if (collection_id == NULL) + { + summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, summary_bytes, FALSE)); + if (!flatpak_summary_lookup_ref (summary, + NULL, + ref, + &checksum, NULL)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No such ref '%s' in remote %s"), + ref, remote_name); + + } + else + { + if (!ostree_repo_resolve_rev (src_repo, remote_and_branch, FALSE, &checksum, error)) + return FALSE; + } + if (gpg_verify) { gpg_result = ostree_repo_verify_commit_for_remote (src_repo, checksum, remote_name, cancellable, error); @@ -3678,7 +4755,7 @@ return FALSE; if (ostree_gpg_verify_result_count_valid (gpg_result) == 0) - return flatpak_fail (error, "GPG signatures found, but none are in trusted keyring"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("GPG signatures found, but none are in trusted keyring")); } g_clear_object (&gpg_result); @@ -3686,7 +4763,6 @@ if (!ostree_repo_load_commit (src_repo, checksum, &new_commit, NULL, error)) return FALSE; -#ifdef FLATPAK_ENABLE_P2P if (gpg_verify) { /* Verify the commit’s binding to the ref and to the repo. See @@ -3704,18 +4780,13 @@ * commit. */ if (collection_id != NULL) - return flatpak_fail (error, - "expected commit metadata to have ref " - "binding information, found none"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Expected commit metadata to have ref binding information, found none")); } if (collection_id != NULL && - !g_strv_contains ((const char *const *) commit_refs, ref)) - { - return flatpak_fail (error, "commit has no requested ref ‘%s’ " - "in ref binding metadata", - ref); - } + !g_strv_contains ((const char * const *) commit_refs, ref)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Commit has no requested ref ‘%s’ in ref binding metadata"), + ref); if (collection_id != NULL) { @@ -3724,18 +4795,15 @@ "ostree.collection-binding", "&s", &commit_collection_id)) - return flatpak_fail (error, - "expected commit metadata to have collection ID " - "binding information, found none"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Expected commit metadata to have collection ID binding information, found none")); if (!g_str_equal (commit_collection_id, collection_id)) - return flatpak_fail (error, - "commit has collection ID ‘%s’ in collection binding " - "metadata, while the remote it came from has " - "collection ID ‘%s’", - commit_collection_id, collection_id); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, + _("Commit has collection ID ‘%s’ in collection binding " + "metadata, while the remote it came from has " + "collection ID ‘%s’"), + commit_collection_id, collection_id); } } -#endif /* FLATPAK_ENABLE_P2P */ if (old_commit) { @@ -3746,7 +4814,7 @@ new_timestamp = ostree_commit_get_timestamp (new_commit); if (new_timestamp < old_timestamp) - return flatpak_fail (error, "Not allowed to downgrade %s", ref); + return flatpak_fail_error (error, FLATPAK_ERROR_DOWNGRADE, "Not allowed to downgrade %s", ref); } if (subpaths != NULL && subpaths[0] != NULL) @@ -3765,10 +4833,10 @@ /* 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; @@ -3985,13 +5053,14 @@ while ((child_info2 = g_file_enumerator_next_file (dir_enum2, cancellable, &temp_error))) { - const char *branch; + const char *branch = g_file_info_get_name (child_info2); if (g_file_info_get_file_type (child_info2) == G_FILE_TYPE_DIRECTORY) { - branch = g_file_info_get_name (child_info2); - g_ptr_array_add (refs, - g_strdup_printf ("%s/%s/%s/%s", kind, name, arch, branch)); + g_autoptr(GFile) deploy = flatpak_build_file (child, branch, "active/deploy", NULL); + if (g_file_query_exists (deploy, NULL)) + g_ptr_array_add (refs, + g_strdup_printf ("%s/%s/%s/%s", kind, name, arch, branch)); } g_clear_object (&child_info2); @@ -4101,6 +5170,41 @@ return ret; } +GVariant * +flatpak_dir_read_latest_commit (FlatpakDir *self, + const char *remote, + const char *ref, + char **out_checksum, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *remote_and_ref = NULL; + g_autofree char *res = NULL; + + g_autoptr(GVariant) commit_data = NULL; + + /* There may be several remotes with the same branch (if we for + * instance changed the origin, so prepend the current origin to + * make sure we get the right one */ + + if (remote) + remote_and_ref = g_strdup_printf ("%s:%s", remote, ref); + else + remote_and_ref = g_strdup (ref); + + if (!ostree_repo_resolve_rev (self->repo, remote_and_ref, FALSE, &res, error)) + return NULL; + + if (!ostree_repo_load_commit (self->repo, res, &commit_data, NULL, error)) + return NULL; + + if (out_checksum) + *out_checksum = g_steal_pointer (&res); + + return g_steal_pointer (&commit_data); +} + + char * flatpak_dir_read_latest (FlatpakDir *self, const char *remote, @@ -4111,7 +5215,7 @@ { g_autofree char *remote_and_ref = NULL; g_autofree char *alt_id = NULL; - char *res = NULL; + g_autofree char *res = NULL; /* There may be several remotes with the same branch (if we for * instance changed the origin, so prepend the current origin to @@ -4137,9 +5241,9 @@ g_variant_lookup (commit_metadata, "xa.alt-id", "s", &alt_id); *out_alt_id = g_steal_pointer (&alt_id); - } + } - return res; + return g_steal_pointer (&res); } char * @@ -4209,7 +5313,7 @@ return ret; } -static gboolean +gboolean flatpak_dir_run_triggers (FlatpakDir *self, GCancellable *cancellable, GError **error) @@ -4222,6 +5326,19 @@ GError *temp_error = NULL; const char *triggerspath; + if (flatpak_dir_use_system_helper (self, NULL)) + { + const char *installation = flatpak_dir_get_id (self); + + if (!flatpak_dir_system_helper_call_run_triggers (self, + installation ? installation : "", + cancellable, + error)) + return FALSE; + + return TRUE; + } + triggerspath = g_getenv ("FLATPAK_TRIGGERSDIR"); if (triggerspath == NULL) triggerspath = FLATPAK_TRIGGERDIR; @@ -4402,16 +5519,17 @@ } ExportedIniFileType; static gboolean -export_ini_file (int parent_fd, - const char *name, +export_ini_file (int parent_fd, + const char *name, ExportedIniFileType ini_type, - struct stat *stat_buf, - char **target, - GCancellable *cancellable, - GError **error) + struct stat *stat_buf, + char **target, + GCancellable *cancellable, + GError **error) { glnx_autofd int desktop_fd = -1; g_autofree char *tmpfile_name = g_strdup_printf ("export-ini-XXXXXX"); + g_autoptr(GOutputStream) out_stream = NULL; g_autofree gchar *data = NULL; gsize data_len; @@ -4448,13 +5566,14 @@ static inline void xml_autoptr_cleanup_generic_free (void *p) { - void **pp = (void**)p; + void **pp = (void **) p; + if (*pp) xmlFree (*pp); } -#define xml_autofree _GLIB_CLEANUP(xml_autoptr_cleanup_generic_free) +#define xml_autofree _GLIB_CLEANUP (xml_autoptr_cleanup_generic_free) /* This verifies the basic layout of the files, then it removes * any magic matches, and makes all glob matches have a very low @@ -4473,7 +5592,7 @@ if (top_node->type != XML_ELEMENT_NODE) continue; - if (strcmp ((char *)top_node->name, "mime-info") != 0) + if (strcmp ((char *) top_node->name, "mime-info") != 0) return FALSE; for (mime_node = top_node->children; mime_node; mime_node = mime_node->next) @@ -4485,10 +5604,10 @@ if (mime_node->type != XML_ELEMENT_NODE) continue; - if (strcmp ((char *)mime_node->name, "mime-type") != 0) + if (strcmp ((char *) mime_node->name, "mime-type") != 0) return FALSE; - mimetype = xmlGetProp (mime_node, (xmlChar *)"type"); + mimetype = xmlGetProp (mime_node, (xmlChar *) "type"); for (sub_node = mime_node->children; sub_node; sub_node = next_sub_node) { next_sub_node = sub_node->next; @@ -4496,17 +5615,17 @@ if (sub_node->type != XML_ELEMENT_NODE) continue; - if (strcmp ((char *)sub_node->name, "magic") == 0) + if (strcmp ((char *) sub_node->name, "magic") == 0) { g_warning ("Removing magic mime rule from exports"); xmlUnlinkNode (sub_node); - xmlFreeNode(sub_node); + xmlFreeNode (sub_node); } - else if (strcmp ((char *)sub_node->name, "glob") == 0) + else if (strcmp ((char *) sub_node->name, "glob") == 0) { xmlSetProp (sub_node, - (const xmlChar *)"weight", - (const xmlChar *)"5"); + (const xmlChar *) "weight", + (const xmlChar *) "5"); } } } @@ -4525,6 +5644,7 @@ { glnx_autofd int desktop_fd = -1; g_autofree char *tmpfile_name = g_strdup_printf ("export-mime-XXXXXX"); + g_autoptr(GOutputStream) out_stream = NULL; g_autofree gchar *data = NULL; gsize data_len; @@ -4538,12 +5658,12 @@ doc = xmlReadMemory (data, data_len, NULL, NULL, 0); if (doc == NULL) - return flatpak_fail (error, _("Error reading mimetype xml file")); + return flatpak_fail_error (error, FLATPAK_ERROR_EXPORT_FAILED, _("Error reading mimetype xml file")); if (!rewrite_mime_xml (doc)) { xmlFreeDoc (doc); - return flatpak_fail (error, _("Invalid mimetype xml file")); + return flatpak_fail_error (error, FLATPAK_ERROR_EXPORT_FAILED, _("Invalid mimetype xml file")); } xmlDocDumpFormatMemory (doc, &xmlbuff, &buffersize, 1); @@ -4560,6 +5680,27 @@ return TRUE; } +static char * +format_flatpak_run_args_from_run_opts (GStrv flatpak_run_args) +{ + GString *str; + GStrv iter = flatpak_run_args; + + if (flatpak_run_args == NULL) + return NULL; + + str = g_string_new (""); + for (; *iter != NULL; ++iter) + { + if (g_strcmp0 (*iter, "no-a11y-bus") == 0) + g_string_append_printf (str, " --no-a11y-bus"); + else if (g_strcmp0 (*iter, "no-documents-portal") == 0) + g_string_append_printf (str, " --no-documents-portal"); + } + + return g_string_free (str, FALSE); +} + static gboolean export_desktop_file (const char *app, const char *branch, @@ -4575,6 +5716,7 @@ gboolean ret = FALSE; glnx_autofd int desktop_fd = -1; g_autofree char *tmpfile_name = g_strdup_printf ("export-desktop-XXXXXX"); + g_autoptr(GOutputStream) out_stream = NULL; g_autofree gchar *data = NULL; gsize data_len; @@ -4610,7 +5752,7 @@ if (dbus_name == NULL || strcmp (dbus_name, expected_dbus_name) != 0) { - flatpak_fail (error, "dbus service file %s has wrong name", name); + flatpak_fail_error (error, FLATPAK_ERROR_EXPORT_FAILED, _("D-Bus service file '%s' has wrong name"), name); return FALSE; } } @@ -4639,13 +5781,23 @@ for (i = 0; groups[i] != NULL; i++) { + g_auto(GStrv) flatpak_run_opts = g_key_file_get_string_list (keyfile, groups[i], "X-Flatpak-RunOptions", NULL, NULL); + g_autofree char *flatpak_run_args = format_flatpak_run_args_from_run_opts (flatpak_run_opts); + + g_key_file_remove_key (keyfile, groups[i], "X-Flatpak-RunOptions", NULL); g_key_file_remove_key (keyfile, groups[i], "TryExec", NULL); /* Remove this to make sure nothing tries to execute it outside the sandbox*/ g_key_file_remove_key (keyfile, groups[i], "X-GNOME-Bugzilla-ExtraInfoScript", NULL); new_exec = g_string_new (""); - g_string_append_printf (new_exec, FLATPAK_BINDIR "/flatpak run --branch=%s --arch=%s", escaped_branch, escaped_arch); + g_string_append_printf (new_exec, + FLATPAK_BINDIR "/flatpak run --branch=%s --arch=%s", + escaped_branch, + escaped_arch); + + if (flatpak_run_args != NULL) + g_string_append_printf (new_exec, "%s", flatpak_run_args); old_exec = g_key_file_get_string (keyfile, groups[i], "Exec", NULL); if (old_exec && g_shell_parse_argv (old_exec, &old_argc, &old_argv, NULL) && old_argc >= 1) @@ -4715,24 +5867,33 @@ } static gboolean -rewrite_export_dir (const char *app, - const char *branch, - const char *arch, - GKeyFile *metadata, - int source_parent_fd, - const char *source_name, - GCancellable *cancellable, - GError **error) +rewrite_export_dir (const char *app, + const char *branch, + const char *arch, + GKeyFile *metadata, + FlatpakContext *context, + int source_parent_fd, + const char *source_name, + const char *source_path, + GCancellable *cancellable, + GError **error) { gboolean ret = FALSE; g_auto(GLnxDirFdIterator) source_iter = {0}; g_autoptr(GHashTable) visited_children = NULL; struct dirent *dent; + gboolean exports_allowed = FALSE; + g_auto(GStrv) allowed_prefixes = NULL; + g_auto(GStrv) allowed_extensions = NULL; + gboolean require_exact_match = FALSE; if (!glnx_dirfd_iterator_init_at (source_parent_fd, source_name, FALSE, &source_iter, error)) goto out; + exports_allowed = flatpak_get_allowed_exports (source_path, app, context, + &allowed_extensions, &allowed_prefixes, &require_exact_match); + visited_children = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); while (TRUE) @@ -4766,16 +5927,39 @@ if (S_ISDIR (stbuf.st_mode)) { - if (!rewrite_export_dir (app, branch, arch, metadata, + g_autofree char *path = g_build_filename (source_path, dent->d_name, NULL); + + if (!rewrite_export_dir (app, branch, arch, metadata, context, source_iter.fd, dent->d_name, - cancellable, error)) + path, cancellable, error)) goto out; } - else if (S_ISREG (stbuf.st_mode)) + else if (S_ISREG (stbuf.st_mode) && exports_allowed) { + g_autofree gchar *name_without_extension = NULL; g_autofree gchar *new_name = NULL; + int i; + + for (i = 0; allowed_extensions[i] != NULL; i++) + { + if (g_str_has_suffix (dent->d_name, allowed_extensions[i])) + break; + } - if (!flatpak_has_name_prefix (dent->d_name, app)) + if (allowed_extensions[i] == NULL) + { + g_warning ("Invalid extension for %s in app %s, removing.", dent->d_name, app); + if (unlinkat (source_iter.fd, dent->d_name, 0) != 0 && errno != ENOENT) + { + glnx_set_error_from_errno (error); + goto out; + } + continue; + } + + name_without_extension = g_strndup (dent->d_name, strlen (dent->d_name) - strlen (allowed_extensions[i])); + + if (!flatpak_name_matches_one_wildcard_prefix (name_without_extension, (const char * const *) allowed_prefixes, require_exact_match)) { g_warning ("Non-prefixed filename %s in app %s, removing.", dent->d_name, app); if (unlinkat (source_iter.fd, dent->d_name, 0) != 0 && errno != ENOENT) @@ -4848,9 +6032,29 @@ { gboolean ret = FALSE; + g_autoptr(GFile) parent = g_file_get_parent (source); + glnx_autofd int parentfd = -1; + g_autofree char *name = g_file_get_basename (source); + + /* Start with a source path of "" - we don't care about + * the "export" component and we want to start path traversal + * relative to it. */ + const char *source_path = ""; + g_autoptr(FlatpakContext) context = flatpak_context_new (); + + if (!flatpak_context_load_metadata (context, metadata, error)) + return FALSE; + + if (!glnx_opendirat (AT_FDCWD, + flatpak_file_get_path_cached (parent), + TRUE, + &parentfd, + error)) + return FALSE; + /* The fds are closed by this call */ - if (!rewrite_export_dir (app, branch, arch, metadata, - AT_FDCWD, flatpak_file_get_path_cached (source), + if (!rewrite_export_dir (app, branch, arch, metadata, context, + parentfd, name, source_path, cancellable, error)) goto out; @@ -4972,12 +6176,12 @@ }; int i; - for (i = 0; i < G_N_ELEMENTS(exported_subdirs); i = i + 2) + for (i = 0; i < G_N_ELEMENTS (exported_subdirs); i = i + 2) { /* The fds are closed by this call */ g_autoptr(GFile) sub_source = g_file_resolve_relative_path (source, exported_subdirs[i]); g_autoptr(GFile) sub_destination = g_file_resolve_relative_path (destination, exported_subdirs[i]); - g_autofree char *sub_symlink_prefix = g_build_filename (exported_subdirs[i+1], symlink_prefix, exported_subdirs[i], NULL); + g_autofree char *sub_symlink_prefix = g_build_filename (exported_subdirs[i + 1], symlink_prefix, exported_subdirs[i], NULL); if (!g_file_query_exists (sub_source, cancellable)) continue; @@ -5038,9 +6242,6 @@ if (!flatpak_remove_dangling_symlinks (exports, cancellable, error)) goto out; - if (!flatpak_dir_run_triggers (self, cancellable, error)) - goto out; - ret = TRUE; out: @@ -5048,12 +6249,12 @@ } static gboolean -extract_extra_data (FlatpakDir *self, - const char *checksum, - GFile *extradir, - gboolean *created_extra_data, - GCancellable *cancellable, - GError **error) +extract_extra_data (FlatpakDir *self, + const char *checksum, + GFile *extradir, + gboolean *created_extra_data, + GCancellable *cancellable, + GError **error) { g_autoptr(GVariant) detached_metadata = NULL; g_autoptr(GVariant) extra_data = NULL; @@ -5081,7 +6282,7 @@ if (n_extra_data_sources == 0) return TRUE; - g_debug ("extracting extra data to %s", g_file_get_path (extradir)); + g_debug ("extracting extra data to %s", flatpak_file_get_path_cached (extradir)); if (!ostree_repo_read_commit_detached_metadata (self->repo, checksum, &detached_metadata, cancellable, error)) @@ -5091,16 +6292,16 @@ } if (detached_metadata == NULL) - return flatpak_fail (error, "Extra data missing in detached metadata"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Extra data missing in detached metadata")); extra_data = g_variant_lookup_value (detached_metadata, "xa.extra-data", G_VARIANT_TYPE ("a(ayay)")); if (extra_data == NULL) - return flatpak_fail (error, "Extra data missing in detached metadata"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Extra data missing in detached metadata")); n_extra_data = g_variant_n_children (extra_data); if (n_extra_data < n_extra_data_sources) - return flatpak_fail (error, "Extra data missing in detached metadata"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Extra data missing in detached metadata")); if (!flatpak_mkdir_p (extradir, cancellable, error)) { @@ -5125,7 +6326,7 @@ NULL); if (extra_data_sha256_bytes == NULL) - return flatpak_fail (error, _("Invalid sha256 for extra data")); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid checksum for extra data")); extra_data_sha256 = ostree_checksum_from_bytes (extra_data_sha256_bytes); @@ -5140,7 +6341,7 @@ g_autoptr(GFile) dest = NULL; g_autofree char *sha256 = NULL; const char *extra_data_name = NULL; - const guchar *data; + const guchar *data; gsize len; g_variant_get_child (extra_data, j, "(^ay@ay)", @@ -5154,11 +6355,11 @@ len = g_variant_get_size (content); if (len != download_size) - return flatpak_fail (error, _("Wrong size for extra data")); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong size for extra data")); sha256 = g_compute_checksum_for_data (G_CHECKSUM_SHA256, data, len); if (strcmp (sha256, extra_data_sha256) != 0) - return flatpak_fail (error, _("Invalid checksum for extra data")); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid checksum for extra data")); dest = g_file_get_child (extradir, extra_data_name); if (!g_file_replace_contents (dest, @@ -5174,7 +6375,7 @@ } if (!found) - return flatpak_fail (error, "Extra data %s missing in detached metadata", extra_data_source_name); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Extra data %s missing in detached metadata"), extra_data_source_name); } *created_extra_data = TRUE; @@ -5207,10 +6408,10 @@ } static gboolean -apply_extra_data (FlatpakDir *self, - GFile *checkoutdir, - GCancellable *cancellable, - GError **error) +apply_extra_data (FlatpakDir *self, + GFile *checkoutdir, + GCancellable *cancellable, + GError **error) { g_autoptr(GFile) metadata = NULL; g_autofree char *metadata_contents = NULL; @@ -5276,7 +6477,7 @@ if (!g_key_file_get_boolean (metakey, FLATPAK_METADATA_GROUP_EXTRA_DATA, FLATPAK_METADATA_KEY_NO_RUNTIME, NULL)) { - runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, cancellable, error); + runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, NULL, cancellable, error); if (runtime_deploy == NULL) return FALSE; runtime_files = flatpak_deploy_get_files (runtime_deploy); @@ -5301,10 +6502,12 @@ "--ro-bind", flatpak_file_get_path_cached (app_files), "/app", "--bind", flatpak_file_get_path_cached (extra_files), "/app/extra", "--chdir", "/app/extra", + /* We run as root in the system-helper case, so drop all caps */ + "--cap-drop", "ALL", NULL); if (!flatpak_run_setup_base_argv (bwrap, runtime_files, NULL, runtime_ref_parts[2], - FLATPAK_RUN_FLAG_NO_SESSION_HELPER, + FLATPAK_RUN_FLAG_NO_SESSION_HELPER | FLATPAK_RUN_FLAG_NO_PROC, error)) return FALSE; @@ -5318,12 +6521,23 @@ app_context, NULL, NULL, cancellable, error)) return FALSE; - g_ptr_array_add (bwrap->argv, g_strdup ("/app/bin/apply_extra")); + flatpak_bwrap_add_arg (bwrap, "/app/bin/apply_extra"); - g_ptr_array_add (bwrap->argv, NULL); + flatpak_bwrap_finish (bwrap); g_debug ("Running /app/bin/apply_extra "); + /* We run the sandbox without caps, but it can still create files owned by itself with + * arbitrary permissions, including setuid myself. This is extra risky in the case where + * this runs as root in the system helper case. We canonicalize the permissions at the + * end, but do avoid non-canonical permissions leaking out before then we make the + * toplevel dir only accessible to the user */ + if (chmod (flatpak_file_get_path_cached (extra_files), 0700) != 0) + { + glnx_set_error_from_errno (error); + return FALSE; + } + if (!g_spawn_sync (NULL, (char **) bwrap->argv->pdata, bwrap->envp, @@ -5334,6 +6548,9 @@ error)) return FALSE; + if (!flatpak_canonicalize_permissions (AT_FDCWD, flatpak_file_get_path_cached (extra_files), error)) + return FALSE; + if (exit_status != 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, @@ -5389,6 +6606,8 @@ g_autoptr(GVariant) commit_data = NULL; g_autofree char *tmp_dir_path = NULL; const char *alt_id = NULL; + const char *eol = NULL; + const char *eol_rebase = NULL; const char *xa_metadata = NULL; const char *xa_ref = NULL; g_autofree char *checkout_basename = NULL; @@ -5396,6 +6615,9 @@ g_autoptr(GVariant) commit_metadata = NULL; GVariantBuilder metadata_builder; g_auto(GLnxLockFile) lock = { 0, }; + g_autoptr(GFile) metadata_file = NULL; + g_autofree char *metadata_contents = NULL; + g_autofree char *application_runtime = NULL; gboolean is_app; if (!flatpak_dir_ensure_repo (self, cancellable, error)) @@ -5431,7 +6653,7 @@ checksum = checksum_or_latest; g_debug ("Looking for checksum %s in local repo", checksum); if (!ostree_repo_read_commit (self->repo, checksum, &root, &commit, cancellable, NULL)) - return flatpak_fail (error, _("%s is not available"), ref); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("%s is not available"), ref); } if (!ostree_repo_load_commit (self->repo, checksum, &commit_data, NULL, error)) @@ -5439,16 +6661,15 @@ 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, OSTREE_COMMIT_META_KEY_ENDOFLIFE, "&s", &eol); + g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_ENDOFLIFE_REBASE, "&s", &eol_rebase); checkout_basename = flatpak_dir_get_deploy_subdir (self, checksum, subpaths); real_checkoutdir = g_file_get_child (deploy_base, checkout_basename); if (g_file_query_exists (real_checkoutdir, cancellable)) - { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s branch %s already installed"), ref, checksum); - return FALSE; - } + return flatpak_fail_error (error, FLATPAK_ERROR_ALREADY_INSTALLED, + _("%s branch %s already installed"), ref, checksum); g_autofree char *template = g_strdup_printf (".%s-XXXXXX", checkout_basename); tmp_dir_template = g_file_get_child (deploy_base, template); @@ -5541,7 +6762,7 @@ checksum, cancellable, error)) { - g_prefix_error (error, _("While trying to checkout metadata subpath: ")); + g_prefix_error (error, _("While trying to checkout subpath ‘%s’: "), subpath); return FALSE; } } @@ -5637,18 +6858,32 @@ } } + metadata_file = g_file_resolve_relative_path (checkoutdir, "metadata"); + if (g_file_load_contents (metadata_file, NULL, + &metadata_contents, NULL, NULL, NULL)) + { + g_autoptr(GKeyFile) keyfile = g_key_file_new (); + if (!g_key_file_load_from_data (keyfile, + metadata_contents, + -1, + 0, error)) + return FALSE; + + application_runtime = g_key_file_get_string (keyfile, + FLATPAK_METADATA_GROUP_APPLICATION, + FLATPAK_METADATA_KEY_RUNTIME, NULL); + + if (!flatpak_check_required_version (ref, keyfile, error)) + return FALSE; + } + /* 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); if (xa_metadata != NULL) { - g_autoptr(GFile) metadata_file = g_file_resolve_relative_path (checkoutdir, "metadata"); - g_autofree char *metadata_contents = NULL; - - if (!g_file_load_contents (metadata_file, NULL, - &metadata_contents, NULL, NULL, NULL) || - strcmp (metadata_contents, xa_metadata) != 0) + if (g_strcmp0 (metadata_contents, xa_metadata) != 0) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, _("Deployed metadata does not match commit")); @@ -5765,6 +7000,15 @@ if (alt_id) g_variant_builder_add (&metadata_builder, "{s@v}", "alt-id", g_variant_new_variant (g_variant_new_string (alt_id))); + if (eol) + g_variant_builder_add (&metadata_builder, "{s@v}", "eol", + g_variant_new_variant (g_variant_new_string (eol))); + if (eol_rebase) + g_variant_builder_add (&metadata_builder, "{s@v}", "eolr", + g_variant_new_variant (g_variant_new_string (eol_rebase))); + if (application_runtime) + g_variant_builder_add (&metadata_builder, "{s@v}", "runtime", + g_variant_new_variant (g_variant_new_string (application_runtime))); deploy_data = flatpak_dir_new_deploy_data (origin, checksum, @@ -5807,25 +7051,20 @@ { 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); + flatpak_dir_system_helper_call_configure_remote (self, + 0, remote, + "", + gpg_data_v, + installation ? installation : "", + NULL, NULL); } else - ostree_repo_remote_delete (self->repo, remote, NULL, NULL); + flatpak_dir_remove_remote (self, FALSE, remote, NULL, NULL); } } @@ -5940,7 +7179,7 @@ flatpak_dir_deploy_update (FlatpakDir *self, const char *ref, const char *checksum_or_latest, - const char **opt_subpaths, + const char **opt_subpaths, GCancellable *cancellable, GError **error) { @@ -5989,8 +7228,6 @@ /* Release lock before doing possibly slow prune */ glnx_release_lock_file (&lock); - flatpak_dir_prune (self, cancellable, NULL); - if (!flatpak_dir_mark_changed (self, error)) return FALSE; @@ -6031,7 +7268,7 @@ repo_dir = g_file_get_child (cache_dir, tmpdir_name); repo_url = g_file_get_uri (repo_dir); - new_registry = flatpak_oci_registry_new (repo_url, TRUE , -1, + new_registry = flatpak_oci_registry_new (repo_url, TRUE, -1, NULL, error); if (new_registry == NULL) return NULL; @@ -6039,38 +7276,39 @@ return g_steal_pointer (&new_registry); } - static OstreeRepo * -flatpak_dir_create_system_child_repo (FlatpakDir *self, - GLnxLockFile *file_lock, - const char *optional_commit, - GError **error) +flatpak_dir_create_child_repo (FlatpakDir *self, + GFile *cache_dir, + GLnxLockFile *file_lock, + const char *optional_commit, + GError **error) { - g_autoptr(GFile) cache_dir = NULL; g_autoptr(GFile) repo_dir = NULL; g_autoptr(GFile) repo_dir_config = NULL; g_autoptr(OstreeRepo) repo = NULL; g_autofree char *tmpdir_name = NULL; g_autoptr(OstreeRepo) new_repo = NULL; g_autoptr(GKeyFile) config = NULL; - OstreeRepoMode mode = OSTREE_REPO_MODE_BARE_USER; - const char *mode_str = "bare-user"; g_autofree char *current_mode = NULL; - const char *mode_env = g_getenv ("FLATPAK_OSTREE_REPO_MODE"); GKeyFile *orig_config = NULL; g_autofree char *orig_min_free_space_percent = NULL; + g_autofree char *orig_min_free_space_size = NULL; - g_assert (!self->user); + /* We use bare-user-only here now, which means we don't need xattrs + * for the child repo. This only works as long as the pulled repo + * is valid in a bare-user-only repo, i.e. doesn't have xattrs or + * weird permissions, because then the pull into the system repo + * would complain that the checksum was wrong. However, by now all + * flatpak builds are likely to be valid, so this is fine. + */ + OstreeRepoMode mode = OSTREE_REPO_MODE_BARE_USER_ONLY; + const char *mode_str = "bare-user-only"; if (!flatpak_dir_ensure_repo (self, NULL, error)) return NULL; orig_config = ostree_repo_get_config (self->repo); - cache_dir = flatpak_ensure_system_user_cache_dir_location (error); - if (cache_dir == NULL) - return NULL; - if (!flatpak_allocate_tmpdir (AT_FDCWD, flatpak_file_get_path_cached (cache_dir), "repo-", &tmpdir_name, @@ -6084,12 +7322,6 @@ new_repo = ostree_repo_new (repo_dir); - /* Allow to override the mode when user-only is needed (e.g. live systems) */ - if (g_strcmp0 (mode_env, "user-only") == 0) { - mode = OSTREE_REPO_MODE_BARE_USER_ONLY; - mode_str = "bare-user-only"; - } - repo_dir_config = g_file_get_child (repo_dir, "config"); if (!g_file_query_exists (repo_dir_config, NULL)) { @@ -6137,14 +7369,27 @@ if (orig_min_free_space_percent) g_key_file_set_value (config, "core", "min-free-space-percent", orig_min_free_space_percent); + /* Copy the min space size value so it affects the temporary repo too */ + orig_min_free_space_size = g_key_file_get_value (orig_config, "core", "min-free-space-size", NULL); + if (orig_min_free_space_size) + g_key_file_set_value (config, "core", "min-free-space-size", orig_min_free_space_size); + if (!ostree_repo_write_config (new_repo, config, error)) return NULL; /* We need to reopen to apply the parent config */ - repo = system_ostree_repo_new (repo_dir); + if (!self->user) + repo = system_ostree_repo_new (repo_dir); + else + repo = ostree_repo_new (repo_dir); + if (!ostree_repo_open (repo, NULL, error)) return NULL; + /* We don't need to sync the child repos, they are never used for stable storage, and we + verify + fsync when importing to stable storage */ + ostree_repo_set_disable_fsync (repo, TRUE); + /* Create a commitpartial in the child repo to ensure we download everything, because any commitpartial state in the parent will not be inherited */ if (optional_commit) @@ -6159,14 +7404,32 @@ return g_steal_pointer (&repo); } +static OstreeRepo * +flatpak_dir_create_system_child_repo (FlatpakDir *self, + GLnxLockFile *file_lock, + const char *optional_commit, + GError **error) +{ + g_autoptr(GFile) cache_dir = NULL; + + g_assert (!self->user); + + cache_dir = flatpak_ensure_system_user_cache_dir_location (error); + if (cache_dir == NULL) + return NULL; + + return flatpak_dir_create_child_repo (self, cache_dir, file_lock, optional_commit, error); +} + gboolean flatpak_dir_install (FlatpakDir *self, gboolean no_pull, gboolean no_deploy, gboolean no_static_deltas, gboolean reinstall, + FlatpakRemoteState *state, const char *ref, - const char *remote_name, + const char *opt_commit, const char **opt_subpaths, OstreeAsyncProgress *progress, GCancellable *cancellable, @@ -6186,44 +7449,32 @@ const char *empty_subpaths[] = {NULL}; const char **subpaths; g_autofree char *child_repo_path = NULL; - FlatpakSystemHelper *system_helper; FlatpakHelperDeployFlags helper_flags = 0; g_autofree char *url = NULL; gboolean gpg_verify_summary; gboolean gpg_verify; - g_autofree char *collection_id = NULL; gboolean is_oci; - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - if (opt_subpaths) subpaths = opt_subpaths; else subpaths = empty_subpaths; - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return FALSE; - if (!ostree_repo_remote_get_url (self->repo, - remote_name, + state->remote_name, &url, error)) return FALSE; - if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, state->remote_name, &gpg_verify_summary, error)) return FALSE; - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return FALSE; - - if (!ostree_repo_remote_get_gpg_verify (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify (self->repo, state->remote_name, &gpg_verify, error)) return FALSE; - is_oci = flatpak_dir_get_remote_oci (self, remote_name); - + is_oci = flatpak_dir_get_remote_oci (self, state->remote_name); if (no_pull) { /* Do nothing */ @@ -6241,10 +7492,10 @@ child_repo_path = g_file_get_path (registry_file); - if (!flatpak_dir_mirror_oci (self, registry, remote_name, ref, NULL, progress, cancellable, error)) + if (!flatpak_dir_mirror_oci (self, registry, state, ref, NULL, progress, cancellable, error)) return FALSE; } - else if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) + else if ((!gpg_verify_summary && state->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 @@ -6258,17 +7509,13 @@ 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"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("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 user and hand back the resulting data to the system-helper, that trusts us due to the GPG signatures in the repo */ - g_autoptr(GBytes) summary_copy = NULL; - g_autoptr(GBytes) summary_sig_copy = NULL; - g_autoptr(GFile) summary_file = NULL; - g_autoptr(GFile) summary_sig_file = NULL; child_repo = flatpak_dir_create_system_child_repo (self, &child_repo_lock, NULL, error); if (child_repo == NULL) @@ -6276,59 +7523,17 @@ flatpak_flags |= FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA; - /* 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_name, - &summary_copy, &summary_sig_copy, - cancellable, error)) - return FALSE; - /* Don’t resolve a rev or OstreeRepoFinderResult set early; the pull * code will do this. */ - /* FIXME: Ideally we could merge these two flatpak_dir_pull() calls - * so @ref and %OSTREE_REPO_METADATA_REF are resolved atomically. - * However, pulling them separately is no worse than the old code path - * where the summary and ref were pulled separately. */ - if (!flatpak_dir_pull (self, remote_name, ref, NULL, NULL, subpaths, + if (!flatpak_dir_pull (self, state, ref, opt_commit, NULL, subpaths, child_repo, flatpak_flags, OSTREE_REPO_PULL_FLAGS_MIRROR, progress, cancellable, error)) return FALSE; -#ifdef FLATPAK_ENABLE_P2P - if (collection_id != NULL && - !flatpak_dir_pull (self, remote_name, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, - child_repo, - flatpak_flags, - OSTREE_REPO_PULL_FLAGS_MIRROR, - progress, cancellable, error)) + if (!child_repo_ensure_summary (child_repo, state, cancellable, error)) return FALSE; -#endif /* FLATPAK_ENABLE_P2P */ - - 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"); - 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; - } child_repo_path = g_file_get_path (ostree_repo_get_path (child_repo)); } @@ -6339,14 +7544,13 @@ 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 : "", - helper_flags, ref, remote_name, - (const char * const *) subpaths, - installation ? installation : "", - cancellable, - error)) + if (!flatpak_dir_system_helper_call_deploy (self, + child_repo_path ? child_repo_path : "", + helper_flags, ref, state->remote_name, + (const char * const *) subpaths, + installation ? installation : "", + cancellable, + error)) return FALSE; if (child_repo_path) @@ -6359,7 +7563,7 @@ { /* Don’t resolve a rev or OstreeRepoFinderResult set early; the pull * code will do this. */ - if (!flatpak_dir_pull (self, remote_name, ref, NULL, NULL, opt_subpaths, NULL, + if (!flatpak_dir_pull (self, state, ref, opt_commit, NULL, opt_subpaths, NULL, flatpak_flags, OSTREE_REPO_PULL_FLAGS_NONE, progress, cancellable, error)) return FALSE; @@ -6367,7 +7571,7 @@ if (!no_deploy) { - if (!flatpak_dir_deploy_install (self, ref, remote_name, opt_subpaths, + if (!flatpak_dir_deploy_install (self, ref, state->remote_name, opt_subpaths, reinstall, cancellable, error)) return FALSE; } @@ -6376,17 +7580,19 @@ } char * -flatpak_dir_ensure_bundle_remote (FlatpakDir *self, - GFile *file, - GBytes *extra_gpg_data, - char **out_ref, - char **out_metadata, - gboolean *out_created_remote, - GCancellable *cancellable, - GError **error) +flatpak_dir_ensure_bundle_remote (FlatpakDir *self, + GFile *file, + GBytes *extra_gpg_data, + char **out_ref, + char **out_checksum, + char **out_metadata, + gboolean *out_created_remote, + GCancellable *cancellable, + GError **error) { g_autofree char *ref = NULL; gboolean created_remote = FALSE; + g_autoptr(GVariant) deploy_data = NULL; g_autoptr(GVariant) metadata = NULL; g_autofree char *origin = NULL; @@ -6461,6 +7667,9 @@ if (out_ref) *out_ref = g_steal_pointer (&ref); + if (out_checksum) + *out_checksum = g_steal_pointer (&to_checksum); + if (out_metadata) *out_metadata = g_steal_pointer (&fp_metadata); @@ -6468,15 +7677,69 @@ return g_steal_pointer (&remote); } +/* If core.add-remotes-config-dir is set for this repository (which is + * not a common configuration, but it is possible), we will fail to modify + * remote configuration when using a combination of + * ostree_repo_remote_[add|change]() and ostree_repo_write_config() due to + * adding remote config in /etc/flatpak/remotes.d and also in + * /ostree/repo/config. Avoid that. + * + * FIXME: See https://github.com/flatpak/flatpak/issues/1665. In future, we + * should just write the remote config to the correct place, factoring + * core.add-remotes-config-dir in. */ +static gboolean +flatpak_dir_check_add_remotes_config_dir (FlatpakDir *self, + GError **error) +{ + g_autoptr(GError) local_error = NULL; + gboolean val; + GKeyFile *config; + + if (!flatpak_dir_maybe_ensure_repo (self, NULL, error)) + return FALSE; + + if (self->repo == NULL) + return TRUE; + + config = ostree_repo_get_config (self->repo); + + if (config == NULL) + return TRUE; + + val = g_key_file_get_boolean (config, "core", "add-remotes-config-dir", &local_error); + + if (local_error != NULL) + { + if (g_error_matches (local_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND)) + { + g_clear_error (&local_error); + val = ostree_repo_is_system (self->repo); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + } + + if (!val) + return TRUE; + + return flatpak_fail (error, + "Can’t update remote configuration on a repository with " + "core.add-remotes-config-dir=true"); +} + gboolean -flatpak_dir_install_bundle (FlatpakDir *self, - GFile *file, - const char *remote, - char **out_ref, - GCancellable *cancellable, - GError **error) +flatpak_dir_install_bundle (FlatpakDir *self, + GFile *file, + const char *remote, + char **out_ref, + GCancellable *cancellable, + GError **error) { g_autofree char *ref = NULL; + g_autoptr(GVariant) deploy_data = NULL; g_autoptr(GVariant) metadata = NULL; g_autofree char *origin = NULL; @@ -6484,22 +7747,20 @@ g_autofree char *to_checksum = NULL; gboolean gpg_verify; + if (!flatpak_dir_check_add_remotes_config_dir (self, error)) + return FALSE; + if (flatpak_dir_use_system_helper (self, NULL)) { - FlatpakSystemHelper *system_helper; const char *installation = flatpak_dir_get_id (self); - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - - g_debug ("Calling system helper: InstallBundle"); - if (!flatpak_system_helper_call_install_bundle_sync (system_helper, - flatpak_file_get_path_cached (file), - 0, remote, - installation ? installation : "", - &ref, - cancellable, - error)) + if (!flatpak_dir_system_helper_call_install_bundle (self, + flatpak_file_get_path_cached (file), + 0, remote, + installation ? installation : "", + &ref, + cancellable, + error)) return FALSE; if (out_ref) @@ -6563,7 +7824,6 @@ /* The pull succeeded, and this is an update. So, we need to update the repo config if anything changed */ - ostree_repo_remote_get_url (self->repo, remote, &old_url, @@ -6579,6 +7839,10 @@ if (new_config) { + if (!flatpak_dir_cleanup_remote_for_url_change (self, remote, + origin, cancellable, error)) + return FALSE; + if (!ostree_repo_write_config (self->repo, new_config, error)) return FALSE; } @@ -6606,6 +7870,7 @@ { gboolean ret = FALSE; guint n; + if (a == NULL && b == NULL) { ret = TRUE; @@ -6623,29 +7888,30 @@ return ret; } -char * -flatpak_dir_check_for_update (FlatpakDir *self, - const char *ref, - const char *remote_name, - const char *checksum_or_latest, - const char **opt_subpaths, - gboolean no_pull, - OstreeRepoFinderResult ***out_results, - GCancellable *cancellable, - GError **error) +gboolean +flatpak_dir_needs_update_for_commit_and_subpaths (FlatpakDir *self, + const char *remote, + const char *ref, + const char *target_commit, + const char **opt_subpaths) { g_autoptr(GVariant) deploy_data = NULL; g_autofree const char **old_subpaths = NULL; - g_autofree const char *remote_and_branch = NULL; const char **subpaths; g_autofree char *url = NULL; - g_autofree char *latest_rev = NULL; - const char *target_rev = NULL; const char *installed_commit; const char *installed_alt_id; - deploy_data = flatpak_dir_get_deploy_data (self, ref, - cancellable, NULL); + g_assert (target_commit != NULL); + + /* Never update from disabled remotes */ + if (!ostree_repo_remote_get_url (self->repo, remote, &url, NULL)) + return FALSE; + + if (*url == 0) + return FALSE; + + deploy_data = flatpak_dir_get_deploy_data (self, ref, NULL, NULL); if (deploy_data != NULL) old_subpaths = flatpak_deploy_data_get_subpaths (deploy_data); else @@ -6656,37 +7922,58 @@ else subpaths = old_subpaths; + /* Not deployed => need update */ + if (deploy_data == NULL) + return TRUE; + installed_commit = flatpak_deploy_data_get_commit (deploy_data); installed_alt_id = flatpak_deploy_data_get_alt_id (deploy_data); - if (!ostree_repo_remote_get_url (self->repo, remote_name, &url, error)) - { - return NULL; - } + /* Different target commit than deployed => update */ + if (g_strcmp0 (target_commit, installed_commit) != 0 && + g_strcmp0 (target_commit, installed_alt_id) != 0) + return TRUE; - if (*url == 0) - { - /* 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; - } + /* target commit is the same as current, but maybe something else that is different? */ + + /* Same commit, but different subpaths => update */ + if (!_g_strv_equal0 ((char **) subpaths, (char **) old_subpaths)) + return TRUE; + + /* Same subpaths and commit, no need to update */ + return FALSE; +} + +char * +flatpak_dir_check_for_update (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + const char *checksum_or_latest, + const char **opt_subpaths, + gboolean no_pull, + OstreeRepoFinderResult ***out_results, + GCancellable *cancellable, + GError **error) +{ + g_autofree const char *remote_and_branch = NULL; + g_autofree char *latest_rev = NULL; + const char *target_rev = NULL; if (no_pull) { - remote_and_branch = g_strdup_printf ("%s:%s", remote_name, ref); + remote_and_branch = g_strdup_printf ("%s:%s", state->remote_name, ref); if (!ostree_repo_resolve_rev (self->repo, remote_and_branch, FALSE, &latest_rev, NULL)) { g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s branch %s already installed"), ref, installed_commit); + _("%s branch already installed"), ref); return NULL; /* No update, because nothing to update to */ } } else { - if (!flatpak_dir_find_latest_rev (self, remote_name, ref, &latest_rev, + if (!flatpak_dir_find_latest_rev (self, state, ref, checksum_or_latest, &latest_rev, out_results, cancellable, error)) - return FALSE; + return NULL; } if (checksum_or_latest != NULL) @@ -6694,40 +7981,28 @@ else target_rev = latest_rev; - /* Not deployed => update */ - if (deploy_data == NULL) - return g_strdup (target_rev); - - /* Different target commit than deployed => update */ - if (g_strcmp0 (target_rev, installed_commit) != 0 && - g_strcmp0 (target_rev, installed_alt_id) != 0) - return g_strdup (target_rev); - - /* target rev is the same as latest, but maybe something else that is different? */ - - /* Same commit, but different subpaths => update */ - if (!_g_strv_equal0 ((char **)subpaths, (char **)old_subpaths)) + if (flatpak_dir_needs_update_for_commit_and_subpaths (self, state->remote_name, ref, target_rev, opt_subpaths)) return g_strdup (target_rev); g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - _("%s branch %s already installed"), ref, installed_commit); + _("%s branch %s already installed"), ref, target_rev); return NULL; } gboolean -flatpak_dir_update (FlatpakDir *self, - gboolean no_pull, - gboolean no_deploy, - gboolean no_static_deltas, - gboolean allow_downgrade, - const char *ref, - const char *remote_name, - const char *commit, +flatpak_dir_update (FlatpakDir *self, + gboolean no_pull, + gboolean no_deploy, + gboolean no_static_deltas, + gboolean allow_downgrade, + FlatpakRemoteState *state, + const char *ref, + const char *commit, const OstreeRepoFinderResult * const *results, - const char **opt_subpaths, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error) + const char **opt_subpaths, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error) { g_autoptr(GVariant) deploy_data = NULL; const char **subpaths = NULL; @@ -6757,34 +8032,30 @@ else subpaths = old_subpaths; - if (!ostree_repo_remote_get_url (self->repo, remote_name, &url, error)) + if (!ostree_repo_remote_get_url (self->repo, state->remote_name, &url, error)) return FALSE; if (*url == 0) return TRUE; /* Empty URL => disabled */ - is_oci = flatpak_dir_get_remote_oci (self, remote_name); + is_oci = flatpak_dir_get_remote_oci (self, state->remote_name); if (flatpak_dir_use_system_helper (self, NULL)) { const char *installation = flatpak_dir_get_id (self); g_autoptr(OstreeRepo) child_repo = NULL; g_auto(GLnxLockFile) child_repo_lock = { 0, }; - FlatpakSystemHelper *system_helper; g_autofree char *child_repo_path = NULL; FlatpakHelperDeployFlags helper_flags = 0; g_autofree char *url = NULL; gboolean gpg_verify_summary; 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"); + return flatpak_fail_error (error, FLATPAK_ERROR_DOWNGRADE, + _("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 (!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 @@ -6799,28 +8070,25 @@ return FALSE; if (!ostree_repo_remote_get_url (self->repo, - remote_name, + state->remote_name, &url, error)) return FALSE; helper_flags = FLATPAK_HELPER_DEPLOY_FLAGS_UPDATE; - if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, state->remote_name, &gpg_verify_summary, error)) return FALSE; - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return FALSE; - - if (!ostree_repo_remote_get_gpg_verify (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify (self->repo, state->remote_name, &gpg_verify, error)) return FALSE; if (no_pull) { } - else if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) + else if ((!gpg_verify_summary && state->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 @@ -6834,7 +8102,7 @@ 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"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Can't pull from untrusted non-gpg verified remote")); } else if (is_oci) { @@ -6849,7 +8117,7 @@ child_repo_path = g_file_get_path (registry_file); - if (!flatpak_dir_mirror_oci (self, registry, remote_name, ref, NULL, progress, cancellable, error)) + if (!flatpak_dir_mirror_oci (self, registry, state, ref, NULL, progress, cancellable, error)) return FALSE; } else @@ -6857,64 +8125,20 @@ /* We're pulling from a remote source, we do the network mirroring pull as a user and hand back the resulting data to the system-helper, that trusts us due to the GPG signatures in the repo */ - g_autoptr(GBytes) summary_copy = NULL; - g_autoptr(GBytes) summary_sig_copy = NULL; - g_autoptr(GFile) summary_file = NULL; - g_autoptr(GFile) summary_sig_file = NULL; child_repo = flatpak_dir_create_system_child_repo (self, &child_repo_lock, commit, error); if (child_repo == NULL) return FALSE; - /* 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_name, - &summary_copy, &summary_sig_copy, - cancellable, error)) - return FALSE; - - /* FIXME: Ideally we could merge these two flatpak_dir_pull() calls - * so @ref and %OSTREE_REPO_METADATA_REF are resolved atomically. - * However, pulling them separately is no worse than the old code path - * where the summary and ref were pulled separately. */ flatpak_flags |= FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA; - if (!flatpak_dir_pull (self, remote_name, ref, commit, results, subpaths, - child_repo, - flatpak_flags, OSTREE_REPO_PULL_FLAGS_MIRROR, - progress, cancellable, error)) - return FALSE; -#ifdef FLATPAK_ENABLE_P2P - if (collection_id != NULL && - !flatpak_dir_pull (self, remote_name, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, + if (!flatpak_dir_pull (self, state, ref, commit, results, subpaths, child_repo, flatpak_flags, OSTREE_REPO_PULL_FLAGS_MIRROR, progress, cancellable, error)) return FALSE; -#endif /* FLATPAK_ENABLE_P2P */ - 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"); - 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 (!child_repo_ensure_summary (child_repo, state, cancellable, error)) + return FALSE; child_repo_path = g_file_get_path (ostree_repo_get_path (child_repo)); } @@ -6922,14 +8146,13 @@ if (no_deploy) helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY; - g_debug ("Calling system helper: Deploy"); - if (!flatpak_system_helper_call_deploy_sync (system_helper, - child_repo_path ? child_repo_path : "", - helper_flags, ref, remote_name, - subpaths, - installation ? installation : "", - cancellable, - error)) + if (!flatpak_dir_system_helper_call_deploy (self, + child_repo_path ? child_repo_path : "", + helper_flags, ref, state->remote_name, + subpaths, + installation ? installation : "", + cancellable, + error)) return FALSE; if (child_repo_path) @@ -6940,7 +8163,7 @@ if (!no_pull) { - if (!flatpak_dir_pull (self, remote_name, ref, commit, results, subpaths, + if (!flatpak_dir_pull (self, state, ref, commit, results, subpaths, NULL, flatpak_flags, OSTREE_REPO_PULL_FLAGS_NONE, progress, cancellable, error)) return FALSE; @@ -6961,17 +8184,18 @@ } gboolean -flatpak_dir_uninstall (FlatpakDir *self, - const char *ref, +flatpak_dir_uninstall (FlatpakDir *self, + const char *ref, FlatpakHelperUninstallFlags flags, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { const char *repository; g_autofree char *current_ref = NULL; gboolean was_deployed; gboolean is_app; const char *name; + g_auto(GStrv) parts = NULL; g_auto(GLnxLockFile) lock = { 0, }; g_autoptr(GVariant) deploy_data = NULL; @@ -6985,17 +8209,12 @@ if (flatpak_dir_use_system_helper (self, NULL)) { - FlatpakSystemHelper *system_helper; const char *installation = flatpak_dir_get_id (self); - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - - g_debug ("Calling system helper: Uninstall"); - if (!flatpak_system_helper_call_uninstall_sync (system_helper, - flags, ref, - installation ? installation : "", - cancellable, error)) + if (!flatpak_dir_system_helper_call_uninstall (self, + flags, ref, + installation ? installation : "", + cancellable, error)) return FALSE; return TRUE; @@ -7014,6 +8233,38 @@ if (repository == NULL) return FALSE; + if (g_str_has_prefix (ref, "runtime/") && !force_remove) + { + g_auto(GStrv) app_refs = NULL; + g_autoptr(GPtrArray) blocking = g_ptr_array_new_with_free_func (g_free); + const char *pref = ref + strlen ("runtime/"); + int i; + + /* Look for apps that need this runtime */ + + flatpak_dir_list_refs (self, "app", &app_refs, NULL, NULL); + for (i = 0; app_refs != NULL && app_refs[i] != NULL; i++) + { + g_autoptr(GVariant) deploy_data = flatpak_dir_get_deploy_data (self, app_refs[i], NULL, NULL); + + if (deploy_data) + { + const char *app_runtime = flatpak_deploy_data_get_runtime (deploy_data); + + if (g_strcmp0 (app_runtime, pref) == 0) + g_ptr_array_add (blocking, g_strdup (app_refs[i] + strlen ("app/"))); + } + } + g_ptr_array_add (blocking, NULL); + + if (blocking->len > 1) + { + g_autofree char *joined = g_strjoinv (", ", (char **) blocking->pdata); + return flatpak_fail_error (error, FLATPAK_ERROR_RUNTIME_USED, + _("Can't remove %s, it is needed for: %s"), pref, joined); + } + } + g_debug ("dropping active ref"); if (!flatpak_dir_set_active (self, ref, NULL, cancellable, error)) return FALSE; @@ -7045,9 +8296,6 @@ flatpak_dir_prune_origin_remote (self, repository); - if (!keep_ref) - flatpak_dir_prune (self, cancellable, NULL); - flatpak_dir_cleanup_removed (self, cancellable, NULL); if (!flatpak_dir_mark_changed (self, error)) @@ -7057,6 +8305,7 @@ { g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, _("%s branch %s is not installed"), name, parts[3]); + return FALSE; } return TRUE; @@ -7280,17 +8529,16 @@ GCancellable *cancellable, GError **error) { - gboolean ret = FALSE; - g_autoptr(GFile) deploy_base = NULL; g_autoptr(GFile) checkoutdir = NULL; g_autoptr(GFile) removed_subdir = NULL; g_autoptr(GFile) removed_dir = NULL; - g_autofree char *tmpname = g_strdup_printf ("removed-%s-XXXXXX", active_id); + g_autofree char *dirname = NULL; g_autofree char *current_active = NULL; g_autoptr(GFile) change_file = NULL; g_autoptr(GError) child_error = NULL; - int i; + g_auto(GStrv) ref_parts = NULL; + int i, retry; g_assert (ref != NULL); g_assert (active_id != NULL); @@ -7302,11 +8550,11 @@ { g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, _("%s branch %s not installed"), ref, active_id); - goto out; + return FALSE; } if (!flatpak_dir_ensure_repo (self, cancellable, error)) - goto out; + return FALSE; current_active = flatpak_dir_read_active (self, ref, cancellable); if (current_active != NULL && strcmp (current_active, active_id) == 0) @@ -7320,7 +8568,7 @@ if (!flatpak_dir_list_deployed (self, ref, &deployed_ids, cancellable, error)) - goto out; + return FALSE; some_deployment = NULL; for (i = 0; deployed_ids[i] != NULL; i++) @@ -7333,20 +8581,51 @@ } if (!flatpak_dir_set_active (self, ref, some_deployment, cancellable, error)) - goto out; + return FALSE; } removed_dir = flatpak_dir_get_removed_dir (self); if (!flatpak_mkdir_p (removed_dir, cancellable, error)) - goto out; + return FALSE; - glnx_gen_temp_name (tmpname); - removed_subdir = g_file_get_child (removed_dir, tmpname); + ref_parts = g_strsplit (ref, "/", -1); + dirname = g_strdup_printf ("%s-%s", ref_parts[1], active_id); + + removed_subdir = g_file_get_child (removed_dir, dirname); + + retry = 0; + while (TRUE) + { + g_autoptr(GError) local_error = NULL; + g_autoptr(GFile) tmpdir = NULL; + g_autofree char *tmpname = NULL; + + if (flatpak_file_rename (checkoutdir, + removed_subdir, + cancellable, &local_error)) + break; + + if (!g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_EXISTS) || retry >= 10) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + retry++; + + /* Destination already existed, move that aside, as we want to use the exact + * removed dirname for the latest undeployed version */ + + tmpname = g_strdup_printf ("%s-XXXXXX", dirname); + glnx_gen_temp_name (tmpname); + tmpdir = g_file_get_child (removed_dir, tmpname); + + if (!flatpak_file_rename (removed_subdir, + tmpdir, + cancellable, error)) + return FALSE; + } - if (!flatpak_file_rename (checkoutdir, - removed_subdir, - cancellable, error)) - goto out; if (is_update) change_file = g_file_resolve_relative_path (removed_subdir, "files/.updated"); @@ -7372,9 +8651,7 @@ } } - ret = TRUE; -out: - return ret; + return TRUE; } gboolean @@ -7445,7 +8722,6 @@ /** * flatpak_dir_remove_ref: - * * @self: a #FlatpakDir * @remote_name: the name of the remote * @ref: the flatpak ref to remove @@ -7470,20 +8746,14 @@ if (flatpak_dir_use_system_helper (self, NULL)) { const char *installation = flatpak_dir_get_id (self); - FlatpakSystemHelper *system_helper = flatpak_dir_get_system_helper (self); - - /* If we don't have the system helper, we'll have to try and just remove - * the ref as an unprivileged user, which might fail later */ - if (system_helper) - { - if (!flatpak_system_helper_call_remove_local_ref_sync (system_helper, - remote_name, - ref, - installation ? installation : "", - cancellable, - error)) - return FALSE; - } + + if (!flatpak_dir_system_helper_call_remove_local_ref (self, + remote_name, + ref, + installation ? installation : "", + cancellable, + error)) + return FALSE; return TRUE; } @@ -7561,6 +8831,7 @@ gint objects_total, objects_pruned; guint64 pruned_object_size_total; g_autofree char *formatted_freed_size = NULL; + g_autoptr(GError) local_error = NULL; g_autoptr(GError) lock_error = NULL; g_auto(GLnxLockFile) lock = { 0, }; @@ -7571,18 +8842,12 @@ if (flatpak_dir_use_system_helper (self, NULL)) { const char *installation = flatpak_dir_get_id (self); - FlatpakSystemHelper *system_helper = flatpak_dir_get_system_helper (self); - /* If we don't have the system helper, we'll have to try and just remove - * the ref as an unprivileged user, which might fail later */ - if (system_helper) - { - if (!flatpak_system_helper_call_prune_local_repo_sync (system_helper, - installation ? installation : "", - cancellable, - error)) - return FALSE; - } + if (!flatpak_dir_system_helper_call_prune_local_repo (self, + installation ? installation : "", + cancellable, + error)) + return FALSE; return TRUE; } @@ -7597,7 +8862,7 @@ the shared lock operation is released and we will do a prune then */ if (g_error_matches (lock_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK)) { - g_debug ("Skipping prune do to in progress operation"); + g_debug ("Skipping prune due to in progress operation"); return TRUE; } @@ -7620,7 +8885,7 @@ ret = TRUE; - out: +out: /* There was an issue in ostree where for local pulls we don't get a .commitpartial (now fixed), which caused errors when pruning. We print these here, but don't stop processing. */ @@ -7631,6 +8896,35 @@ } +gboolean +flatpak_dir_update_summary (FlatpakDir *self, + GCancellable *cancellable, + GError **error) +{ + g_auto(GLnxLockFile) lock = { 0, }; + + if (flatpak_dir_use_system_helper (self, NULL)) + { + const char *installation = flatpak_dir_get_id (self); + + return flatpak_dir_system_helper_call_update_summary (self, + installation ? installation : "", + cancellable, + error); + } + + if (!flatpak_dir_ensure_repo (self, cancellable, error)) + return FALSE; + + /* Keep a shared repo lock to avoid prunes removing objects we're relying on + * while generating the summary. */ + if (!flatpak_dir_repo_lock (self, &lock, LOCK_SH, cancellable, error)) + return FALSE; + + g_debug ("Updating summary"); + return ostree_repo_regenerate_summary (self->repo, NULL, cancellable, error); +} + GFile * flatpak_dir_get_if_deployed (FlatpakDir *self, const char *ref, @@ -7669,14 +8963,31 @@ if (g_file_query_file_type (deploy_dir, G_FILE_QUERY_INFO_NONE, cancellable) == G_FILE_TYPE_DIRECTORY) return g_object_ref (deploy_dir); + + /* Maybe it was removed but is still living? */ + if (checksum != NULL) + { + g_autoptr(GFile) removed_dir = flatpak_dir_get_removed_dir (self); + g_autoptr(GFile) removed_deploy_dir = NULL; + g_auto(GStrv) ref_parts = NULL; + g_autofree char *dirname = NULL; + + ref_parts = g_strsplit (ref, "/", -1); + dirname = g_strdup_printf ("%s-%s", ref_parts[1], checksum); + removed_deploy_dir = g_file_get_child (removed_dir, dirname); + + if (g_file_query_file_type (removed_deploy_dir, G_FILE_QUERY_INFO_NONE, cancellable) == G_FILE_TYPE_DIRECTORY) + return g_object_ref (removed_deploy_dir); + } + return NULL; } GFile * -flatpak_dir_get_unmaintained_extension_dir_if_exists (FlatpakDir *self, - const char *name, - const char *arch, - const char *branch, +flatpak_dir_get_unmaintained_extension_dir_if_exists (FlatpakDir *self, + const char *name, + const char *arch, + const char *branch, GCancellable *cancellable) { g_autoptr(GFile) extension_dir = NULL; @@ -7693,9 +9004,9 @@ return NULL; if (g_file_info_get_is_symlink (extension_dir_info)) - return g_file_new_for_path (g_file_info_get_symlink_target (extension_dir_info)); + return g_file_new_for_path (g_file_info_get_symlink_target (extension_dir_info)); else - return g_steal_pointer (&extension_dir); + return g_steal_pointer (&extension_dir); } G_LOCK_DEFINE_STATIC (cache); @@ -7713,12 +9024,13 @@ } static CachedSummary * -cached_summary_new (GBytes *bytes, - GBytes *bytes_sig, +cached_summary_new (GBytes *bytes, + GBytes *bytes_sig, const char *remote, const char *url) { CachedSummary *summary = g_new0 (CachedSummary, 1); + summary->bytes = g_bytes_ref (bytes); if (bytes_sig) summary->bytes_sig = g_bytes_ref (bytes_sig); @@ -7729,11 +9041,11 @@ } static gboolean -flatpak_dir_lookup_cached_summary (FlatpakDir *self, - GBytes **bytes_out, - GBytes **bytes_sig_out, - const char *name, - const char *url) +flatpak_dir_lookup_cached_summary (FlatpakDir *self, + GBytes **bytes_out, + GBytes **bytes_sig_out, + const char *name, + const char *url) { CachedSummary *summary; gboolean res = FALSE; @@ -7741,7 +9053,7 @@ G_LOCK (cache); if (self->summary_cache == NULL) - self->summary_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify)cached_summary_free); + self->summary_cache = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) cached_summary_free); summary = g_hash_table_lookup (self->summary_cache, name); if (summary) @@ -7769,17 +9081,17 @@ } static void -flatpak_dir_cache_summary (FlatpakDir *self, - GBytes *bytes, - GBytes *bytes_sig, - const char *name, - const char *url) +flatpak_dir_cache_summary (FlatpakDir *self, + GBytes *bytes, + GBytes *bytes_sig, + const char *name, + const char *url) { CachedSummary *summary; /* No sense caching the summary if there isn't one */ if (!bytes) - return; + return; G_LOCK (cache); @@ -7799,53 +9111,39 @@ GCancellable *cancellable, GError **error) { - g_autofree char *oci_uri = NULL; g_autoptr(GVariant) summary = NULL; - g_autoptr(GFile) cache_dir = NULL; + g_autoptr(GFile) index_cache = NULL; + g_autofree char *index_uri = NULL; g_autoptr(GFile) summary_cache = NULL; - g_autofree char *summary_name = NULL; - g_autofree char *cache_etag = NULL; g_autofree char *self_name = NULL; g_autoptr(GError) local_error = NULL; g_autoptr(GMappedFile) mfile = NULL; g_autoptr(GBytes) cache_bytes = NULL; - if (!ostree_repo_remote_get_url (self->repo, - remote, - &oci_uri, - error)) - return FALSE; - - cache_dir = flatpak_ensure_oci_summary_cache_dir_location (error); - if (cache_dir == NULL) - return FALSE; - self_name = flatpak_dir_get_name (self); - summary_name = g_strconcat (self_name, "-", remote, NULL); - summary_cache = g_file_get_child (cache_dir, summary_name); - - mfile = g_mapped_file_new (flatpak_file_get_path_cached (summary_cache), FALSE, NULL); - if (mfile) - { - cache_bytes = g_mapped_file_get_bytes (mfile); - g_autoptr(GVariant) cached_summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, cache_bytes, TRUE)); - g_autoptr(GVariant) extensions = g_variant_get_child_value (cached_summary, 1); - g_variant_lookup (extensions, "xa.oci-etag", "s", &cache_etag); - } + index_cache = flatpak_dir_update_oci_index (self, remote, &index_uri, cancellable, error); + if (index_cache == NULL) + return FALSE; - ensure_soup_session (self); + summary_cache = flatpak_dir_get_oci_summary_location (self, remote, error); + if (summary_cache == NULL) + return FALSE; - summary = flatpak_oci_index_fetch_summary (self->soup_session, oci_uri, cache_etag, cancellable, &local_error); - if (summary == NULL) + if (check_destination_mtime (index_cache, summary_cache, cancellable)) { - if (g_error_matches (local_error, FLATPAK_OCI_ERROR, FLATPAK_OCI_ERROR_NOT_CHANGED)) + mfile = g_mapped_file_new (flatpak_file_get_path_cached (summary_cache), FALSE, NULL); + if (mfile) { - g_debug ("Using cached summary for oci remote %s", remote); + cache_bytes = g_mapped_file_get_bytes (mfile); *out_summary = g_steal_pointer (&cache_bytes); return TRUE; } + } + summary = flatpak_oci_index_make_summary (index_cache, index_uri, cancellable, &local_error); + if (summary == NULL) + { g_propagate_error (error, g_steal_pointer (&local_error)); return FALSE; } @@ -7863,7 +9161,7 @@ static gboolean flatpak_dir_remote_fetch_summary (FlatpakDir *self, - const char *name, + const char *name_or_uri, GBytes **out_summary, GBytes **out_summary_sig, GCancellable *cancellable, @@ -7871,17 +9169,18 @@ { g_autofree char *url = NULL; gboolean is_local; + g_autoptr(GError) local_error = NULL; g_autoptr(GBytes) summary = NULL; g_autoptr(GBytes) summary_sig = NULL; - if (!ostree_repo_remote_get_url (self->repo, name, &url, error)) + if (!ostree_repo_remote_get_url (self->repo, name_or_uri, &url, error)) return FALSE; - if (*url == '\0') + if (!g_str_has_prefix (name_or_uri, "file:") && flatpak_dir_get_remote_disabled (self, name_or_uri)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_DATA, - "Can't fetch summary from disabled remote ‘%s’", name); + "Can't fetch summary from disabled remote ‘%s’", name_or_uri); return FALSE; } @@ -7890,7 +9189,7 @@ /* No caching for local files */ if (!is_local) { - if (flatpak_dir_lookup_cached_summary (self, out_summary, out_summary_sig, name, url)) + if (flatpak_dir_lookup_cached_summary (self, out_summary, out_summary_sig, name_or_uri, url)) return TRUE; } @@ -7898,9 +9197,9 @@ if (error == NULL) error = &local_error; - if (flatpak_dir_get_remote_oci (self, name)) + if (flatpak_dir_get_remote_oci (self, name_or_uri)) { - if (!flatpak_dir_remote_make_oci_summary (self, name, + if (!flatpak_dir_remote_make_oci_summary (self, name_or_uri, &summary, cancellable, error)) @@ -7908,8 +9207,8 @@ } else { - g_debug ("Fetching summary file for remote ‘%s’", name); - if (!ostree_repo_remote_fetch_summary (self->repo, name, + g_debug ("Fetching summary file for remote ‘%s’", name_or_uri); + if (!ostree_repo_remote_fetch_summary (self->repo, name_or_uri, &summary, &summary_sig, cancellable, error)) @@ -7917,11 +9216,10 @@ } if (summary == NULL) - return flatpak_fail (error, "Remote listing for %s not available; server has no summary file\n" \ - "Check the URL passed to remote-add was valid\n", name); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Remote listing for %s not available; server has no summary file. Check the URL passed to remote-add was valid."), name_or_uri); if (!is_local) - flatpak_dir_cache_summary (self, summary, summary_sig, name, url); + flatpak_dir_cache_summary (self, summary, summary_sig, name_or_uri, url); *out_summary = g_steal_pointer (&summary); if (out_summary_sig) @@ -7930,87 +9228,343 @@ return TRUE; } -gboolean -flatpak_dir_remote_has_ref (FlatpakDir *self, - const char *remote, - const char *ref) +static FlatpakRemoteState * +_flatpak_dir_get_remote_state (FlatpakDir *self, + const char *remote_or_uri, + gboolean optional, + gboolean local_only, + GBytes *opt_summary, + GBytes *opt_summary_sig, + GCancellable *cancellable, + GError **error) { - g_autoptr(GVariant) summary = NULL; - g_autoptr(GError) local_error = NULL; - g_autofree char *collection_id = NULL; + g_autoptr(FlatpakRemoteState) state = flatpak_remote_state_new (); + g_autoptr(GError) my_error = NULL; + gboolean is_local; - summary = fetch_remote_summary_file (self, remote, NULL, NULL, &local_error); - if (summary == NULL) + if (error == NULL) + error = &my_error; + + if (!flatpak_dir_ensure_repo (self, cancellable, error)) + return NULL; + + state->remote_name = g_strdup (remote_or_uri); + is_local = g_str_has_prefix (remote_or_uri, "file:"); + if (!is_local) { - g_debug ("Can't get summary for remote %s: %s", remote, local_error->message); - return FALSE; + if (!flatpak_dir_has_remote (self, remote_or_uri, error)) + return NULL; + if (!repo_get_remote_collection_id (self->repo, remote_or_uri, &state->collection_id, error)) + return NULL; } - /* Derive the collection ID from the remote we are querying. This will act as - * a sanity check on the summary ref lookup. */ - if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, &local_error)) + if (local_only) { - g_debug ("Can’t get collection ID for remote %s: %s", remote, local_error->message); - return FALSE; + flatpak_fail (&state->summary_fetch_error, "Internal error, local_only state"); + flatpak_fail (&state->metadata_fetch_error, "Internal error, local_only state"); + return g_steal_pointer (&state); + } + + if (opt_summary) + { + if (opt_summary_sig) + { + /* If specified, must be valid signature */ + g_autoptr(OstreeGpgVerifyResult) gpg_result = + ostree_repo_verify_summary (self->repo, + state->remote_name, + opt_summary, + opt_summary_sig, + NULL, error); + if (gpg_result == NULL || + !ostree_gpg_verify_result_require_valid_signature (gpg_result, error)) + return NULL; + + state->summary_sig_bytes = g_bytes_ref (opt_summary_sig); + } + state->summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, + opt_summary, FALSE)); + } + else + { + g_autoptr(GError) local_error = NULL; + g_autoptr(GBytes) summary_bytes = NULL; + g_autoptr(GBytes) summary_sig_bytes = NULL; + + if (flatpak_dir_remote_fetch_summary (self, remote_or_uri, &summary_bytes, &summary_sig_bytes, + cancellable, &local_error)) + { + state->summary_sig_bytes = g_steal_pointer (&summary_sig_bytes); + state->summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, + summary_bytes, FALSE)); + } + else + { + if (optional) + { + state->summary_fetch_error = g_steal_pointer (&local_error); + g_debug ("Failed to download optional summary"); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return NULL; + } + } + } + + if (state->collection_id == NULL) + { + if (state->summary != NULL) /* In the optional case we might not have a summary */ + state->metadata = g_variant_get_child_value (state->summary, 1); + } + else + { + g_autofree char *latest_rev = NULL; + g_autoptr(GVariant) commit_v = NULL; + g_autoptr(GError) local_error = NULL; + + /* Make sure the branch is up to date, but ignore downgrade errors (see + * below for the explanation). */ + if (!_flatpak_dir_fetch_remote_state_metadata_branch (self, state, cancellable, &local_error) && + !g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_DOWNGRADE)) + { + if (optional) + { + /* This happens for instance in the case where a p2p remote is invalid (wrong signature) + and we should just silently fail to update to it. */ + state->metadata_fetch_error = g_steal_pointer (&local_error); + g_debug ("Failed to download optional metadata"); + } + else + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return NULL; + } + } + else + { + if (g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_DOWNGRADE)) + { + /* The latest metadata available is a downgrade, which means we're offline and using a + * LAN/USB source. Downgrading the metadata in the system repo would be a security + * risk, so instead ignore the downgrade and use the later metadata. There's some + * chance its information won't be accurate for the refs that are pulled, but using + * the old metadata wouldn't always be correct either because there's no guarantee the + * refs will be pulled from the same peer source as the metadata. Long term, we should + * figure out how to rely less on it. */ + g_debug ("Ignoring downgrade of ostree-metadata; using the newer one instead"); + } + + /* Look up the commit containing the latest repository metadata. */ + latest_rev = flatpak_dir_read_latest (self, remote_or_uri, OSTREE_REPO_METADATA_REF, + NULL, cancellable, error); + if (latest_rev == NULL) + return NULL; + + if (!ostree_repo_load_commit (self->repo, latest_rev, &commit_v, NULL, error)) + return NULL; + + state->metadata = g_variant_get_child_value (commit_v, 0); + } } - return flatpak_summary_lookup_ref (summary, collection_id, ref, NULL, NULL); + return g_steal_pointer (&state); +} + +FlatpakRemoteState * +flatpak_dir_get_remote_state (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_get_remote_state (self, remote, FALSE, FALSE, NULL, NULL, cancellable, error); +} + +/* This is an alternative way to get the state where the summary is + * from elsewhere. It is mainly used by the system-helper where the + * summary is from the user-mode part which downloaded an update + * + * It will verify the summary if a signature is passed in, but not + * otherwise. + **/ +FlatpakRemoteState * +flatpak_dir_get_remote_state_for_summary (FlatpakDir *self, + const char *remote, + GBytes *opt_summary, + GBytes *opt_summary_sig, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_get_remote_state (self, remote, FALSE, FALSE, opt_summary, opt_summary_sig, cancellable, error); +} + +/* This is an alternative way to get the remote state that doesn't + * error out if the summary or metadata is not available. + * For example, we want to be able to update an app even when + * we can't talk to the main repo, but there is a local (p2p/sdcard) + * source for apps, and we want to be able to deploy a ref without pulling it, + * e.g. because we are installing with FLATPAK_INSTALL_FLAGS_NO_PULL, and we + * already pulled it out of band beforehand. + */ +FlatpakRemoteState * +flatpak_dir_get_remote_state_optional (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_get_remote_state (self, remote, TRUE, FALSE, NULL, NULL, cancellable, error); +} + + +/* This doesn't do any i/o at all, just keeps track of the local details like + remote and collection-id. Useful when doing no-pull operations */ +FlatpakRemoteState * +flatpak_dir_get_remote_state_local_only (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error) +{ + return _flatpak_dir_get_remote_state (self, remote, TRUE, TRUE, NULL, NULL, cancellable, error); } -/* This duplicates ostree_repo_list_refs so it can use flatpak_dir_remote_fetch_summary - and get caching */ -/* FIXME: For command line completion support for collection–refs over P2P, - * we need a version of ostree_repo_list_collection_refs(). */ static gboolean -flatpak_dir_remote_list_refs (FlatpakDir *self, - const char *remote_name, - GHashTable **out_all_refs, - GCancellable *cancellable, - GError **error) +flatpak_dir_remote_has_ref (FlatpakDir *self, + const char *remote, + const char *ref) { - g_autoptr(GHashTable) ret_all_refs = NULL; - g_autoptr(GVariant) summary = NULL; - g_autoptr(GVariant) ref_map = NULL; - GVariantIter iter; - GVariant *child; + g_autoptr(GError) local_error = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; - ret_all_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + state = flatpak_dir_get_remote_state_optional (self, remote, NULL, &local_error); + if (state == NULL) + { + g_debug ("Can't get state for remote %s: %s", remote, local_error->message); + return FALSE; + } - summary = fetch_remote_summary_file (self, remote_name, NULL, cancellable, error); - if (summary == NULL) - return FALSE; + return flatpak_remote_state_lookup_ref (state, ref, NULL, NULL, NULL); +} - ref_map = g_variant_get_child_value (summary, 0); +static void +populate_hash_table_from_refs_map (GHashTable *ret_all_refs, GVariant *ref_map, + const gchar *collection_id) +{ + GVariant *value; + GVariantIter ref_iter; - g_variant_iter_init (&iter, ref_map); - while ((child = g_variant_iter_next_value (&iter)) != NULL) + g_variant_iter_init (&ref_iter, ref_map); + while ((value = g_variant_iter_next_value (&ref_iter)) != NULL) { + /* helper for being able to auto-free the value */ + g_autoptr(GVariant) child = value; const char *ref_name = NULL; + + g_variant_get_child (child, 0, "&s", &ref_name); + if (ref_name == NULL) + continue; + g_autoptr(GVariant) csum_v = NULL; char tmp_checksum[65]; + const guchar *csum_bytes; + FlatpakCollectionRef *ref; - g_variant_get_child (child, 0, "&s", &ref_name); + g_variant_get_child (child, 1, "(t@aya{sv})", NULL, &csum_v, NULL); + csum_bytes = ostree_checksum_bytes_peek_validate (csum_v, NULL); + if (csum_bytes == NULL) + continue; - if (ref_name != NULL) - { - const guchar *csum_bytes; + ref = flatpak_collection_ref_new (collection_id, ref_name); + ostree_checksum_inplace_from_bytes (csum_bytes, tmp_checksum); - g_variant_get_child (child, 1, "(t@aya{sv})", NULL, &csum_v, NULL); - csum_bytes = ostree_checksum_bytes_peek_validate (csum_v, error); - if (csum_bytes == NULL) - return FALSE; + g_hash_table_insert (ret_all_refs, ref, g_strdup (tmp_checksum)); + } +} + +/* This duplicates ostree_repo_remote_list_refs so it can use + * flatpak_remote_state_ensure_summary and get caching. */ +/* FIXME: For command line completion support for collection–refs over P2P, + * we need a version of ostree_repo_list_collection_refs(). */ +gboolean +flatpak_dir_list_all_remote_refs (FlatpakDir *self, + FlatpakRemoteState *state, + GHashTable **out_all_refs, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GHashTable) ret_all_refs = NULL; + g_autoptr(GVariant) ref_map = NULL; + g_autoptr(GVariant) exts = NULL; + g_autoptr(GVariant) collection_map = NULL; + const gchar *collection_id; + GVariantIter iter; - ostree_checksum_inplace_from_bytes (csum_bytes, tmp_checksum); + ret_all_refs = g_hash_table_new_full (flatpak_collection_ref_hash, + flatpak_collection_ref_equal, + (GDestroyNotify) flatpak_collection_ref_free, + g_free); + + /* If the remote has P2P enabled and we're offline, get the refs list from + * xa.cache in ostree-metadata (although it's inferior to the summary refs + * list in that it lacks checksums). */ + if (state->collection_id != NULL && state->summary == NULL) + { + g_autoptr(GVariant) xa_cache = NULL; + g_autoptr(GVariant) cache = NULL; + gsize i, n; + + if (!flatpak_remote_state_ensure_metadata (state, error)) + return FALSE; + + if (!flatpak_remote_state_lookup_repo_metadata (state, "xa.cache", "@*", &xa_cache)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No summary or Flatpak cache available for remote %s"), + state->remote_name); + + cache = g_variant_get_child_value (xa_cache, 0); + n = g_variant_n_children (cache); + for (i = 0; i < n; i++) + { + g_autoptr(GVariant) child = NULL; + g_autoptr(GVariant) cur_v = NULL; + g_autoptr(FlatpakCollectionRef) coll_ref = NULL; + const char *ref; + + child = g_variant_get_child_value (cache, i); + cur_v = g_variant_get_child_value (child, 0); + ref = g_variant_get_string (cur_v, NULL); + coll_ref = flatpak_collection_ref_new (state->collection_id, ref); - g_hash_table_insert (ret_all_refs, - g_strdup (ref_name), - g_strdup (tmp_checksum)); + g_hash_table_insert (ret_all_refs, g_steal_pointer (&coll_ref), NULL); } - g_variant_unref (child); + goto out; + } + + if (!flatpak_remote_state_ensure_summary (state, error)) + return FALSE; + + /* refs that match the main collection-id */ + ref_map = g_variant_get_child_value (state->summary, 0); + + exts = g_variant_get_child_value (state->summary, 1); + + if (!g_variant_lookup (exts, "ostree.summary.collection-id", "&s", &collection_id)) + collection_id = NULL; + + populate_hash_table_from_refs_map (ret_all_refs, ref_map, collection_id); + + /* refs that match other collection-ids */ + collection_map = g_variant_lookup_value (exts, "ostree.summary.collection-map", + G_VARIANT_TYPE ("a{sa(s(taya{sv}))}")); + if (collection_map != NULL) + { + g_variant_iter_init (&iter, collection_map); + while (g_variant_iter_loop (&iter, "{&s@a(s(taya{sv}))}", &collection_id, &ref_map)) + populate_hash_table_from_refs_map (ret_all_refs, ref_map, collection_id); } +out: *out_all_refs = g_steal_pointer (&ret_all_refs); return TRUE; @@ -8023,13 +9577,14 @@ /* Guarantees to return refs which are decomposable. */ static GPtrArray * -find_matching_refs (GHashTable *refs, - const char *opt_name, - const char *opt_branch, - const char *opt_arch, - FlatpakKinds kinds, +find_matching_refs (GHashTable *refs, + const char *opt_name, + const char *opt_branch, + const char *opt_arch, + const char *opt_collection_id, + FlatpakKinds kinds, FindMatchingRefsFlags flags, - GError **error) + GError **error) { g_autoptr(GPtrArray) matched_refs = NULL; const char **arches = flatpak_get_arches (); @@ -8043,13 +9598,13 @@ if (opt_name && !flatpak_is_valid_name (opt_name, &local_error)) { - flatpak_fail (error, "'%s' is not a valid name: %s", opt_name, local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("'%s' is not a valid name: %s"), opt_name, local_error->message); return NULL; } if (opt_branch && !flatpak_is_valid_branch (opt_branch, &local_error)) { - flatpak_fail (error, "'%s' is not a valid branch name: %s", opt_branch, local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("'%s' is not a valid branch name: %s"), opt_branch, local_error->message); return NULL; } @@ -8061,9 +9616,10 @@ g_autofree char *ref = NULL; g_auto(GStrv) parts = NULL; gboolean is_app, is_runtime; + FlatpakCollectionRef *coll_ref = key; /* Unprefix any remote name if needed */ - ostree_parse_refspec (key, NULL, &ref, NULL); + ostree_parse_refspec (coll_ref->ref_name, NULL, &ref, NULL); if (ref == NULL) continue; @@ -8088,8 +9644,11 @@ if (opt_branch != NULL && strcmp (opt_branch, parts[3]) != 0) continue; + if (opt_collection_id != NULL && strcmp (opt_collection_id, coll_ref->collection_id)) + continue; + if (flags & FIND_MATCHING_REFS_FLAGS_KEEP_REMOTE) - g_ptr_array_add (matched_refs, g_strdup (key)); + g_ptr_array_add (matched_refs, g_strdup (coll_ref->ref_name)); else g_ptr_array_add (matched_refs, g_steal_pointer (&ref)); } @@ -8099,13 +9658,14 @@ static char * -find_matching_ref (GHashTable *refs, - const char *name, - const char *opt_branch, - const char *opt_default_branch, - const char *opt_arch, - FlatpakKinds kinds, - GError **error) +find_matching_ref (GHashTable *refs, + const char *name, + const char *opt_branch, + const char *opt_default_branch, + const char *opt_arch, + const char *opt_collection_id, + FlatpakKinds kinds, + GError **error) { const char **arches = flatpak_get_arches (); const char *opt_arches[] = {opt_arch, NULL}; @@ -8124,6 +9684,7 @@ name, opt_branch, arches[i], + opt_collection_id, kinds, FIND_MATCHING_REFS_FLAGS_NONE, error); @@ -8177,32 +9738,48 @@ return NULL; } +char * +flatpak_dir_get_remote_collection_id (FlatpakDir *self, + const char *remote_name) +{ + char *collection_id = NULL; + + repo_get_remote_collection_id (self->repo, remote_name, &collection_id, NULL); + return collection_id; +} + /* FIXME: For command line completion support for collection–refs over P2P, * we need a version which works with collections. */ char ** flatpak_dir_find_remote_refs (FlatpakDir *self, - const char *remote, - const char *name, - const char *opt_branch, - const char *opt_arch, - FlatpakKinds kinds, - GCancellable *cancellable, - GError **error) + const char *remote, + const char *name, + const char *opt_branch, + const char *opt_arch, + FlatpakKinds kinds, + GCancellable *cancellable, + GError **error) { + g_autofree char *collection_id = NULL; + g_autoptr(GHashTable) remote_refs = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; GPtrArray *matched_refs; - if (!flatpak_dir_ensure_repo (self, NULL, error)) + state = flatpak_dir_get_remote_state_optional (self, remote, cancellable, error); + if (state == NULL) return NULL; - if (!flatpak_dir_remote_list_refs (self, remote, - &remote_refs, cancellable, error)) + if (!flatpak_dir_list_all_remote_refs (self, state, + &remote_refs, cancellable, error)) return NULL; + collection_id = flatpak_dir_get_remote_collection_id (self, remote); matched_refs = find_matching_refs (remote_refs, name, opt_branch, opt_arch, + collection_id, kinds, FIND_MATCHING_REFS_FLAGS_NONE, error); @@ -8210,15 +9787,16 @@ return NULL; g_ptr_array_add (matched_refs, NULL); - return (char **)g_ptr_array_free (matched_refs, FALSE); + return (char **) g_ptr_array_free (matched_refs, FALSE); } static char * -find_ref_for_refs_set (GHashTable *refs, +find_ref_for_refs_set (GHashTable *refs, const char *name, const char *opt_branch, const char *opt_default_branch, const char *opt_arch, + const char *collection_id, FlatpakKinds kinds, FlatpakKinds *out_kind, GError **error) @@ -8229,6 +9807,7 @@ opt_branch, opt_default_branch, opt_arch, + collection_id, kinds, &my_error); if (ref == NULL) @@ -8278,20 +9857,25 @@ GCancellable *cancellable, GError **error) { + g_autofree char *collection_id = NULL; g_autofree char *remote_ref = NULL; + g_autoptr(GHashTable) remote_refs = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; g_autoptr(GError) my_error = NULL; - if (!flatpak_dir_ensure_repo (self, NULL, error)) + state = flatpak_dir_get_remote_state_optional (self, remote, cancellable, error); + if (state == NULL) return NULL; - if (!flatpak_dir_remote_list_refs (self, remote, - &remote_refs, cancellable, error)) + if (!flatpak_dir_list_all_remote_refs (self, state, + &remote_refs, cancellable, error)) return NULL; + collection_id = flatpak_dir_get_remote_collection_id (self, remote); remote_ref = find_ref_for_refs_set (remote_refs, name, opt_branch, - opt_default_branch, opt_arch, kinds, - out_kind, &my_error); + opt_default_branch, opt_arch, collection_id, + kinds, out_kind, &my_error); if (!remote_ref) { if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) @@ -8312,6 +9896,41 @@ return g_steal_pointer (&remote_ref); } +static gboolean +list_collection_refs_from_ostree_repo (OstreeRepo *repo, + const char *refspec_prefix, + const char *opt_collection_id, + GHashTable **out_all_refs, + GCancellable *cancellable, + GError **error) +{ + GHashTableIter iter; + gpointer key; + GHashTable *coll_refs = NULL; + + g_autoptr(GHashTable) refs = NULL; + + /* FIXME: Use ostree_repo_list_collection_refs when it's public */ + if (!ostree_repo_list_refs (repo, refspec_prefix, &refs, cancellable, error)) + return FALSE; + + coll_refs = g_hash_table_new_full (flatpak_collection_ref_hash, + flatpak_collection_ref_equal, + (GDestroyNotify) flatpak_collection_ref_free, + NULL); + + g_hash_table_iter_init (&iter, refs); + while (g_hash_table_iter_next (&iter, &key, NULL)) + { + FlatpakCollectionRef *ref = flatpak_collection_ref_new (opt_collection_id, key); + g_hash_table_add (coll_refs, ref); + } + + *out_all_refs = coll_refs; + + return TRUE; +} + char * flatpak_dir_find_local_ref (FlatpakDir *self, const char *remote, @@ -8325,18 +9944,23 @@ GError **error) { g_autofree char *local_ref = NULL; + g_autofree char *collection_id = NULL; + g_autoptr(GHashTable) local_refs = NULL; g_autoptr(GError) my_error = NULL; + g_autofree char *refspec_prefix = g_strconcat (remote, ":.", NULL); if (!flatpak_dir_ensure_repo (self, NULL, error)) return NULL; - if (!ostree_repo_list_refs (self->repo, NULL, &local_refs, cancellable, error)) + collection_id = flatpak_dir_get_remote_collection_id (self, remote); + if (!list_collection_refs_from_ostree_repo (self->repo, refspec_prefix, collection_id, + &local_refs, cancellable, error)) return NULL; local_ref = find_ref_for_refs_set (local_refs, name, opt_branch, - opt_default_branch, opt_arch, kinds, - out_kind, &my_error); + opt_default_branch, opt_arch, + collection_id, kinds, out_kind, &my_error); if (!local_ref) { if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) @@ -8365,10 +9989,13 @@ g_autoptr(GHashTable) local_refs = NULL; int i; - if (!flatpak_dir_ensure_repo (self, NULL, error)) + if (!flatpak_dir_maybe_ensure_repo (self, NULL, error)) return NULL; - local_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + local_refs = g_hash_table_new_full (flatpak_collection_ref_hash, + flatpak_collection_ref_equal, + (GDestroyNotify) flatpak_collection_ref_free, + NULL); if (kinds & FLATPAK_KINDS_APP) { g_auto(GStrv) app_refs = NULL; @@ -8377,8 +10004,15 @@ return NULL; for (i = 0; app_refs[i] != NULL; i++) - g_hash_table_insert (local_refs, g_strdup (app_refs[i]), - GINT_TO_POINTER (1)); + { + g_autofree char *remote = NULL; + g_autofree char *collection_id = NULL; + remote = flatpak_dir_get_origin (self, app_refs[i], NULL, NULL); + if (remote != NULL) + collection_id = flatpak_dir_get_remote_collection_id (self, remote); + FlatpakCollectionRef *ref = flatpak_collection_ref_new (collection_id, app_refs[i]); + g_hash_table_add (local_refs, ref); + } } if (kinds & FLATPAK_KINDS_RUNTIME) { @@ -8388,20 +10022,27 @@ return NULL; for (i = 0; runtime_refs[i] != NULL; i++) - g_hash_table_insert (local_refs, g_strdup (runtime_refs[i]), - GINT_TO_POINTER (1)); + { + g_autofree char *remote = NULL; + g_autofree char *collection_id = NULL; + remote = flatpak_dir_get_origin (self, runtime_refs[i], NULL, NULL); + if (remote != NULL) + collection_id = flatpak_dir_get_remote_collection_id (self, remote); + FlatpakCollectionRef *ref = flatpak_collection_ref_new (collection_id, runtime_refs[i]); + g_hash_table_add (local_refs, ref); + } } return g_steal_pointer (&local_refs); } char ** -flatpak_dir_find_installed_refs (FlatpakDir *self, - const char *opt_name, - const char *opt_branch, - const char *opt_arch, +flatpak_dir_find_installed_refs (FlatpakDir *self, + const char *opt_name, + const char *opt_branch, + const char *opt_arch, FlatpakKinds kinds, - GError **error) + GError **error) { g_autoptr(GHashTable) local_refs = NULL; GPtrArray *matched_refs; @@ -8414,6 +10055,7 @@ opt_name, opt_branch, opt_arch, + NULL, kinds, FIND_MATCHING_REFS_FLAGS_NONE, error); @@ -8421,7 +10063,7 @@ return NULL; g_ptr_array_add (matched_refs, NULL); - return (char **)g_ptr_array_free (matched_refs, FALSE); + return (char **) g_ptr_array_free (matched_refs, FALSE); } @@ -8435,6 +10077,7 @@ GError **error) { g_autofree char *local_ref = NULL; + g_autoptr(GHashTable) local_refs = NULL; g_autoptr(GError) my_error = NULL; @@ -8443,7 +10086,7 @@ return NULL; local_ref = find_matching_ref (local_refs, opt_name, opt_branch, NULL, - opt_arch, kinds, &my_error); + opt_arch, NULL, kinds, &my_error); if (local_ref == NULL) { if (g_error_matches (my_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) @@ -8468,7 +10111,10 @@ } 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; } @@ -8507,7 +10153,6 @@ /** * flatpak_dir_cleanup_undeployed_refs: - * * @self: a #FlatpakDir * @cancellable: (nullable) (optional): a #GCancellable * @error: a #GError @@ -8525,18 +10170,19 @@ gboolean flatpak_dir_cleanup_undeployed_refs (FlatpakDir *self, GCancellable *cancellable, - GError **error) + GError **error) { g_autoptr(GHashTable) local_refspecs = NULL; g_autoptr(GPtrArray) local_flatpak_refspecs = NULL; g_autoptr(GPtrArray) undeployed_refs = NULL; gsize i = 0; - if (!ostree_repo_list_refs (self->repo, NULL, &local_refspecs, cancellable, error)) + if (!list_collection_refs_from_ostree_repo (self->repo, NULL, NULL, &local_refspecs, + cancellable, error)) return FALSE; local_flatpak_refspecs = find_matching_refs (local_refspecs, - NULL, NULL, NULL, + NULL, NULL, NULL, NULL, FLATPAK_KINDS_APP | FLATPAK_KINDS_RUNTIME, FIND_MATCHING_REFS_FLAGS_KEEP_REMOTE, @@ -8681,19 +10327,7 @@ static char * get_group (const char *remote_name) { - return g_strdup_printf ("remote \"%s\"", remote_name); -} - -char * -flatpak_dir_get_remote_collection_id (FlatpakDir *self, - const char *remote_name) -{ - g_autofree char *collection_id = NULL; - - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, NULL)) - return NULL; - - return g_steal_pointer (&collection_id); + return g_strdup_printf ("remote \"%s\"", remote_name); } char * @@ -8713,18 +10347,20 @@ flatpak_dir_get_remote_oci (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 *url = NULL; - if (config) - return g_key_file_get_boolean (config, group, "xa.oci", NULL); + if (!ostree_repo_remote_get_url (self->repo, + remote_name, + &url, + NULL)) + return FALSE; - return FALSE; + return url && g_str_has_prefix (url, "oci+"); } char * flatpak_dir_get_remote_main_ref (FlatpakDir *self, - const char *remote_name) + const char *remote_name) { GKeyFile *config = ostree_repo_get_config (self->repo); g_autofree char *group = get_group (remote_name); @@ -8806,8 +10442,8 @@ } gboolean -flatpak_dir_remote_has_deploys (FlatpakDir *self, - const char *remote) +flatpak_dir_remote_has_deploys (FlatpakDir *self, + const char *remote) { g_autoptr(GHashTable) refs = NULL; GHashTableIter hash_iter; @@ -8820,7 +10456,8 @@ g_hash_table_iter_init (&hash_iter, refs); while (g_hash_table_iter_next (&hash_iter, &key, NULL)) { - const char *ref = (const char *)key; + FlatpakCollectionRef *coll_ref = key; + const char *ref = coll_ref->ref_name; g_autofree char *origin = flatpak_dir_get_origin (self, ref, NULL, NULL); if (strcmp (remote, origin) == 0) @@ -8843,16 +10480,20 @@ prio_a = flatpak_dir_get_remote_prio (self, a_name); prio_b = flatpak_dir_get_remote_prio (self, b_name); - return prio_b - prio_a; + if (prio_b != prio_a) + return prio_b - prio_a; + + /* Ensure we have a well-defined order for same prio */ + return strcmp (a_name, b_name); } 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) +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; @@ -8907,16 +10548,17 @@ } static char * -create_origin_remote_config (OstreeRepo *repo, - const char *url, - const char *id, - const char *title, - const char *main_ref, - gboolean gpg_verify, - const char *collection_id, - GKeyFile **new_config) +create_origin_remote_config (OstreeRepo *repo, + const char *url, + const char *id, + const char *title, + const char *main_ref, + gboolean gpg_verify, + const char *collection_id, + GKeyFile **new_config) { g_autofree char *remote = NULL; + g_auto(GStrv) remotes = NULL; int version = 0; g_autofree char *group = NULL; @@ -8957,10 +10599,8 @@ if (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); -#endif /* FLATPAK_ENABLE_P2P */ return g_steal_pointer (&remote); } @@ -8996,13 +10636,11 @@ flatpak_dir_parse_repofile (FlatpakDir *self, const char *remote_name, gboolean from_ref, - GBytes *data, + GKeyFile *keyfile, GBytes **gpg_data_out, GCancellable *cancellable, GError **error) { - g_autoptr(GKeyFile) keyfile = g_key_file_new (); - g_autoptr(GError) local_error = NULL; g_autoptr(GBytes) gpg_data = NULL; g_autofree char *uri = NULL; g_autofree char *title = NULL; @@ -9020,18 +10658,9 @@ GKeyFile *config = g_key_file_new (); g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); - if (!g_key_file_load_from_data (keyfile, - g_bytes_get_data (data, NULL), - g_bytes_get_size (data), - 0, &local_error)) - { - flatpak_fail (error, "Invalid .flatpakref: %s\n", local_error->message); - return NULL; - } - if (!g_key_file_has_group (keyfile, source_group)) { - flatpak_fail (error, "Invalid .flatpakref\n"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid .flatpakref")); return NULL; } @@ -9039,7 +10668,7 @@ FLATPAK_REPO_URL_KEY, NULL); if (uri == NULL) { - flatpak_fail (error, "Invalid .flatpakref\n"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid .flatpakref")); return NULL; } @@ -9071,25 +10700,28 @@ decoded = g_base64_decode (gpg_key, &decoded_len); if (decoded_len < 10) /* Check some minimal size so we don't get crap */ { - flatpak_fail (error, "Invalid gpg key\n"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid gpg key")); return NULL; } gpg_data = g_bytes_new_take (decoded, decoded_len); g_key_file_set_boolean (config, group, "gpg-verify", TRUE); } + else + { + g_key_file_set_boolean (config, group, "gpg-verify", FALSE); + } -#ifdef FLATPAK_ENABLE_P2P collection_id = g_key_file_get_string (keyfile, source_group, - FLATPAK_REPO_COLLECTION_ID_KEY, NULL); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ + FLATPAK_REPO_DEPLOY_COLLECTION_ID_KEY, NULL); + if (collection_id == NULL || *collection_id == '\0') + collection_id = g_key_file_get_string (keyfile, source_group, + FLATPAK_REPO_COLLECTION_ID_KEY, NULL); if (collection_id != NULL) { if (gpg_key == NULL) { - flatpak_fail (error, "Collection ID requires GPG key to be provided"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Collection ID requires GPG key to be provided")); return NULL; } @@ -9107,26 +10739,26 @@ } static gboolean -parse_ref_file (GBytes *data, - char **name_out, - char **branch_out, - char **url_out, - char **title_out, - GBytes **gpg_data_out, +parse_ref_file (GKeyFile *keyfile, + char **name_out, + char **branch_out, + char **url_out, + char **title_out, + GBytes **gpg_data_out, gboolean *is_runtime_out, - char **collection_id_out, - GError **error) + char **collection_id_out, + GError **error) { - g_autoptr(GKeyFile) keyfile = g_key_file_new (); g_autofree char *url = NULL; g_autofree char *title = NULL; g_autofree char *name = NULL; g_autofree char *branch = NULL; g_autofree char *version = NULL; + g_autoptr(GBytes) gpg_data = NULL; gboolean is_runtime = FALSE; g_autofree char *collection_id = NULL; - char *str; + g_autofree char *str = NULL; *name_out = NULL; *branch_out = NULL; @@ -9135,27 +10767,23 @@ *gpg_data_out = NULL; *is_runtime_out = FALSE; - if (!g_key_file_load_from_data (keyfile, g_bytes_get_data (data, NULL), g_bytes_get_size (data), - 0, error)) - return FALSE; - if (!g_key_file_has_group (keyfile, FLATPAK_REF_GROUP)) - return flatpak_fail (error, "Invalid file format, no %s group", FLATPAK_REF_GROUP); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid file format, no %s group"), FLATPAK_REF_GROUP); version = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_VERSION_KEY, NULL); if (version != NULL && strcmp (version, "1") != 0) - return flatpak_fail (error, "Invalid version %s, only 1 supported", version); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid version %s, only 1 supported"), version); url = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_URL_KEY, NULL); if (url == NULL) - return flatpak_fail (error, "Invalid file format, no Url specified"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid file format, no %s specified"), FLATPAK_REF_URL_KEY); name = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_NAME_KEY, NULL); if (name == NULL) - return flatpak_fail (error, "Invalid file format, no Name specified"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid file format, no %s specified"), FLATPAK_REF_NAME_KEY); branch = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_BRANCH_KEY, NULL); @@ -9172,25 +10800,31 @@ FLATPAK_REF_GPGKEY_KEY, NULL); if (str != NULL) { - guchar *decoded; + g_autofree guchar *decoded = NULL; gsize decoded_len; str = g_strstrip (str); decoded = g_base64_decode (str, &decoded_len); if (decoded_len < 10) /* Check some minimal size so we don't get crap */ - return flatpak_fail (error, "Invalid file format, gpg key invalid"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid file format, gpg key invalid")); - gpg_data = g_bytes_new_take (decoded, decoded_len); + gpg_data = g_bytes_new_take (g_steal_pointer (&decoded), decoded_len); } -#ifdef FLATPAK_ENABLE_P2P collection_id = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, - FLATPAK_REF_COLLECTION_ID_KEY, NULL); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ + FLATPAK_REF_DEPLOY_COLLECTION_ID_KEY, NULL); + + if (collection_id == NULL || *collection_id == '\0') + { + collection_id = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, + FLATPAK_REF_COLLECTION_ID_KEY, NULL); + } + + if (collection_id != NULL && *collection_id == '\0') + collection_id = NULL; + if (collection_id != NULL && gpg_data == NULL) - return flatpak_fail (error, "Collection ID requires GPG key to be provided"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Collection ID requires GPG key to be provided")); *name_out = g_steal_pointer (&name); *branch_out = g_steal_pointer (&branch); @@ -9205,9 +10839,10 @@ gboolean flatpak_dir_create_remote_for_ref_file (FlatpakDir *self, - GBytes *data, + GKeyFile *keyfile, const char *default_arch, char **remote_name_out, + char **collection_id_out, char **ref_out, GError **error) { @@ -9222,7 +10857,7 @@ g_autofree char *collection_id = NULL; g_autoptr(GFile) deploy_dir = NULL; - if (!parse_ref_file (data, &name, &branch, &url, &title, &gpg_data, &is_runtime, &collection_id, error)) + if (!parse_ref_file (keyfile, &name, &branch, &url, &title, &gpg_data, &is_runtime, &collection_id, error)) return FALSE; ref = flatpak_compose_ref (!is_runtime, name, branch, default_arch, error); @@ -9233,8 +10868,8 @@ if (deploy_dir != NULL) { g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - is_runtime ? _("Runtime %s, branch %s is already installed") - : _("App %s, branch %s is already installed"), + is_runtime ? _("Runtime %s, branch %s is already installed") : + _("App %s, branch %s is already installed"), name, branch); return FALSE; } @@ -9250,27 +10885,39 @@ return FALSE; } + if (collection_id_out != NULL) + *collection_id_out = g_steal_pointer (&collection_id); + *remote_name_out = g_steal_pointer (&remote); - *ref_out = (char *)g_steal_pointer (&ref); + *ref_out = (char *) g_steal_pointer (&ref); return TRUE; } +/* This tries to find a pre-configured remote for the specified uri + * and (optionally) collection id. This is a bit more complex than it + * sounds, because a local remote could be configured in different + * ways for a remote repo (i.e. it could be not using collection ids, + * even though the remote specifies it, or the flatpakrepo might lack + * the collection id details). So, we use these rules: + * + * If the url is the same, it is a match even if one part lacks + * collection ids. However, if both collection ids are specified and + * differ there is no match. + * + * If the collection id is the same (and specified), its going to be + * the same remote, even if the url is different (because it could be + * some other mirror of the same repo). + */ char * -flatpak_dir_find_remote_by_uri (FlatpakDir *self, - const char *uri, - const char *collection_id) +flatpak_dir_find_remote_by_uri (FlatpakDir *self, + const char *uri, + const char *collection_id) { g_auto(GStrv) remotes = NULL; if (!flatpak_dir_ensure_repo (self, NULL, NULL)) return NULL; -#ifndef FLATPAK_ENABLE_P2P - /* If we don’t have P2P support enabled, we always want to ignore collection IDs - * in comparisons. */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ - remotes = flatpak_dir_list_enumerated_remotes (self, NULL, NULL); if (remotes) { @@ -9290,8 +10937,18 @@ if (!repo_get_remote_collection_id (self->repo, remote, &remote_collection_id, NULL)) continue; + /* Exact collection ids always match, independent of the uris used */ + if (collection_id != NULL && + remote_collection_id != NULL && + strcmp (collection_id, remote_collection_id) == 0) + return g_strdup (remote); + + /* Same repo if uris matches, unless both have collection-id + specified but different */ if (strcmp (uri, remote_uri) == 0 && - g_strcmp0 (collection_id, remote_collection_id) == 0) + !(collection_id != NULL && + remote_collection_id != NULL && + strcmp (collection_id, remote_collection_id) != 0)) return g_strdup (remote); } } @@ -9300,21 +10957,23 @@ } gboolean -flatpak_dir_has_remote (FlatpakDir *self, - const char *remote_name) +flatpak_dir_has_remote (FlatpakDir *self, + const char *remote_name, + GError **error) { 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); + if (flatpak_dir_maybe_ensure_repo (self, NULL, NULL) && + self->repo != NULL) + { + config = ostree_repo_get_config (self->repo); + if (config && g_key_file_has_group (config, group)) + return TRUE; + } - return g_key_file_has_group (config, group); + return flatpak_fail_error (error, FLATPAK_ERROR_REMOTE_NOT_FOUND, + "Remote \"%s\" not found", remote_name); } @@ -9367,7 +11026,7 @@ } g_ptr_array_add (res, NULL); - return (char **)g_ptr_array_free (g_steal_pointer (&res), FALSE); + return (char **) g_ptr_array_free (g_steal_pointer (&res), FALSE); } char ** @@ -9397,7 +11056,39 @@ g_ptr_array_add (found, NULL); - return (char **)g_ptr_array_free (g_steal_pointer (&found), FALSE); + return (char **) g_ptr_array_free (g_steal_pointer (&found), FALSE); +} + +char ** +flatpak_dir_search_for_local_dependency (FlatpakDir *self, + const char *runtime_ref, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) found = g_ptr_array_new_with_free_func (g_free); + g_auto(GStrv) remotes = NULL; + int i; + + remotes = flatpak_dir_list_enumerated_remotes (self, cancellable, error); + if (remotes == NULL) + return NULL; + + for (i = 0; remotes != NULL && remotes[i] != NULL; i++) + { + const char *remote = remotes[i]; + g_autofree char *commit = NULL; + + if (flatpak_dir_get_remote_nodeps (self, remote)) + continue; + + commit = flatpak_dir_read_latest (self, remote, runtime_ref, NULL, NULL, NULL); + if (commit != NULL) + g_ptr_array_add (found, g_strdup (remote)); + } + + g_ptr_array_add (found, NULL); + + return (char **) g_ptr_array_free (g_steal_pointer (&found), FALSE); } gboolean @@ -9408,32 +11099,28 @@ GError **error) { g_autofree char *prefix = NULL; + g_autoptr(GHashTable) refs = NULL; GHashTableIter hash_iter; gpointer key; if (flatpak_dir_use_system_helper (self, NULL)) { - FlatpakSystemHelper *system_helper; g_autoptr(GVariant) gpg_data_v = NULL; FlatpakHelperConfigureRemoteFlags flags = 0; const char *installation = flatpak_dir_get_id (self); gpg_data_v = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), "", 0, TRUE, NULL, NULL)); - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - if (force_remove) flags |= FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE; - g_debug ("Calling system helper: ConfigureRemote"); - if (!flatpak_system_helper_call_configure_remote_sync (system_helper, - flags, remote_name, - "", - gpg_data_v, - installation ? installation : "", - cancellable, error)) + if (!flatpak_dir_system_helper_call_configure_remote (self, + flags, remote_name, + "", + gpg_data_v, + installation ? installation : "", + cancellable, error)) return FALSE; return TRUE; @@ -9464,8 +11151,9 @@ cancellable, NULL); if (g_strcmp0 (origin, remote_name) == 0) - return flatpak_fail (error, "Can't remove remote '%s' with installed ref %s (at least)", - remote_name, unprefixed_refspec); + return flatpak_fail_error (error, FLATPAK_ERROR_REMOTE_USED, + _("Can't remove remote '%s' with installed ref %s (at least)"), + remote_name, unprefixed_refspec); } } } @@ -9485,6 +11173,11 @@ cancellable, error)) return FALSE; + if (flatpak_dir_get_remote_oci (self, remote_name) && + !flatpak_dir_remove_oci_files (self, remote_name, + cancellable, error)) + return FALSE; + if (!ostree_repo_remote_change (self->repo, NULL, OSTREE_REPO_REMOTE_CHANGE_DELETE, remote_name, NULL, @@ -9498,6 +11191,45 @@ return TRUE; } +static gboolean +flatpak_dir_cleanup_remote_for_url_change (FlatpakDir *self, + const char *remote_name, + const char *url, + GCancellable *cancellable, + GError **error) +{ + g_autofree char *old_url = NULL; + + /* We store things a bit differently for OCI and non-OCI remotes, + * so when changing from one to the other, we need to clean up cached + * files. + */ + if (ostree_repo_remote_get_url (self->repo, + remote_name, + &old_url, + NULL)) + { + gboolean was_oci = g_str_has_prefix (old_url, "oci+"); + gboolean will_be_oci = g_str_has_prefix (url, "oci+"); + + if (was_oci != will_be_oci) + { + if (!flatpak_dir_remove_appstream (self, remote_name, + cancellable, error)) + return FALSE; + } + + if (was_oci && !will_be_oci) + { + if (!flatpak_dir_remove_oci_files (self, remote_name, + cancellable, error)) + return FALSE; + } + } + + return TRUE; +} + gboolean flatpak_dir_modify_remote (FlatpakDir *self, const char *remote_name, @@ -9509,23 +11241,25 @@ g_autofree char *group = g_strdup_printf ("remote \"%s\"", remote_name); g_autofree char *url = NULL; g_autofree char *metalink = NULL; + g_autoptr(GKeyFile) new_config = NULL; g_auto(GStrv) keys = NULL; int i; if (strchr (remote_name, '/') != NULL) - return flatpak_fail (error, "Invalid character '/' in remote name: %s", - remote_name); + return flatpak_fail_error (error, FLATPAK_ERROR_REMOTE_NOT_FOUND, _("Invalid character '/' in remote name: %s"), + remote_name); if (!g_key_file_has_group (config, group)) - return flatpak_fail (error, "No configuration for remote %s specified", - remote_name); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No configuration for remote %s specified"), + remote_name); + if (!flatpak_dir_check_add_remotes_config_dir (self, error)) + return FALSE; if (flatpak_dir_use_system_helper (self, NULL)) { - FlatpakSystemHelper *system_helper; g_autofree char *config_data = g_key_file_to_data (config, NULL, NULL); g_autoptr(GVariant) gpg_data_v = NULL; const char *installation = flatpak_dir_get_id (self); @@ -9535,16 +11269,12 @@ else gpg_data_v = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("ay"), "", 0, TRUE, NULL, NULL)); - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - - g_debug ("Calling system helper: ConfigureRemote"); - if (!flatpak_system_helper_call_configure_remote_sync (system_helper, - 0, remote_name, - config_data, - gpg_data_v, - installation ? installation : "", - cancellable, error)) + if (!flatpak_dir_system_helper_call_configure_remote (self, + 0, remote_name, + config_data, + gpg_data_v, + installation ? installation : "", + cancellable, error)) return FALSE; return TRUE; @@ -9560,6 +11290,9 @@ if (url == NULL) url = g_strdup (""); + if (!flatpak_dir_cleanup_remote_for_url_change (self, remote_name, url, cancellable, error)) + return FALSE; + /* Add it if its not there yet */ if (!ostree_repo_remote_change (self->repo, NULL, OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS, @@ -9613,36 +11346,34 @@ gpointer user_data) { GHashTable *table = user_data; + FlatpakCollectionRef *ref = key; - return !g_hash_table_contains (table, key); + return !g_hash_table_contains (table, ref->ref_name); } gboolean -flatpak_dir_list_remote_refs (FlatpakDir *self, - const char *remote, - GHashTable **refs, - GCancellable *cancellable, - GError **error) +flatpak_dir_list_remote_refs (FlatpakDir *self, + FlatpakRemoteState *state, + GHashTable **refs, + GCancellable *cancellable, + GError **error) { g_autoptr(GError) my_error = NULL; if (error == NULL) error = &my_error; - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return FALSE; - - if (!flatpak_dir_remote_list_refs (self, remote, refs, - cancellable, error)) + if (!flatpak_dir_list_all_remote_refs (self, state, refs, + cancellable, error)) return FALSE; - if (flatpak_dir_get_remote_noenumerate (self, remote)) + if (flatpak_dir_get_remote_noenumerate (self, state->remote_name)) { g_autoptr(GHashTable) unprefixed_local_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); g_autoptr(GHashTable) local_refs = NULL; GHashTableIter hash_iter; gpointer key; - g_autofree char *refspec_prefix = g_strconcat (remote, ":.", NULL); + g_autofree char *refspec_prefix = g_strconcat (state->remote_name, ":.", NULL); /* For noenumerate remotes, only return data for already locally * available refs */ @@ -9671,107 +11402,37 @@ return TRUE; } -static GVariant * -fetch_remote_summary_file (FlatpakDir *self, - const char *remote, - GBytes **summary_sig_bytes_out, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GError) my_error = NULL; - g_autoptr(GBytes) summary_bytes = NULL; - g_autoptr(GBytes) summary_sig_bytes = NULL; - - if (error == NULL) - error = &my_error; - - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return NULL; - - if (!flatpak_dir_remote_fetch_summary (self, remote, - &summary_bytes, &summary_sig_bytes, - cancellable, error)) - return NULL; - - - if (summary_sig_bytes_out != NULL) - *summary_sig_bytes_out = g_steal_pointer (&summary_sig_bytes); - return g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, - summary_bytes, FALSE)); -} - -char * -flatpak_dir_fetch_remote_title (FlatpakDir *self, - const char *remote, - GCancellable *cancellable, - GError **error) -{ - g_autofree char *title = NULL; - g_autoptr(GError) local_error = NULL; - - if (!flatpak_dir_lookup_repo_metadata (self, remote, cancellable, &local_error, - "xa.title", "s", &title)) - { - if (local_error == NULL) - g_set_error_literal (&local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - _("Remote title not set")); - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - - return g_steal_pointer (&title); -} - -char * -flatpak_dir_fetch_remote_default_branch (FlatpakDir *self, - const char *remote, - GCancellable *cancellable, - GError **error) -{ - g_autofree char *default_branch = NULL; - g_autoptr(GError) local_error = NULL; - - if (!flatpak_dir_lookup_repo_metadata (self, remote, cancellable, &local_error, - "xa.default-branch", "s", &default_branch)) - { - if (local_error == NULL) - g_set_error_literal (&local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - _("Remote default-branch not set")); - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - - return g_steal_pointer (&default_branch); -} - gboolean -flatpak_dir_fetch_remote_repo_metadata (FlatpakDir *self, - const char *remote_name, - GCancellable *cancellable, - GError **error) +_flatpak_dir_fetch_remote_state_metadata_branch (FlatpakDir *self, + FlatpakRemoteState *state, /* This state does not have metadata filled out yet */ + GCancellable *cancellable, + GError **error) { -#ifdef FLATPAK_ENABLE_P2P FlatpakPullFlags flatpak_flags; gboolean gpg_verify; g_autofree char *checksum_from_summary = NULL; g_autofree char *checksum_from_repo = NULL; g_autofree char *refspec = NULL; + g_assert (state->collection_id != NULL); + /* We can only fetch metadata if we’re going to verify it with GPG. */ - if (!ostree_repo_remote_get_gpg_verify (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify (self->repo, state->remote_name, &gpg_verify, error)) return FALSE; if (!gpg_verify) - return flatpak_fail (error, "Can't pull from untrusted non-gpg verified remote"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Can't pull from untrusted non-gpg verified remote")); /* Look up the checksum as advertised by the summary file. If it differs from * what we currently have on disk, try and pull the updated ostree-metadata ref. * 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); - refspec = g_strdup_printf ("%s:%s", remote_name, OSTREE_REPO_METADATA_REF); + if (state->summary != NULL) + flatpak_summary_lookup_ref (state->summary, state->collection_id, + OSTREE_REPO_METADATA_REF, + &checksum_from_summary, NULL); + + refspec = g_strdup_printf ("%s:%s", state->remote_name, OSTREE_REPO_METADATA_REF); if (!ostree_repo_resolve_rev (self->repo, refspec, TRUE, &checksum_from_repo, error)) return FALSE; @@ -9793,40 +11454,28 @@ const char *installation = flatpak_dir_get_id (self); const char *subpaths[] = {NULL}; g_autofree char *child_repo_path = NULL; - FlatpakSystemHelper *system_helper; FlatpakHelperDeployFlags helper_flags = 0; g_autofree char *url = NULL; gboolean gpg_verify_summary; gboolean gpg_verify; - g_autofree char *collection_id = NULL; gboolean is_oci; - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return FALSE; - if (!ostree_repo_remote_get_url (self->repo, - remote_name, + state->remote_name, &url, error)) return FALSE; - if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify_summary (self->repo, state->remote_name, &gpg_verify_summary, error)) return FALSE; - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return FALSE; - - if (!ostree_repo_remote_get_gpg_verify (self->repo, remote_name, + if (!ostree_repo_remote_get_gpg_verify (self->repo, state->remote_name, &gpg_verify, error)) return FALSE; - is_oci = flatpak_dir_get_remote_oci (self, remote_name); - - if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) + is_oci = flatpak_dir_get_remote_oci (self, state->remote_name); + if ((!gpg_verify_summary && state->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 @@ -9840,23 +11489,11 @@ 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"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Can't pull from untrusted non-gpg verified remote")); } else if (is_oci) { - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(GFile) registry_file = NULL; - - registry = flatpak_dir_create_system_child_oci_registry (self, &child_repo_lock, error); - if (registry == NULL) - return FALSE; - - registry_file = g_file_new_for_uri (flatpak_oci_registry_get_uri (registry)); - - child_repo_path = g_file_get_path (registry_file); - - if (!flatpak_dir_mirror_oci (self, registry, remote_name, OSTREE_REPO_METADATA_REF, NULL, NULL, cancellable, error)) - return FALSE; + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No metadata branch for OCI")); } else { @@ -9867,26 +11504,28 @@ if (child_repo == NULL) return FALSE; - if (!flatpak_dir_pull (self, remote_name, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, + if (!flatpak_dir_pull (self, state, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, child_repo, flatpak_flags, OSTREE_REPO_PULL_FLAGS_MIRROR, NULL, cancellable, error)) return FALSE; + if (!child_repo_ensure_summary (child_repo, state, cancellable, error)) + return FALSE; + child_repo_path = g_file_get_path (ostree_repo_get_path (child_repo)); } helper_flags |= FLATPAK_HELPER_DEPLOY_FLAGS_NO_DEPLOY; - g_debug ("Calling system helper: Deploy"); - if (!flatpak_system_helper_call_deploy_sync (system_helper, - child_repo_path ? child_repo_path : "", - helper_flags, OSTREE_REPO_METADATA_REF, remote_name, - (const char * const *) subpaths, - installation ? installation : "", - cancellable, - error)) + if (!flatpak_dir_system_helper_call_deploy (self, + child_repo_path ? child_repo_path : "", + helper_flags, OSTREE_REPO_METADATA_REF, state->remote_name, + (const char * const *) subpaths, + installation ? installation : "", + cancellable, + error)) return FALSE; if (child_repo_path) @@ -9895,26 +11534,27 @@ return TRUE; } - if (!flatpak_dir_pull (self, remote_name, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, NULL, + if (!flatpak_dir_pull (self, state, OSTREE_REPO_METADATA_REF, NULL, NULL, NULL, NULL, flatpak_flags, OSTREE_REPO_PULL_FLAGS_NONE, NULL, cancellable, error)) return FALSE; return TRUE; -#else /* if !FLATPAK_ENABLE_P2P */ - g_assert_not_reached (); -#endif /* FLATPAK_ENABLE_P2P */ } -static gboolean -flatpak_dir_update_remote_configuration_for_dict (FlatpakDir *self, - const char *remote, - GVariant *metadata, - gboolean dry_run, - gboolean *has_changed_out, - GCancellable *cancellable, - GError **error) -{ +gboolean +flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, + FlatpakRemoteState *remote_state, + gboolean dry_run, + gboolean *has_changed_out, + GCancellable *cancellable, + GError **error) +{ +/* FIXME: Remove this check when we depend on ostree 2018.9 */ +#ifndef OSTREE_META_KEY_DEPLOY_COLLECTION_ID +#define OSTREE_META_KEY_DEPLOY_COLLECTION_ID "ostree.deploy-collection-id" +#endif + /* We only support those configuration parameters that can be set in the server when building the repo (see the flatpak_repo_set_* () family of functions) */ @@ -9923,7 +11563,7 @@ "xa.default-branch", "xa.gpg-keys", "xa.redirect-url", - "xa.collection-id", + OSTREE_META_KEY_DEPLOY_COLLECTION_ID, NULL }; @@ -9933,7 +11573,7 @@ updated_params = g_ptr_array_new_with_free_func (g_free); - g_variant_iter_init (&iter, metadata); + g_variant_iter_init (&iter, remote_state->metadata); if (g_variant_iter_n_children (&iter) > 0) { GVariant *value_var = NULL; @@ -9961,12 +11601,12 @@ } else if (g_variant_is_of_type (value_var, G_VARIANT_TYPE_STRING)) { - const char *value = g_variant_get_string(value_var, NULL); + const char *value = g_variant_get_string (value_var, NULL); if (value != NULL && *value != 0) { if (strcmp (key, "xa.redirect-url") == 0) g_ptr_array_add (updated_params, g_strdup ("url")); - else if (strcmp (key, "xa.collection-id") == 0) + else if (strcmp (key, OSTREE_META_KEY_DEPLOY_COLLECTION_ID) == 0) g_ptr_array_add (updated_params, g_strdup ("collection-id")); else g_ptr_array_add (updated_params, g_strdup (key)); @@ -9981,127 +11621,68 @@ } if (updated_params->len > 0) - { - g_autoptr(GKeyFile) config = NULL; - g_autofree char *group = NULL; - gboolean has_changed = FALSE; - int i; - - config = ostree_repo_copy_config (flatpak_dir_get_repo (self)); - group = g_strdup_printf ("remote \"%s\"", remote); - - i = 0; - while (i < (updated_params->len - 1)) - { - /* This array should have an even number of elements with - keys in the odd positions and values on even ones. */ - const char *key = g_ptr_array_index (updated_params, i); - const char *new_val = g_ptr_array_index (updated_params, i+1); - g_autofree char *current_val = NULL; - g_autofree char *is_set_key = g_strconcat (key, "-is-set", NULL); - gboolean is_set = FALSE; - - is_set = g_key_file_get_boolean (config, group, is_set_key, NULL); - if (!is_set) - { - current_val = g_key_file_get_string (config, group, key, NULL); - if ((!g_str_equal (key, "collection-id") && - g_strcmp0 (current_val, new_val) != 0) || - (g_str_equal (key, "collection-id") && - (current_val == NULL || *current_val == '\0') && - new_val != NULL && *new_val != '\0')) - { - has_changed = TRUE; - g_key_file_set_string (config, group, key, new_val); - - /* Special case for collection-id: if it’s set, gpg-verify-summary - * must be set to false. The logic above ensures that the - * collection-id is only set if we’re transitioning from an - * unset to a set collection-ID. We *must not* allow the - * collection ID to be changed from one set value to another - * without the user manually verifying it; or a malicious - * repository could assume the collection ID of another without - * the user’s consent. */ - if (g_str_equal (key, "collection-id") && - new_val != NULL && *new_val != '\0') - g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); - } - } - - i += 2; - } - - if (has_changed_out) - *has_changed_out = has_changed; - - if (dry_run || !has_changed) - return TRUE; - - /* Update the local remote configuration with the updated info. */ - if (!flatpak_dir_modify_remote (self, remote, config, gpg_keys, cancellable, error)) - return FALSE; - } + { + g_autoptr(GKeyFile) config = NULL; + g_autofree char *group = NULL; + gboolean has_changed = FALSE; + int i; - return TRUE; -} + config = ostree_repo_copy_config (flatpak_dir_get_repo (self)); + group = g_strdup_printf ("remote \"%s\"", remote_state->remote_name); -gboolean -flatpak_dir_update_remote_configuration_for_summary (FlatpakDir *self, - const char *remote, - GVariant *summary, - gboolean dry_run, - gboolean *has_changed_out, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GVariant) extensions = NULL; + i = 0; + while (i < (updated_params->len - 1)) + { + /* This array should have an even number of elements with + keys in the odd positions and values on even ones. */ + const char *key = g_ptr_array_index (updated_params, i); + const char *new_val = g_ptr_array_index (updated_params, i + 1); + g_autofree char *current_val = NULL; + g_autofree char *is_set_key = g_strconcat (key, "-is-set", NULL); + gboolean is_set = FALSE; + + is_set = g_key_file_get_boolean (config, group, is_set_key, NULL); + if (!is_set) + { + current_val = g_key_file_get_string (config, group, key, NULL); + if ((!g_str_equal (key, "collection-id") && + g_strcmp0 (current_val, new_val) != 0) || + (g_str_equal (key, "collection-id") && + (current_val == NULL || *current_val == '\0') && + new_val != NULL && *new_val != '\0')) + { + has_changed = TRUE; + g_key_file_set_string (config, group, key, new_val); - extensions = g_variant_get_child_value (summary, 1); + /* Special case for collection-id: if it’s set, gpg-verify-summary + * must be set to false. The logic above ensures that the + * collection-id is only set if we’re transitioning from an + * unset to a set collection-ID. We *must not* allow the + * collection ID to be changed from one set value to another + * without the user manually verifying it; or a malicious + * repository could assume the collection ID of another without + * the user’s consent. */ + if (g_str_equal (key, "collection-id") && + new_val != NULL && *new_val != '\0') + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + } + } - return flatpak_dir_update_remote_configuration_for_dict (self, remote, extensions, - dry_run, has_changed_out, - cancellable, error); -} + i += 2; + } -gboolean -flatpak_dir_update_remote_configuration_for_repo_metadata (FlatpakDir *self, - const char *remote, - GVariant *summary, - gboolean dry_run, - gboolean *has_changed_out, - GCancellable *cancellable, - GError **error) -{ -#ifdef FLATPAK_ENABLE_P2P - g_autofree char *latest_rev = NULL; - g_autoptr(GVariant) commit_v = NULL; - g_autoptr(GVariant) metadata = NULL; - g_autofree char *collection_id = NULL; + if (has_changed_out) + *has_changed_out = has_changed; - /* Derive the collection ID from the remote we are querying. This will act as - * a sanity check on the summary ref lookup. */ - if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) - return FALSE; + if (dry_run || !has_changed) + return TRUE; - if (!flatpak_summary_lookup_ref (summary, collection_id, OSTREE_REPO_METADATA_REF, &latest_rev, NULL)) - { - 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); + /* Update the local remote configuration with the updated info. */ + if (!flatpak_dir_modify_remote (self, remote_state->remote_name, config, gpg_keys, cancellable, error)) + return FALSE; } - if (!ostree_repo_load_commit (self->repo, latest_rev, &commit_v, NULL, error)) - return FALSE; - - metadata = g_variant_get_child_value (commit_v, 0); - - return flatpak_dir_update_remote_configuration_for_dict (self, remote, metadata, - dry_run, has_changed_out, - cancellable, error); -#else /* if !FLATPAK_ENABLE_P2P */ - g_assert_not_reached (); -#endif /* FLATPAK_ENABLE_P2P */ + return TRUE; } gboolean @@ -10110,27 +11691,19 @@ GCancellable *cancellable, GError **error) { - g_autoptr(GVariant) summary = NULL; - g_autoptr(GBytes) summary_sig_bytes = NULL; gboolean is_oci; - g_autofree char *collection_id = NULL; + + g_autoptr(FlatpakRemoteState) state = NULL; if (flatpak_dir_get_remote_disabled (self, remote)) return TRUE; is_oci = flatpak_dir_get_remote_oci (self, remote); - if (is_oci) - return TRUE; - - if (!repo_get_remote_collection_id (self->repo, remote, &collection_id, error)) - return FALSE; - - summary = fetch_remote_summary_file (self, remote, &summary_sig_bytes, cancellable, error); - if (summary == NULL) - return FALSE; + if (is_oci) + return TRUE; - if (collection_id != NULL && - !flatpak_dir_fetch_remote_repo_metadata (self, remote, cancellable, error)) + state = flatpak_dir_get_remote_state (self, remote, cancellable, error); + if (state == NULL) return FALSE; if (flatpak_dir_use_system_helper (self, NULL)) @@ -10145,19 +11718,16 @@ if (!ostree_repo_remote_get_gpg_verify (self->repo, remote, &gpg_verify, error)) return FALSE; - if ((!gpg_verify_summary && collection_id == NULL) || !gpg_verify) + if ((!gpg_verify_summary && state->collection_id == NULL) || !gpg_verify) { g_debug ("Ignoring automatic updates for system-helper remotes without gpg signatures"); return TRUE; } - if ((collection_id == NULL && - !flatpak_dir_update_remote_configuration_for_summary (self, remote, summary, TRUE, &has_changed, cancellable, error)) || - (collection_id != NULL && - !flatpak_dir_update_remote_configuration_for_repo_metadata (self, remote, summary, TRUE, &has_changed, cancellable, error))) + if (!flatpak_dir_update_remote_configuration_for_state (self, state, TRUE, &has_changed, cancellable, error)) return FALSE; - if (collection_id == NULL && summary_sig_bytes == NULL) + if (state->collection_id == NULL && state->summary_sig_bytes == NULL) { g_debug ("Can't update remote configuration as user, no GPG signature"); return TRUE; @@ -10165,52 +11735,45 @@ if (has_changed) { - g_autoptr(GBytes) bytes = g_variant_get_data_as_bytes (summary); + g_autoptr(GBytes) bytes = g_variant_get_data_as_bytes (state->summary); glnx_autofd int summary_fd = -1; g_autofree char *summary_path = NULL; glnx_autofd int summary_sig_fd = -1; g_autofree char *summary_sig_path = NULL; - FlatpakSystemHelper *system_helper; const char *installation; - system_helper = flatpak_dir_get_system_helper (self); - g_assert (system_helper != NULL); - summary_fd = g_file_open_tmp ("remote-summary.XXXXXX", &summary_path, error); if (summary_fd == -1) return FALSE; if (glnx_loop_write (summary_fd, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes)) < 0) return glnx_throw_errno (error); - if (summary_sig_bytes != NULL) + if (state->summary_sig_bytes != NULL) { summary_sig_fd = g_file_open_tmp ("remote-summary-sig.XXXXXX", &summary_sig_path, error); if (summary_sig_fd == -1) return FALSE; - if (glnx_loop_write (summary_sig_fd, g_bytes_get_data (summary_sig_bytes, NULL), g_bytes_get_size (summary_sig_bytes)) < 0) + if (glnx_loop_write (summary_sig_fd, g_bytes_get_data (state->summary_sig_bytes, NULL), g_bytes_get_size (state->summary_sig_bytes)) < 0) return glnx_throw_errno (error); } installation = flatpak_dir_get_id (self); - g_debug ("Calling system helper: UpdateRemote"); - if (!flatpak_system_helper_call_update_remote_sync (system_helper, 0, remote, - installation ? installation : "", - summary_path, summary_sig_path, - cancellable, error)) + if (!flatpak_dir_system_helper_call_update_remote (self, 0, remote, + installation ? installation : "", + summary_path, summary_sig_path ? summary_sig_path : "", + cancellable, error)) return FALSE; unlink (summary_path); - unlink (summary_sig_path); + if (summary_sig_path) + unlink (summary_sig_path); } return TRUE; } - if (collection_id == NULL) - return flatpak_dir_update_remote_configuration_for_summary (self, remote, summary, FALSE, NULL, cancellable, error); - else - return flatpak_dir_update_remote_configuration_for_repo_metadata (self, remote, summary, FALSE, NULL, cancellable, error); + return flatpak_dir_update_remote_configuration_for_state (self, state, FALSE, NULL, cancellable, error); } @@ -10226,6 +11789,7 @@ 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)) @@ -10239,7 +11803,7 @@ 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, + NULL, NULL, cancellable, error); if (bytes == NULL) return NULL; @@ -10260,14 +11824,23 @@ g_autoptr(GVariant) commit_variant = NULL; g_autofree char *latest_commit = NULL; g_autoptr(GVariant) commit_metadata = NULL; + g_autoptr(FlatpakRemoteState) state = 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) + state = flatpak_dir_get_remote_state (self, remote_name, cancellable, error); + if (state == NULL) return NULL; + + flatpak_remote_state_lookup_ref (state, ref, &latest_commit, NULL, error); + if (latest_commit == NULL) + { + if (error != NULL && *error == NULL) + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Couldn't find latest checksum for ref %s in remote %s"), + ref, state->remote_name); + return NULL; + } + opt_commit = latest_commit; } @@ -10293,9 +11866,9 @@ 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))) + !g_strv_contains ((const char * const *) commit_refs, ref))) { - flatpak_fail (error, "commit has no requested ref ‘%s’ in ref binding metadata", ref); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Commit has no requested ref ‘%s’ in ref binding metadata"), ref); return NULL; } } @@ -10306,66 +11879,6 @@ return g_steal_pointer (&commit_variant); } - -gboolean -flatpak_dir_fetch_ref_cache (FlatpakDir *self, - const char *remote_name, - const char *ref, - guint64 *download_size, - guint64 *installed_size, - char **metadata, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GVariant) cache_v = NULL; - g_autoptr(GVariant) cache = NULL; - g_autoptr(GVariant) res = NULL; - g_autoptr(GVariant) refdata = NULL; - int pos; - g_autoptr(GError) local_error = NULL; - - if (!flatpak_dir_lookup_repo_metadata (self, remote_name, cancellable, &local_error, - "xa.cache", "@*", &cache_v)) - { - if (local_error == NULL) - g_set_error_literal (&local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - _("No flatpak cache in remote summary")); - g_propagate_error (error, g_steal_pointer (&local_error)); - return FALSE; - } - - cache = g_variant_get_child_value (cache_v, 0); - - if (!flatpak_variant_bsearch_str (cache, ref, &pos)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - _("No entry for %s in remote summary flatpak cache "), ref); - return FALSE; - } - - refdata = g_variant_get_child_value (cache, pos); - res = g_variant_get_child_value (refdata, 1); - - if (installed_size) - { - guint64 v; - g_variant_get_child (res, 0, "t", &v); - *installed_size = GUINT64_FROM_BE (v); - } - - if (download_size) - { - guint64 v; - g_variant_get_child (res, 1, "t", &v); - *download_size = GUINT64_FROM_BE (v); - } - - if (metadata) - g_variant_get_child (res, 2, "s", metadata); - - return TRUE; -} - void flatpak_related_free (FlatpakRelated *self) { @@ -10378,15 +11891,16 @@ static void add_related (FlatpakDir *self, - GPtrArray *related, + GPtrArray *related, const char *extension, const char *extension_collection_id, const char *extension_ref, const char *checksum, - gboolean no_autodownload, + gboolean no_autodownload, const char *download_if, - gboolean autodelete, - gboolean locale_subset) + const char *autoprune_unless, + gboolean autodelete, + gboolean locale_subset) { g_autoptr(GVariant) deploy_data = NULL; g_autofree const char **old_subpaths = NULL; @@ -10395,6 +11909,7 @@ FlatpakRelated *rel; gboolean download; gboolean delete = autodelete; + gboolean auto_prune = FALSE; g_auto(GStrv) ref_parts = g_strsplit (extension_ref, "/", -1); g_autoptr(GFile) unmaintained_path = NULL; @@ -10409,6 +11924,9 @@ flatpak_extension_matches_reason (ref_parts[1], download_if, !no_autodownload) || deploy_data != NULL; + if (!flatpak_extension_matches_reason (ref_parts[1], autoprune_unless, TRUE)) + auto_prune = TRUE; + /* Don't download if there is an unmaintained extension already installed */ unmaintained_path = flatpak_find_unmaintained_extension_dir_if_exists (ref_parts[1], @@ -10418,7 +11936,7 @@ { g_debug ("Skipping related extension ‘%s’ because it is already " "installed as an unmaintained extension in ‘%s’.", - ref_parts[1], g_file_get_path (unmaintained_path)); + ref_parts[1], flatpak_file_get_path_cached (unmaintained_path)); download = FALSE; } @@ -10443,7 +11961,7 @@ delete = TRUE; } - subpaths = flatpak_subpaths_merge ((char **)old_subpaths, extra_subpaths); + subpaths = flatpak_subpaths_merge ((char **) old_subpaths, extra_subpaths); rel = g_new0 (FlatpakRelated, 1); rel->collection_id = g_strdup (extension_collection_id); @@ -10452,35 +11970,32 @@ rel->subpaths = g_steal_pointer (&subpaths); rel->download = download; rel->delete = delete; + rel->auto_prune = auto_prune; g_ptr_array_add (related, rel); } GPtrArray * -flatpak_dir_find_remote_related (FlatpakDir *self, - const char *ref, - const char *remote_name, - GCancellable *cancellable, - GError **error) +flatpak_dir_find_remote_related_for_metadata (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + GKeyFile *metakey, + GCancellable *cancellable, + GError **error) { - g_autoptr(GVariant) summary = NULL; - g_autofree char *metadata = NULL; - g_autoptr(GKeyFile) metakey = g_key_file_new (); int i; + g_auto(GStrv) parts = NULL; - g_autoptr(GPtrArray) related = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_related_free); + g_autoptr(GPtrArray) related = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_related_free); g_autofree char *url = NULL; - g_autofree char *collection_id = NULL; + g_auto(GStrv) groups = NULL; parts = flatpak_decompose_ref (ref, error); if (parts == NULL) return NULL; - if (!flatpak_dir_ensure_repo (self, cancellable, error)) - return NULL; - if (!ostree_repo_remote_get_url (self->repo, - remote_name, + state->remote_name, &url, error)) return FALSE; @@ -10488,85 +12003,92 @@ if (*url == 0) return g_steal_pointer (&related); /* Empty url, silently disables updates */ - /* Derive the collection ID from the remote we are querying. This will act as - * a sanity check on the summary ref lookup. */ - if (!repo_get_remote_collection_id (self->repo, remote_name, &collection_id, error)) - return NULL; - - summary = fetch_remote_summary_file (self, remote_name, NULL, cancellable, error); - if (summary == NULL) - return NULL; - - if (flatpak_dir_fetch_ref_cache (self, remote_name, ref, - NULL, NULL, &metadata, - NULL, NULL) && - g_key_file_load_from_data (metakey, metadata, -1, 0, NULL)) + groups = g_key_file_get_groups (metakey, NULL); + for (i = 0; groups[i] != NULL; i++) { - g_auto(GStrv) groups = NULL; + char *tagged_extension; - groups = g_key_file_get_groups (metakey, NULL); - for (i = 0; groups[i] != NULL; i++) + if (g_str_has_prefix (groups[i], FLATPAK_METADATA_GROUP_PREFIX_EXTENSION) && + *(tagged_extension = (groups[i] + strlen (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION))) != 0) { - char *extension; + g_autofree char *extension = NULL; + g_autofree char *version = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_VERSION, NULL); + g_auto(GStrv) versions = g_key_file_get_string_list (metakey, groups[i], + FLATPAK_METADATA_KEY_VERSIONS, + NULL, NULL); + gboolean subdirectories = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_SUBDIRECTORIES, NULL); + gboolean no_autodownload = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD, NULL); + g_autofree char *download_if = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_DOWNLOAD_IF, NULL); + g_autofree char *autoprune_unless = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_AUTOPRUNE_UNLESS, NULL); + gboolean autodelete = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_AUTODELETE, NULL); + gboolean locale_subset = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_LOCALE_SUBSET, NULL); + g_autofree char *extension_collection_id = NULL; + const char *default_branches[] = { NULL, NULL}; + const char **branches; + g_autofree char *checksum = NULL; + int branch_i; - if (g_str_has_prefix (groups[i], FLATPAK_METADATA_GROUP_PREFIX_EXTENSION) && - *(extension = (groups[i] + strlen (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION))) != 0) - { - g_autofree char *version = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_VERSION, NULL); - gboolean subdirectories = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_SUBDIRECTORIES, NULL); - gboolean no_autodownload = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD, NULL); - g_autofree char *download_if = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_DOWNLOAD_IF, NULL); - gboolean autodelete = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_AUTODELETE, NULL); - gboolean locale_subset = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_LOCALE_SUBSET, NULL); - g_autofree char *extension_collection_id = NULL; - const char *branch; - g_autofree char *extension_ref = NULL; - g_autofree char *checksum = NULL; + /* Parse actual extension name */ + flatpak_parse_extension_with_tag (tagged_extension, &extension, NULL); + if (versions) + branches = (const char **) versions; + else + { if (version) - branch = version; + default_branches[0] = version; else - branch = parts[3]; + default_branches[0] = parts[3]; + branches = default_branches; + } -#ifdef FLATPAK_ENABLE_P2P - extension_collection_id = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_COLLECTION_ID, NULL); -#endif /* FLATPAK_ENABLE_P2P */ - - /* For the moment, none of the related ref machinery handles - * collection IDs which don’t match the original ref. */ - if (extension_collection_id != NULL && *extension_collection_id != '\0' && - g_strcmp0 (extension_collection_id, collection_id) != 0) - { - g_debug ("Skipping related extension ‘%s’ because it’s in collection " - "‘%s’ which does not match the current remote ‘%s’.", - extension, extension_collection_id, collection_id); - continue; - } + extension_collection_id = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_COLLECTION_ID, NULL); + + /* For the moment, none of the related ref machinery handles + * collection IDs which don’t match the original ref. */ + if (extension_collection_id != NULL && *extension_collection_id != '\0' && + g_strcmp0 (extension_collection_id, state->collection_id) != 0) + { + g_debug ("Skipping related extension ‘%s’ because it’s in collection " + "‘%s’ which does not match the current remote ‘%s’.", + extension, extension_collection_id, state->collection_id); + continue; + } - g_clear_pointer (&extension_collection_id, g_free); - extension_collection_id = g_strdup (collection_id); + g_clear_pointer (&extension_collection_id, g_free); + extension_collection_id = g_strdup (state->collection_id); + + for (branch_i = 0; branches[branch_i] != NULL; branch_i++) + { + g_autofree char *extension_ref = NULL; + const char *branch = branches[branch_i]; extension_ref = g_build_filename ("runtime", extension, parts[2], branch, NULL); - if (flatpak_summary_lookup_ref (summary, extension_collection_id, extension_ref, &checksum, NULL)) + if (flatpak_remote_state_lookup_ref (state, extension_ref, &checksum, NULL, NULL)) { - add_related (self, related, extension, extension_collection_id, extension_ref, checksum, no_autodownload, download_if, autodelete, locale_subset); + add_related (self, related, extension, extension_collection_id, extension_ref, checksum, + no_autodownload, download_if, autoprune_unless, autodelete, locale_subset); } else if (subdirectories) { - g_auto(GStrv) refs = flatpak_summary_match_subrefs (summary, extension_collection_id, extension_ref); + g_auto(GStrv) refs = flatpak_remote_state_match_subrefs (state, extension_ref); int j; for (j = 0; refs[j] != NULL; j++) { - if (flatpak_summary_lookup_ref (summary, extension_collection_id, refs[j], &checksum, NULL)) - add_related (self, related, extension, extension_collection_id, refs[j], checksum, no_autodownload, download_if, autodelete, locale_subset); + g_autofree char *subref_checksum = NULL; + + if (flatpak_remote_state_lookup_ref (state, refs[j], &subref_checksum, NULL, NULL)) + add_related (self, related, extension, extension_collection_id, refs[j], subref_checksum, + no_autodownload, download_if, autoprune_unless, autodelete, locale_subset); } } } @@ -10576,12 +12098,52 @@ return g_steal_pointer (&related); } + +GPtrArray * +flatpak_dir_find_remote_related (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + GCancellable *cancellable, + GError **error) +{ + const char *metadata = NULL; + + g_autoptr(GKeyFile) metakey = g_key_file_new (); + g_auto(GStrv) parts = NULL; + g_autoptr(GPtrArray) related = NULL; + g_autofree char *url = NULL; + + parts = flatpak_decompose_ref (ref, error); + if (parts == NULL) + return NULL; + + if (!ostree_repo_remote_get_url (self->repo, + state->remote_name, + &url, + error)) + return FALSE; + + if (*url == 0) + return g_steal_pointer (&related); /* Empty url, silently disables updates */ + + if (flatpak_remote_state_lookup_cache (state, ref, + NULL, NULL, &metadata, + NULL) && + g_key_file_load_from_data (metakey, metadata, -1, 0, NULL)) + related = flatpak_dir_find_remote_related_for_metadata (self, state, ref, metakey, cancellable, error); + else + related = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_related_free); + + return g_steal_pointer (&related); +} + static GPtrArray * local_match_prefix (FlatpakDir *self, const char *extension_ref, const char *remote) { GPtrArray *matches = g_ptr_array_new_with_free_func (g_free); + g_auto(GStrv) parts = NULL; g_autofree char *parts_prefix = NULL; g_autoptr(GHashTable) refs = NULL; @@ -10599,20 +12161,24 @@ g_hash_table_iter_init (&hash_iter, refs); while (g_hash_table_iter_next (&hash_iter, &key, NULL)) { - char *ref = key; - g_auto(GStrv) cur_parts = g_strsplit (ref, "/", -1); + const char *partial_ref_and_origin = key; + g_autofree char *partial_ref = NULL; + g_auto(GStrv) cur_parts = NULL; + + ostree_parse_refspec (partial_ref_and_origin, NULL, &partial_ref, NULL); + + cur_parts = g_strsplit (partial_ref, "/", -1); /* Must match type, arch, branch */ - if (strcmp (parts[0], cur_parts[0]) != 0 || - strcmp (parts[2], cur_parts[2]) != 0 || - strcmp (parts[3], cur_parts[3]) != 0) + if (strcmp (parts[2], cur_parts[1]) != 0 || + strcmp (parts[3], cur_parts[2]) != 0) continue; /* But only prefix of id */ - if (!g_str_has_prefix (cur_parts[1], parts_prefix)) + if (!g_str_has_prefix (cur_parts[0], parts_prefix)) continue; - g_ptr_array_add (matches, g_strdup (ref)); + g_ptr_array_add (matches, g_strconcat (parts[0], "/", partial_ref, NULL)); } } @@ -10620,21 +12186,19 @@ } GPtrArray * -flatpak_dir_find_local_related (FlatpakDir *self, - const char *ref, - const char *remote_name, - GCancellable *cancellable, - GError **error) +flatpak_dir_find_local_related_for_metadata (FlatpakDir *self, + const char *ref, + const char *remote_name, + GKeyFile *metakey, + GCancellable *cancellable, + GError **error) { - g_autoptr(GFile) deploy_dir = NULL; - g_autoptr(GFile) metadata = NULL; - g_autofree char *metadata_contents = NULL; - gsize metadata_size; - g_autoptr(GKeyFile) metakey = g_key_file_new (); int i; + g_auto(GStrv) parts = NULL; - g_autoptr(GPtrArray) related = g_ptr_array_new_with_free_func ((GDestroyNotify)flatpak_related_free); + g_autoptr(GPtrArray) related = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_related_free); g_autofree char *collection_id = NULL; + g_auto(GStrv) groups = NULL; /* Derive the collection ID from the remote we are querying. This will act as * a sanity check on the summary ref lookup. */ @@ -10648,106 +12212,93 @@ if (!flatpak_dir_ensure_repo (self, cancellable, error)) return NULL; - deploy_dir = flatpak_dir_get_if_deployed (self, ref, NULL, cancellable); - if (deploy_dir == NULL) + groups = g_key_file_get_groups (metakey, NULL); + for (i = 0; groups[i] != NULL; i++) { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - _("%s not installed"), ref); - return NULL; - } + char *tagged_extension; - metadata = g_file_get_child (deploy_dir, "metadata"); - if (!g_file_load_contents (metadata, cancellable, &metadata_contents, &metadata_size, NULL, NULL)) - return g_steal_pointer (&related); /* No metadata => no related, but no error */ + if (g_str_has_prefix (groups[i], FLATPAK_METADATA_GROUP_PREFIX_EXTENSION) && + *(tagged_extension = (groups[i] + strlen (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION))) != 0) + { + g_autofree char *extension = NULL; + g_autofree char *version = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_VERSION, NULL); + gboolean subdirectories = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_SUBDIRECTORIES, NULL); + gboolean no_autodownload = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD, NULL); + g_autofree char *download_if = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_DOWNLOAD_IF, NULL); + g_autofree char *autoprune_unless = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_AUTOPRUNE_UNLESS, NULL); + gboolean autodelete = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_AUTODELETE, NULL); + gboolean locale_subset = g_key_file_get_boolean (metakey, groups[i], + FLATPAK_METADATA_KEY_LOCALE_SUBSET, NULL); + const char *branch; + g_autofree char *extension_ref = NULL; + g_autofree char *prefixed_extension_ref = NULL; + g_autofree char *checksum = NULL; + g_autofree char *extension_collection_id = NULL; - if (g_key_file_load_from_data (metakey, metadata_contents, metadata_size, 0, NULL)) - { - g_auto(GStrv) groups = NULL; + /* Parse actual extension name */ + flatpak_parse_extension_with_tag (tagged_extension, &extension, NULL); - groups = g_key_file_get_groups (metakey, NULL); - for (i = 0; groups[i] != NULL; i++) - { - char *extension; - - if (g_str_has_prefix (groups[i], FLATPAK_METADATA_GROUP_PREFIX_EXTENSION) && - *(extension = (groups[i] + strlen (FLATPAK_METADATA_GROUP_PREFIX_EXTENSION))) != 0) - { - g_autofree char *version = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_VERSION, NULL); - gboolean subdirectories = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_SUBDIRECTORIES, NULL); - gboolean no_autodownload = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD, NULL); - g_autofree char *download_if = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_DOWNLOAD_IF, NULL); - gboolean autodelete = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_AUTODELETE, NULL); - gboolean locale_subset = g_key_file_get_boolean (metakey, groups[i], - FLATPAK_METADATA_KEY_LOCALE_SUBSET, NULL); - const char *branch; - g_autofree char *extension_ref = NULL; - g_autofree char *prefixed_extension_ref = NULL; - g_autofree char *checksum = NULL; - g_autofree char *extension_collection_id = NULL; + if (version) + branch = version; + else + branch = parts[3]; - if (version) - branch = version; - else - branch = parts[3]; + extension_collection_id = g_key_file_get_string (metakey, groups[i], + FLATPAK_METADATA_KEY_COLLECTION_ID, NULL); -#ifdef FLATPAK_ENABLE_P2P - extension_collection_id = g_key_file_get_string (metakey, groups[i], - FLATPAK_METADATA_KEY_COLLECTION_ID, NULL); -#endif /* FLATPAK_ENABLE_P2P */ - - /* As we’re looking locally, we can’t support extension - * collection IDs which don’t match the current remote (since the - * associated refs could be anywhere). */ - if (extension_collection_id != NULL && *extension_collection_id != '\0' && - g_strcmp0 (extension_collection_id, collection_id) != 0) - { - g_debug ("Skipping related extension ‘%s’ because it’s in collection " - "‘%s’ which does not match the current remote ‘%s’.", - extension, extension_collection_id, collection_id); - continue; - } + /* As we’re looking locally, we can’t support extension + * collection IDs which don’t match the current remote (since the + * associated refs could be anywhere). */ + if (extension_collection_id != NULL && *extension_collection_id != '\0' && + g_strcmp0 (extension_collection_id, collection_id) != 0) + { + g_debug ("Skipping related extension ‘%s’ because it’s in collection " + "‘%s’ which does not match the current remote ‘%s’.", + extension, extension_collection_id, collection_id); + continue; + } - g_clear_pointer (&extension_collection_id, g_free); - extension_collection_id = g_strdup (collection_id); + g_clear_pointer (&extension_collection_id, g_free); + extension_collection_id = g_strdup (collection_id); - extension_ref = g_build_filename ("runtime", extension, parts[2], branch, NULL); - prefixed_extension_ref = g_strdup_printf ("%s:%s", remote_name, extension_ref); - if (ostree_repo_resolve_rev (self->repo, - prefixed_extension_ref, - FALSE, - &checksum, - NULL)) + extension_ref = g_build_filename ("runtime", extension, parts[2], branch, NULL); + prefixed_extension_ref = g_strdup_printf ("%s:%s", remote_name, extension_ref); + if (ostree_repo_resolve_rev (self->repo, + prefixed_extension_ref, + FALSE, + &checksum, + NULL)) + { + add_related (self, related, extension, extension_collection_id, extension_ref, + checksum, no_autodownload, download_if, autoprune_unless, autodelete, locale_subset); + } + else if (subdirectories) + { + g_autoptr(GPtrArray) matches = local_match_prefix (self, extension_ref, remote_name); + int j; + for (j = 0; j < matches->len; j++) { - add_related (self, related, extension, extension_collection_id, extension_ref, - checksum, no_autodownload, download_if, autodelete, locale_subset); - } - else if (subdirectories) - { - g_autoptr(GPtrArray) matches = local_match_prefix (self, extension_ref, remote_name); - int j; - for (j = 0; j < matches->len; j++) + const char *match = g_ptr_array_index (matches, j); + g_autofree char *prefixed_match = NULL; + g_autofree char *match_checksum = NULL; + + prefixed_match = g_strdup_printf ("%s:%s", remote_name, match); + + if (ostree_repo_resolve_rev (self->repo, + prefixed_match, + FALSE, + &match_checksum, + NULL)) { - const char *match = g_ptr_array_index (matches, j); - g_autofree char *prefixed_match = NULL; - g_autofree char *match_checksum = NULL; - - prefixed_match = g_strdup_printf ("%s:%s", remote_name, match); - - if (ostree_repo_resolve_rev (self->repo, - prefixed_match, - FALSE, - &match_checksum, - NULL)) - { - add_related (self, related, extension, - extension_collection_id, match, match_checksum, - no_autodownload, download_if, autodelete, locale_subset); - } + add_related (self, related, extension, + extension_collection_id, match, match_checksum, + no_autodownload, download_if, autoprune_unless, autodelete, locale_subset); } } } @@ -10757,16 +12308,130 @@ return g_steal_pointer (&related); } + +GPtrArray * +flatpak_dir_find_local_related (FlatpakDir *self, + const char *ref, + const char *remote_name, + gboolean deployed, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(GFile) metadata = NULL; + g_autofree char *metadata_contents = NULL; + g_autoptr(GKeyFile) metakey = g_key_file_new (); + g_autoptr(GPtrArray) related = NULL; + + if (!flatpak_dir_ensure_repo (self, cancellable, error)) + return NULL; + + if (deployed) + { + deploy_dir = flatpak_dir_get_if_deployed (self, ref, NULL, cancellable); + if (deploy_dir == NULL) + { + g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, + _("%s not installed"), ref); + return NULL; + } + + metadata = g_file_get_child (deploy_dir, "metadata"); + if (!g_file_load_contents (metadata, cancellable, &metadata_contents, NULL, NULL, NULL)) + { + g_debug ("No metadata in local deploy"); + /* No metadata => no related, but no error */ + } + } + else + { + g_autofree char *checksum = NULL; + g_autoptr(GVariant) commit_data = flatpak_dir_read_latest_commit (self, remote_name, ref, &checksum, NULL, NULL); + if (commit_data) + { + g_autoptr(GVariant) commit_metadata = g_variant_get_child_value (commit_data, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "s", &metadata_contents); + if (metadata_contents == NULL) + g_debug ("No xa.metadata in local commit %s ref %s", checksum, ref); + } + } + + if (metadata_contents && + g_key_file_load_from_data (metakey, metadata_contents, -1, 0, NULL)) + related = flatpak_dir_find_local_related_for_metadata (self, ref, remote_name, metakey, cancellable, error); + else + related = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_related_free); + + return g_steal_pointer (&related); +} + static GDBusProxy * -get_accounts_dbus_proxy (void) +get_localed_dbus_proxy (void) +{ + const char *localed_bus_name = "org.freedesktop.locale1"; + const char *localed_object_path = "/org/freedesktop/locale1"; + const char *localed_interface_name = localed_bus_name; + + return g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + localed_bus_name, + localed_object_path, + localed_interface_name, + NULL, + NULL); +} + +static void +get_locale_langs_from_localed_dbus (GDBusProxy *proxy, GPtrArray *langs) { - g_autoptr(GDBusConnection) conn = NULL; + g_autoptr(GVariant) locale_variant = NULL; + g_autofree const gchar **strv = NULL; + gsize i, j; + + locale_variant = g_dbus_proxy_get_cached_property (proxy, "Locale"); + if (locale_variant == NULL) + return; + + strv = g_variant_get_strv (locale_variant, NULL); + + for (i = 0; strv[i]; i++) + { + const gchar *locale = NULL; + g_autofree char *lang = NULL; + /* See locale(7) for these categories */ + const char* const categories[] = { "LANG=", "LC_ALL=", "LC_MESSAGES=", "LC_ADDRESS=", + "LC_COLLATE=", "LC_CTYPE=", "LC_IDENTIFICATION=", + "LC_MONETARY=", "LC_MEASUREMENT=", "LC_NAME=", + "LC_NUMERIC=", "LC_PAPER=", "LC_TELEPHONE=", + "LC_TIME=", NULL }; + + for (j = 0; categories[j]; j++) + { + if (g_str_has_prefix (strv[i], categories[j])) + { + locale = strv[i] + strlen (categories[j]); + break; + } + } + + if (locale == NULL || strcmp (locale, "") == 0) + continue; + + lang = flatpak_get_lang_from_locale (locale); + if (lang != NULL && !flatpak_g_ptr_array_contains_string (langs, lang)) + g_ptr_array_add (langs, g_steal_pointer (&lang)); + } +} + +static GDBusProxy * +get_accounts_dbus_proxy (void) +{ const char *accounts_bus_name = "org.freedesktop.Accounts"; const char *accounts_object_path = "/org/freedesktop/Accounts"; const char *accounts_interface_name = accounts_bus_name; - conn = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); return g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM, G_DBUS_PROXY_FLAGS_NONE, NULL, @@ -10777,13 +12442,12 @@ NULL); } -static char ** -get_locale_langs_from_accounts_dbus (GDBusProxy *proxy) +static void +get_locale_langs_from_accounts_dbus (GDBusProxy *proxy, GPtrArray *langs) { const char *accounts_bus_name = "org.freedesktop.Accounts"; const char *accounts_interface_name = "org.freedesktop.Accounts.User"; char **object_paths = NULL; - g_autoptr(GPtrArray) langs = g_ptr_array_new (); int i; g_autoptr(GVariant) ret = NULL; @@ -10824,7 +12488,7 @@ g_autofree char *lang = NULL; if (strcmp (locale, "") == 0) - return NULL; /* At least one user with no defined language, fall back to all languages */ + continue; /* This user wants the system default locale */ lang = flatpak_get_lang_from_locale (locale); if (lang != NULL && !flatpak_g_ptr_array_contains_string (langs, lang)) @@ -10832,15 +12496,7 @@ } } } - } - - if (langs->len == 0) - return NULL; /* No defined languages, fall back to all languages */ - - g_ptr_array_sort (langs, flatpak_strcmp0_ptr); - g_ptr_array_add (langs, NULL); - - return (char **)g_ptr_array_free (g_steal_pointer (&langs), FALSE); + } } static int @@ -10859,22 +12515,32 @@ char ** flatpak_dir_get_default_locale_languages (FlatpakDir *self) { - char **langs = NULL; + g_autoptr(GPtrArray) langs = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GDBusProxy) localed_proxy = NULL; + g_autoptr(GDBusProxy) accounts_proxy = NULL; if (flatpak_dir_is_user (self)) return flatpak_get_current_locale_langs (); - /* If proxy is not NULL, it means that AccountService exists - * and gets the list of languages from AccountService. */ - g_autoptr(GDBusProxy) proxy = get_accounts_dbus_proxy (); - if (proxy != NULL) - langs = get_locale_langs_from_accounts_dbus (proxy); - - /* Iif langs is NULL, it means using all languages */ - if (langs == NULL) - langs = g_new0 (char *, 1); + /* First get the system default locales */ + localed_proxy = get_localed_dbus_proxy (); + if (localed_proxy != NULL) + get_locale_langs_from_localed_dbus (localed_proxy, langs); + + /* Now add the user account locales from AccountsService. If accounts_proxy is + * not NULL, it means that AccountsService exists */ + accounts_proxy = get_accounts_dbus_proxy (); + if (accounts_proxy != NULL) + get_locale_langs_from_accounts_dbus (accounts_proxy, langs); + + /* If none were found, fall back to using all languages */ + if (langs->len == 0) + return g_new0 (char *, 1); + + g_ptr_array_sort (langs, flatpak_strcmp0_ptr); + g_ptr_array_add (langs, NULL); - return langs; + return (char **) g_ptr_array_free (g_steal_pointer (&langs), FALSE); } char ** @@ -10911,3 +12577,49 @@ } return subpaths; } + +/* The flatpak_collection_ref_* methods were copied from the + * ostree_collection_ref_* ones */ +FlatpakCollectionRef * +flatpak_collection_ref_new (const gchar *collection_id, + const gchar *ref_name) +{ + g_autoptr(FlatpakCollectionRef) collection_ref = NULL; + + collection_ref = g_new0 (FlatpakCollectionRef, 1); + collection_ref->collection_id = g_strdup (collection_id); + collection_ref->ref_name = g_strdup (ref_name); + + return g_steal_pointer (&collection_ref); +} + +void +flatpak_collection_ref_free (FlatpakCollectionRef *ref) +{ + g_return_if_fail (ref != NULL); + + g_free (ref->collection_id); + g_free (ref->ref_name); + g_free (ref); +} + +guint +flatpak_collection_ref_hash (gconstpointer ref) +{ + const FlatpakCollectionRef *_ref = ref; + + if (_ref->collection_id != NULL) + return g_str_hash (_ref->collection_id) ^ g_str_hash (_ref->ref_name); + else + return g_str_hash (_ref->ref_name); +} + +gboolean +flatpak_collection_ref_equal (gconstpointer ref1, + gconstpointer ref2) +{ + const FlatpakCollectionRef *_ref1 = ref1, *_ref2 = ref2; + + return g_strcmp0 (_ref1->collection_id, _ref2->collection_id) == 0 && + g_strcmp0 (_ref1->ref_name, _ref2->ref_name) == 0; +} diff -Nru flatpak-0.11.3/common/flatpak-dir.h flatpak-1.0.7/common/flatpak-dir.h --- flatpak-0.11.3/common/flatpak-dir.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-dir.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,695 +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 - */ - -#ifndef __FLATPAK_DIR_H__ -#define __FLATPAK_DIR_H__ - -#include - -#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)) -#define FLATPAK_IS_DIR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_DIR)) - -#define FLATPAK_TYPE_DEPLOY flatpak_deploy_get_type () -#define FLATPAK_DEPLOY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_DEPLOY, FlatpakDeploy)) -#define FLATPAK_IS_DEPLOY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_DEPLOY)) - -GType flatpak_dir_get_type (void); -GType flatpak_deploy_get_type (void); - -#define FLATPAK_REF_GROUP "Flatpak Ref" -#define FLATPAK_REF_VERSION_KEY "Version" -#define FLATPAK_REF_URL_KEY "Url" -#define FLATPAK_REF_RUNTIME_REPO_KEY "RuntimeRepo" -#define FLATPAK_REF_SUGGEST_REMOTE_NAME_KEY "SuggestRemoteName" -#define FLATPAK_REF_TITLE_KEY "Title" -#define FLATPAK_REF_GPGKEY_KEY "GPGKey" -#define FLATPAK_REF_IS_RUNTIME_KEY "IsRuntime" -#define FLATPAK_REF_NAME_KEY "Name" -#define FLATPAK_REF_BRANCH_KEY "Branch" - -#ifdef FLATPAK_ENABLE_P2P -#define FLATPAK_REF_COLLECTION_ID_KEY "CollectionID" -#endif /* FLATPAK_ENABLE_P2P */ - -#define FLATPAK_REPO_GROUP "Flatpak Repo" -#define FLATPAK_REPO_VERSION_KEY "Version" -#define FLATPAK_REPO_URL_KEY "Url" -#define FLATPAK_REPO_TITLE_KEY "Title" -#define FLATPAK_REPO_DEFAULT_BRANCH_KEY "DefaultBranch" -#define FLATPAK_REPO_GPGKEY_KEY "GPGKey" -#define FLATPAK_REPO_NODEPS_KEY "NoDeps" - -#ifdef FLATPAK_ENABLE_P2P -#define FLATPAK_REPO_COLLECTION_ID_KEY "CollectionID" -#endif /* FLATPAK_ENABLE_P2P */ - -#define FLATPAK_DEFAULT_UPDATE_FREQUENCY 100 -#define FLATPAK_CLI_UPDATE_FREQUENCY 300 - -typedef struct -{ - char *collection_id; /* (nullable) */ - char *ref; - char *commit; - char **subpaths; - gboolean download; - gboolean delete; -} FlatpakRelated; - -void flatpak_related_free (FlatpakRelated *related); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDir, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDeploy, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRelated, flatpak_related_free) - -typedef enum { - FLATPAK_HELPER_DEPLOY_FLAGS_NONE = 0, - 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|FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL) - -typedef enum { - FLATPAK_HELPER_UNINSTALL_FLAGS_NONE = 0, - FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF = 1 << 0, - FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE = 1 << 1, -} FlatpakHelperUninstallFlags; - -#define FLATPAK_HELPER_UNINSTALL_FLAGS_ALL (FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF | FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE) - -typedef enum { - FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_NONE = 0, - FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE = 1 << 0, -} FlatpakHelperConfigureRemoteFlags; - -#define FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_ALL (FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE) - -typedef enum { - FLATPAK_HELPER_CONFIGURE_FLAGS_NONE = 0, - FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET = 1 << 0, -} FlatpakHelperConfigureFlags; - -#define FLATPAK_HELPER_CONFIGURE_FLAGS_ALL (FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET) - -typedef enum { - FLATPAK_HELPER_UPDATE_REMOTE_FLAGS_NONE = 0, -} FlatpakHelperUpdateRemoteFlags; - -#define FLATPAK_HELPER_UPDATE_REMOTE_FLAGS_ALL (0) - -typedef enum { - FLATPAK_PULL_FLAGS_NONE = 0, - FLATPAK_PULL_FLAGS_DOWNLOAD_EXTRA_DATA = 1 << 0, - FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA = 1 << 1, - FLATPAK_PULL_FLAGS_ALLOW_DOWNGRADE = 1 << 2, - FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS = 1 << 3, -} FlatpakPullFlags; - -typedef enum { - FLATPAK_DIR_STORAGE_TYPE_DEFAULT = 0, - 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); - -#ifndef FLATPAK_ENABLE_P2P -/* Rather than putting #ifdefs around all the function arguments for result sets, - * define away OstreeRepoFinderResult if we’re compiling without P2P support. - * The surrounding code should always pass in NULL if P2P support is disabled. */ -typedef void OstreeRepoFinderResult; -typedef void** OstreeRepoFinderResultv; - -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 */ - -/** - * FLATPAK_DEPLOY_DATA_GVARIANT_FORMAT: - * - * s - origin - * s - commit - * as - subpaths - * t - installed size - * a{sv} - Metadata - */ -#define FLATPAK_DEPLOY_DATA_GVARIANT_STRING "(ssasta{sv})" -#define FLATPAK_DEPLOY_DATA_GVARIANT_FORMAT G_VARIANT_TYPE (FLATPAK_DEPLOY_DATA_GVARIANT_STRING) - -GPtrArray * flatpak_get_system_base_dir_locations (GCancellable *cancellable, - GError **error); -GFile * flatpak_get_system_default_base_dir_location (void); -GFile * flatpak_get_user_base_dir_location (void); - -GKeyFile * flatpak_load_override_keyfile (const char *app_id, - gboolean user, - GError **error); -FlatpakContext *flatpak_load_override_file (const char *app_id, - gboolean user, - GError **error); -gboolean flatpak_save_override_keyfile (GKeyFile *metakey, - const char *app_id, - gboolean user, - GError **error); - -const char * flatpak_deploy_data_get_origin (GVariant *deploy_data); -const char * flatpak_deploy_data_get_commit (GVariant *deploy_data); -const char ** flatpak_deploy_data_get_subpaths (GVariant *deploy_data); -guint64 flatpak_deploy_data_get_installed_size (GVariant *deploy_data); -const char * flatpak_deploy_data_get_alt_id (GVariant *deploy_data); - -GFile * flatpak_deploy_get_dir (FlatpakDeploy *deploy); -GVariant * flatpak_load_deploy_data (GFile *deploy_dir, - GCancellable *cancellable, - GError **error); -GVariant * flatpak_deploy_get_deploy_data (FlatpakDeploy *deploy, - GCancellable *cancellable, - GError **error); -GFile * flatpak_deploy_get_files (FlatpakDeploy *deploy); -FlatpakContext *flatpak_deploy_get_overrides (FlatpakDeploy *deploy); -GKeyFile * flatpak_deploy_get_metadata (FlatpakDeploy *deploy); - -FlatpakDir * flatpak_dir_new (GFile *basedir, - gboolean user); -FlatpakDir * flatpak_dir_clone (FlatpakDir *self); -FlatpakDir *flatpak_dir_get_user (void); -FlatpakDir *flatpak_dir_get_system_default (void); -GPtrArray *flatpak_dir_get_system_list (GCancellable *cancellable, - GError **error); -FlatpakDir *flatpak_dir_get_system_by_id (const char *id, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_is_user (FlatpakDir *self); -void flatpak_dir_set_no_system_helper (FlatpakDir *self, - gboolean no_system_helper); -GFile * flatpak_dir_get_path (FlatpakDir *self); -GFile * flatpak_dir_get_changed_path (FlatpakDir *self); -const char *flatpak_dir_get_id (FlatpakDir *self); -const char *flatpak_dir_get_display_name (FlatpakDir *self); -char * flatpak_dir_get_name (FlatpakDir *self); -gint flatpak_dir_get_priority (FlatpakDir *self); -FlatpakDirStorageType flatpak_dir_get_storage_type (FlatpakDir *self); -GFile * flatpak_dir_get_deploy_dir (FlatpakDir *self, - const char *ref); -char * flatpak_dir_get_deploy_subdir (FlatpakDir *self, - const char *checksum, - const char * const * subpaths); -GFile * flatpak_dir_get_unmaintained_extension_dir (FlatpakDir *self, - const char *name, - const char *arch, - const char *branch); -GVariant * flatpak_dir_get_deploy_data (FlatpakDir *dir, - const char *ref, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_get_origin (FlatpakDir *self, - const char *ref, - GCancellable *cancellable, - GError **error); -char ** flatpak_dir_get_subpaths (FlatpakDir *self, - const char *ref, - GCancellable *cancellable, - GError **error); -GFile * flatpak_dir_get_exports_dir (FlatpakDir *self); -GFile * flatpak_dir_get_removed_dir (FlatpakDir *self); -GFile * flatpak_dir_get_if_deployed (FlatpakDir *self, - const char *ref, - const char *checksum, - GCancellable *cancellable); -GFile * flatpak_dir_get_unmaintained_extension_dir_if_exists (FlatpakDir *self, - const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable); - -gboolean flatpak_dir_remote_has_ref (FlatpakDir *self, - const char *remote, - const char *ref); -char ** flatpak_dir_search_for_dependency (FlatpakDir *self, - const char *runtime_ref, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_find_remote_ref (FlatpakDir *self, - const char *remote, - const char *name, - const char *opt_branch, - const char *opt_default_branch, - const char *opt_arch, - FlatpakKinds kinds, - FlatpakKinds *out_kind, - GCancellable *cancellable, - GError **error); -char ** flatpak_dir_find_remote_refs (FlatpakDir *self, - const char *remote, - const char *name, - const char *opt_branch, - const char *opt_arch, - FlatpakKinds kinds, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_find_local_ref (FlatpakDir *self, - const char *remote, - const char *name, - const char *opt_branch, - const char *opt_default_branch, - const char *opt_arch, - FlatpakKinds kinds, - FlatpakKinds *out_kind, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_find_installed_ref (FlatpakDir *self, - const char *opt_name, - const char *opt_branch, - const char *opt_arch, - FlatpakKinds kinds, - FlatpakKinds *out_kind, - GError **error); -char ** flatpak_dir_find_installed_refs (FlatpakDir *self, - const char *opt_name, - const char *opt_branch, - const char *opt_arch, - FlatpakKinds kinds, - GError **error); -FlatpakDeploy *flatpak_dir_load_deployed (FlatpakDir *self, - const char *ref, - const char *checksum, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_load_override (FlatpakDir *dir, - const char *app_id, - gsize *length, - GError **error); -OstreeRepo *flatpak_dir_get_repo (FlatpakDir *self); -gboolean flatpak_dir_ensure_path (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_use_child_repo (FlatpakDir *self); -gboolean flatpak_dir_ensure_system_child_repo (FlatpakDir *self, - GError **error); -gboolean flatpak_dir_recreate_repo (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -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); -gboolean flatpak_dir_set_config (FlatpakDir *self, - const char *key, - const char *value, - GError **error); -gboolean flatpak_dir_mark_changed (FlatpakDir *self, - GError **error); -gboolean flatpak_dir_remove_appstream (FlatpakDir *self, - const char *remote, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_deploy_appstream (FlatpakDir *self, - const char *remote, - const char *arch, - gboolean *out_changed, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_find_latest_rev (FlatpakDir *self, - const char *remote, - const char *ref, - 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, - gboolean *out_changed, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_pull (FlatpakDir *self, - const char *repository, - const char *ref, - const char *opt_rev, - const OstreeRepoFinderResult * const *results, - const char **subpaths, - OstreeRepo *repo, - FlatpakPullFlags flatpak_flags, - OstreeRepoPullFlags flags, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_pull_untrusted_local (FlatpakDir *self, - const char *src_path, - const char *remote_name, - const char *ref, - const char **subpaths, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_list_refs_for_name (FlatpakDir *self, - const char *kind, - const char *name, - char ***refs, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_list_refs (FlatpakDir *self, - const char *kind, - char ***refs, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_read_latest (FlatpakDir *self, - const char *remote, - const char *ref, - char **out_alt_id, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_read_active (FlatpakDir *self, - const char *ref, - GCancellable *cancellable); -gboolean flatpak_dir_set_active (FlatpakDir *self, - const char *ref, - const char *checksum, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_current_ref (FlatpakDir *self, - const char *name, - GCancellable *cancellable); -gboolean flatpak_dir_drop_current_ref (FlatpakDir *self, - const char *name, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_make_current_ref (FlatpakDir *self, - const char *ref, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_list_deployed (FlatpakDir *self, - const char *ref, - char ***deployed_checksums, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_lock (FlatpakDir *self, - GLnxLockFile *lockfile, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_repo_lock (FlatpakDir *self, - GLnxLockFile *lockfile, - gboolean exclusive, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_deploy (FlatpakDir *self, - const char *origin, - const char *ref, - const char *checksum_or_latest, - const char * const * subpaths, - GVariant *old_deploy_data, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_deploy_update (FlatpakDir *self, - const char *ref, - const char *checksum, - const char **opt_subpaths, - GCancellable *cancellable, - GError **error); -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, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error); -char *flatpak_dir_ensure_bundle_remote (FlatpakDir *self, - GFile *file, - GBytes *extra_gpg_data, - char **out_ref, - char **out_metadata, - gboolean *out_created_remote, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_install_bundle (FlatpakDir *self, - GFile *file, - const char *remote, - char **out_ref, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_check_for_update (FlatpakDir *self, - const char *ref, - const char *remote_name, - const char *checksum_or_latest, - const char **opt_subpaths, - gboolean no_pull, - OstreeRepoFinderResult ***out_results, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_update (FlatpakDir *self, - gboolean no_pull, - gboolean no_deploy, - gboolean no_static_deltas, - gboolean allow_downgrade, - const char *ref, - const char *remote_name, - const char *checksum_or_latest, - const OstreeRepoFinderResult * const *results, - const char **opt_subpaths, - OstreeAsyncProgress *progress, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_uninstall (FlatpakDir *self, - const char *ref, - FlatpakHelperUninstallFlags flags, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_undeploy (FlatpakDir *self, - const char *ref, - const char *checksum, - gboolean is_update, - gboolean force_remove, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_undeploy_all (FlatpakDir *self, - const char *ref, - gboolean force_remove, - gboolean *was_deployed_out, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_remove_ref (FlatpakDir *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_update_exports (FlatpakDir *self, - const char *app, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_prune (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_cleanup_removed (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_cleanup_undeployed_refs (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_collect_deployed_refs (FlatpakDir *self, - const char *type, - const char *name_prefix, - const char *branch, - const char *arch, - GHashTable *hash, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_collect_unmaintained_refs (FlatpakDir *self, - const char *name_prefix, - const char *arch, - const char *branch, - GHashTable *hash, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_remote_has_deploys (FlatpakDir *self, - const char *remote); -char *flatpak_dir_create_origin_remote (FlatpakDir *self, - const char *url, - const char *id, - const char *title, - const char *main_ref, - GBytes *gpg_data, - 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, - char **remote_name_out, - char **ref_out, - GError **error); -gboolean flatpak_dir_create_suggested_remote_for_ref_file (FlatpakDir *self, - GBytes *data, - GError **error); -GKeyFile * flatpak_dir_parse_repofile (FlatpakDir *self, - const char *remote_name, - gboolean from_ref, - GBytes *data, - GBytes **gpg_data_out, - GCancellable *cancellable, - GError **error); - -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); -char **flatpak_dir_list_enumerated_remotes (FlatpakDir *self, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_modify_remote (FlatpakDir *self, - const char *remote_name, - GKeyFile *config, - GBytes *gpg_data, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_remove_remote (FlatpakDir *self, - gboolean force_remove, - const char *remote_name, - GCancellable *cancellable, - GError **error); -char *flatpak_dir_get_remote_title (FlatpakDir *self, - const char *remote_name); -char *flatpak_dir_get_remote_collection_id (FlatpakDir *self, - const char *remote_name); -char *flatpak_dir_get_remote_main_ref (FlatpakDir *self, - const char *remote_name); -gboolean flatpak_dir_get_remote_oci (FlatpakDir *self, - const char *remote_name); -char *flatpak_dir_get_remote_default_branch (FlatpakDir *self, - const char *remote_name); -int flatpak_dir_get_remote_prio (FlatpakDir *self, - const char *remote_name); -gboolean flatpak_dir_get_remote_noenumerate (FlatpakDir *self, - const char *remote_name); -gboolean flatpak_dir_get_remote_nodeps (FlatpakDir *self, - const char *remote_name); -gboolean flatpak_dir_get_remote_disabled (FlatpakDir *self, - const char *remote_name); -gboolean flatpak_dir_list_remote_refs (FlatpakDir *self, - const char *remote, - GHashTable **refs, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_fetch_remote_repo_metadata (FlatpakDir *self, - const char *remote_name, - GCancellable *cancellable, - GError **error); -char * flatpak_dir_fetch_remote_title (FlatpakDir *self, - const char *remote, - GCancellable *cancellable, - GError **error); -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, - GError **error); -gboolean flatpak_dir_update_remote_configuration_for_summary (FlatpakDir *self, - const char *remote, - GVariant *summary, - gboolean dry_run, - gboolean *has_changed_out, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_update_remote_configuration_for_repo_metadata (FlatpakDir *self, - const char *remote, - GVariant *summary, - gboolean dry_run, - gboolean *has_changed_out, - GCancellable *cancellable, - GError **error); -gboolean flatpak_dir_fetch_ref_cache (FlatpakDir *self, - const char *remote_name, - const char *ref, - guint64 *download_size, - guint64 *installed_size, - char **metadata, - GCancellable *cancellable, - GError **error); -GPtrArray * flatpak_dir_find_remote_related (FlatpakDir *dir, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); -GPtrArray * flatpak_dir_find_local_related (FlatpakDir *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_dir_lookup_repo_metadata (FlatpakDir *self, - const char *remote_name, - GCancellable *cancellable, - GError **error, - const char *key, - const char *format_string, - ...); - -char ** flatpak_dir_get_default_locale_languages (FlatpakDir *self); -char ** flatpak_dir_get_locale_languages (FlatpakDir *self); -char ** flatpak_dir_get_locale_subpaths (FlatpakDir *self); - -#endif /* __FLATPAK_DIR_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-dir-private.h flatpak-1.0.7/common/flatpak-dir-private.h --- flatpak-0.11.3/common/flatpak-dir-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-dir-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,789 @@ +/* + * 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 + */ + +#ifndef __FLATPAK_DIR_H__ +#define __FLATPAK_DIR_H__ + +#include + +#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)) +#define FLATPAK_IS_DIR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_DIR)) + +#define FLATPAK_TYPE_DEPLOY flatpak_deploy_get_type () +#define FLATPAK_DEPLOY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_DEPLOY, FlatpakDeploy)) +#define FLATPAK_IS_DEPLOY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_DEPLOY)) + +GType flatpak_dir_get_type (void); +GType flatpak_deploy_get_type (void); + +#define FLATPAK_REF_GROUP "Flatpak Ref" +#define FLATPAK_REF_VERSION_KEY "Version" +#define FLATPAK_REF_URL_KEY "Url" +#define FLATPAK_REF_RUNTIME_REPO_KEY "RuntimeRepo" +#define FLATPAK_REF_SUGGEST_REMOTE_NAME_KEY "SuggestRemoteName" +#define FLATPAK_REF_TITLE_KEY "Title" +#define FLATPAK_REF_GPGKEY_KEY "GPGKey" +#define FLATPAK_REF_IS_RUNTIME_KEY "IsRuntime" +#define FLATPAK_REF_NAME_KEY "Name" +#define FLATPAK_REF_BRANCH_KEY "Branch" +#define FLATPAK_REF_COLLECTION_ID_KEY "CollectionID" +#define FLATPAK_REF_DEPLOY_COLLECTION_ID_KEY "DeployCollectionID" + +#define FLATPAK_REPO_GROUP "Flatpak Repo" +#define FLATPAK_REPO_VERSION_KEY "Version" +#define FLATPAK_REPO_URL_KEY "Url" +#define FLATPAK_REPO_TITLE_KEY "Title" +#define FLATPAK_REPO_DEFAULT_BRANCH_KEY "DefaultBranch" +#define FLATPAK_REPO_GPGKEY_KEY "GPGKey" +#define FLATPAK_REPO_NODEPS_KEY "NoDeps" + +#define FLATPAK_REPO_COLLECTION_ID_KEY "CollectionID" +#define FLATPAK_REPO_DEPLOY_COLLECTION_ID_KEY "DeployCollectionID" + +#define FLATPAK_DEFAULT_UPDATE_FREQUENCY 100 +#define FLATPAK_CLI_UPDATE_FREQUENCY 300 + +typedef struct +{ + char *collection_id; /* (nullable) */ + char *ref; + char *commit; + char **subpaths; + gboolean download; + gboolean delete; + gboolean auto_prune; +} FlatpakRelated; + +void flatpak_related_free (FlatpakRelated *related); + + +/* The remote state represent the state of the remote at a particular + time, including the summary file and the metadata (which may be from + the summary or from a branch. We create this once per highlevel operation + to avoid looking up the summary multiple times, but also to avoid races + if it happened to change in the middle of the operation */ +typedef struct +{ + char *remote_name; + char *collection_id; + GVariant *summary; + GBytes *summary_sig_bytes; + GError *summary_fetch_error; + GVariant *metadata; + GError *metadata_fetch_error; + int refcount; +} FlatpakRemoteState; + +FlatpakRemoteState *flatpak_remote_state_ref (FlatpakRemoteState *remote_state); +void flatpak_remote_state_unref (FlatpakRemoteState *remote_state); +gboolean flatpak_remote_state_ensure_summary (FlatpakRemoteState *self, + GError **error); +gboolean flatpak_remote_state_ensure_metadata (FlatpakRemoteState *self, + GError **error); +gboolean flatpak_remote_state_lookup_ref (FlatpakRemoteState *self, + const char *ref, + char **out_checksum, + GVariant **out_variant, + GError **error); +char **flatpak_remote_state_match_subrefs (FlatpakRemoteState *self, + const char *ref); +gboolean flatpak_remote_state_lookup_repo_metadata (FlatpakRemoteState *self, + const char *key, + const char *format_string, + ...); +gboolean flatpak_remote_state_lookup_cache (FlatpakRemoteState *self, + const char *ref, + guint64 *download_size, + guint64 *installed_size, + const char **metadata, + GError **error); +GVariant *flatpak_remote_state_lookup_sparse_cache (FlatpakRemoteState *self, + const char *ref, + GError **error); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDir, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakDeploy, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRelated, flatpak_related_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRemoteState, flatpak_remote_state_unref) + +typedef struct +{ + char *collection_id; + char *ref_name; +} FlatpakCollectionRef; + +FlatpakCollectionRef * flatpak_collection_ref_new (const char *collection_id, + const char *ref_name); +void flatpak_collection_ref_free (FlatpakCollectionRef *ref); +guint flatpak_collection_ref_hash (gconstpointer ref); +gboolean flatpak_collection_ref_equal (gconstpointer ref1, + gconstpointer ref2); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakCollectionRef, flatpak_collection_ref_free) + +typedef enum { + FLATPAK_HELPER_DEPLOY_FLAGS_NONE = 0, + 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 | FLATPAK_HELPER_DEPLOY_FLAGS_REINSTALL) + +typedef enum { + FLATPAK_HELPER_UNINSTALL_FLAGS_NONE = 0, + FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF = 1 << 0, + FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE = 1 << 1, +} FlatpakHelperUninstallFlags; + +#define FLATPAK_HELPER_UNINSTALL_FLAGS_ALL (FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF | FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE) + +typedef enum { + FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_NONE = 0, + FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE = 1 << 0, +} FlatpakHelperConfigureRemoteFlags; + +#define FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_ALL (FLATPAK_HELPER_CONFIGURE_REMOTE_FLAGS_FORCE_REMOVE) + +typedef enum { + FLATPAK_HELPER_CONFIGURE_FLAGS_NONE = 0, + FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET = 1 << 0, +} FlatpakHelperConfigureFlags; + +#define FLATPAK_HELPER_CONFIGURE_FLAGS_ALL (FLATPAK_HELPER_CONFIGURE_FLAGS_UNSET) + +typedef enum { + FLATPAK_HELPER_UPDATE_REMOTE_FLAGS_NONE = 0, +} FlatpakHelperUpdateRemoteFlags; + +#define FLATPAK_HELPER_UPDATE_REMOTE_FLAGS_ALL (0) + +typedef enum { + FLATPAK_PULL_FLAGS_NONE = 0, + FLATPAK_PULL_FLAGS_DOWNLOAD_EXTRA_DATA = 1 << 0, + FLATPAK_PULL_FLAGS_SIDELOAD_EXTRA_DATA = 1 << 1, + FLATPAK_PULL_FLAGS_ALLOW_DOWNGRADE = 1 << 2, + FLATPAK_PULL_FLAGS_NO_STATIC_DELTAS = 1 << 3, +} FlatpakPullFlags; + +typedef enum { + FLATPAK_DIR_STORAGE_TYPE_DEFAULT = 0, + 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); + +/** + * FLATPAK_DEPLOY_DATA_GVARIANT_FORMAT: + * + * s - origin + * s - commit + * as - subpaths + * t - installed size + * a{sv} - Metadata + */ +#define FLATPAK_DEPLOY_DATA_GVARIANT_STRING "(ssasta{sv})" +#define FLATPAK_DEPLOY_DATA_GVARIANT_FORMAT G_VARIANT_TYPE (FLATPAK_DEPLOY_DATA_GVARIANT_STRING) + +GPtrArray * flatpak_get_system_base_dir_locations (GCancellable *cancellable, + GError **error); +GFile * flatpak_get_system_default_base_dir_location (void); +GFile * flatpak_get_user_base_dir_location (void); + +GKeyFile * flatpak_load_override_keyfile (const char *app_id, + gboolean user, + GError **error); +FlatpakContext *flatpak_load_override_file (const char *app_id, + gboolean user, + GError **error); +gboolean flatpak_save_override_keyfile (GKeyFile *metakey, + const char *app_id, + gboolean user, + GError **error); +gboolean flatpak_remove_override_keyfile (const char *app_id, + gboolean user, + GError **error); + +const char * flatpak_deploy_data_get_origin (GVariant *deploy_data); +const char * flatpak_deploy_data_get_commit (GVariant *deploy_data); +const char ** flatpak_deploy_data_get_subpaths (GVariant *deploy_data); +guint64 flatpak_deploy_data_get_installed_size (GVariant *deploy_data); +const char * flatpak_deploy_data_get_alt_id (GVariant *deploy_data); +const char * flatpak_deploy_data_get_eol (GVariant *deploy_data); +const char * flatpak_deploy_data_get_eol_rebase (GVariant *deploy_data); +const char * flatpak_deploy_data_get_runtime (GVariant *deploy_data); + +GFile * flatpak_deploy_get_dir (FlatpakDeploy *deploy); +GVariant * flatpak_load_deploy_data (GFile *deploy_dir, + GCancellable *cancellable, + GError **error); +GVariant * flatpak_deploy_get_deploy_data (FlatpakDeploy *deploy, + GCancellable *cancellable, + GError **error); +GFile * flatpak_deploy_get_files (FlatpakDeploy *deploy); +FlatpakContext *flatpak_deploy_get_overrides (FlatpakDeploy *deploy); +GKeyFile * flatpak_deploy_get_metadata (FlatpakDeploy *deploy); + +FlatpakDir * flatpak_dir_new (GFile *basedir, + gboolean user); +FlatpakDir * flatpak_dir_clone (FlatpakDir *self); +FlatpakDir *flatpak_dir_get_user (void); +FlatpakDir *flatpak_dir_get_system_default (void); +GPtrArray *flatpak_dir_get_system_list (GCancellable *cancellable, + GError **error); +FlatpakDir *flatpak_dir_get_system_by_id (const char *id, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_is_user (FlatpakDir *self); +void flatpak_dir_set_no_system_helper (FlatpakDir *self, + gboolean no_system_helper); +GFile * flatpak_dir_get_path (FlatpakDir *self); +GFile * flatpak_dir_get_changed_path (FlatpakDir *self); +const char *flatpak_dir_get_id (FlatpakDir *self); +const char *flatpak_dir_get_display_name (FlatpakDir *self); +char * flatpak_dir_get_name (FlatpakDir *self); +gint flatpak_dir_get_priority (FlatpakDir *self); +FlatpakDirStorageType flatpak_dir_get_storage_type (FlatpakDir *self); +GFile * flatpak_dir_get_deploy_dir (FlatpakDir *self, + const char *ref); +char * flatpak_dir_get_deploy_subdir (FlatpakDir *self, + const char *checksum, + const char * const * subpaths); +GFile * flatpak_dir_get_unmaintained_extension_dir (FlatpakDir *self, + const char *name, + const char *arch, + const char *branch); +GVariant * flatpak_dir_get_deploy_data (FlatpakDir *dir, + const char *ref, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_get_origin (FlatpakDir *self, + const char *ref, + GCancellable *cancellable, + GError **error); +char ** flatpak_dir_get_subpaths (FlatpakDir *self, + const char *ref, + GCancellable *cancellable, + GError **error); +GFile * flatpak_dir_get_exports_dir (FlatpakDir *self); +GFile * flatpak_dir_get_removed_dir (FlatpakDir *self); +GFile * flatpak_dir_get_if_deployed (FlatpakDir *self, + const char *ref, + const char *checksum, + GCancellable *cancellable); +GFile * flatpak_dir_get_unmaintained_extension_dir_if_exists (FlatpakDir *self, + const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable); + +char ** flatpak_dir_search_for_local_dependency (FlatpakDir *self, + const char *runtime_ref, + GCancellable *cancellable, + GError **error); +char ** flatpak_dir_search_for_dependency (FlatpakDir *self, + const char *runtime_ref, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_find_remote_ref (FlatpakDir *self, + const char *remote, + const char *name, + const char *opt_branch, + const char *opt_default_branch, + const char *opt_arch, + FlatpakKinds kinds, + FlatpakKinds *out_kind, + GCancellable *cancellable, + GError **error); +char ** flatpak_dir_find_remote_refs (FlatpakDir *self, + const char *remote, + const char *name, + const char *opt_branch, + const char *opt_arch, + FlatpakKinds kinds, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_find_local_ref (FlatpakDir *self, + const char *remote, + const char *name, + const char *opt_branch, + const char *opt_default_branch, + const char *opt_arch, + FlatpakKinds kinds, + FlatpakKinds *out_kind, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_find_installed_ref (FlatpakDir *self, + const char *opt_name, + const char *opt_branch, + const char *opt_arch, + FlatpakKinds kinds, + FlatpakKinds *out_kind, + GError **error); +char ** flatpak_dir_find_installed_refs (FlatpakDir *self, + const char *opt_name, + const char *opt_branch, + const char *opt_arch, + FlatpakKinds kinds, + GError **error); +FlatpakDeploy *flatpak_dir_load_deployed (FlatpakDir *self, + const char *ref, + const char *checksum, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_load_override (FlatpakDir *dir, + const char *app_id, + gsize *length, + GError **error); +OstreeRepo *flatpak_dir_get_repo (FlatpakDir *self); +gboolean flatpak_dir_ensure_path (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_use_child_repo (FlatpakDir *self); +gboolean flatpak_dir_ensure_system_child_repo (FlatpakDir *self, + GError **error); +gboolean flatpak_dir_recreate_repo (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +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); +gboolean flatpak_dir_set_config (FlatpakDir *self, + const char *key, + const char *value, + GError **error); +gboolean flatpak_dir_mark_changed (FlatpakDir *self, + GError **error); +gboolean flatpak_dir_remove_appstream (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_deploy_appstream (FlatpakDir *self, + const char *remote, + const char *arch, + gboolean *out_changed, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_update_appstream (FlatpakDir *self, + const char *remote, + const char *arch, + gboolean *out_changed, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_pull (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + const char *opt_rev, + const OstreeRepoFinderResult * const *results, + const char **subpaths, + OstreeRepo *repo, + FlatpakPullFlags flatpak_flags, + OstreeRepoPullFlags flags, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_pull_untrusted_local (FlatpakDir *self, + const char *src_path, + const char *remote_name, + const char *ref, + const char **subpaths, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_list_refs_for_name (FlatpakDir *self, + const char *kind, + const char *name, + char ***refs, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_list_refs (FlatpakDir *self, + const char *kind, + char ***refs, + GCancellable *cancellable, + GError **error); +GVariant * flatpak_dir_read_latest_commit (FlatpakDir *self, + const char *remote, + const char *ref, + char **out_checksum, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_read_latest (FlatpakDir *self, + const char *remote, + const char *ref, + char **out_alt_id, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_read_active (FlatpakDir *self, + const char *ref, + GCancellable *cancellable); +gboolean flatpak_dir_set_active (FlatpakDir *self, + const char *ref, + const char *checksum, + GCancellable *cancellable, + GError **error); +char * flatpak_dir_current_ref (FlatpakDir *self, + const char *name, + GCancellable *cancellable); +gboolean flatpak_dir_drop_current_ref (FlatpakDir *self, + const char *name, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_make_current_ref (FlatpakDir *self, + const char *ref, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_list_deployed (FlatpakDir *self, + const char *ref, + char ***deployed_checksums, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_lock (FlatpakDir *self, + GLnxLockFile *lockfile, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_repo_lock (FlatpakDir *self, + GLnxLockFile *lockfile, + gboolean exclusive, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_deploy (FlatpakDir *self, + const char *origin, + const char *ref, + const char *checksum_or_latest, + const char * const * subpaths, + GVariant *old_deploy_data, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_deploy_update (FlatpakDir *self, + const char *ref, + const char *checksum, + const char **opt_subpaths, + GCancellable *cancellable, + GError **error); +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, + FlatpakRemoteState *state, + const char *ref, + const char *opt_commit, + const char **subpaths, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error); +char *flatpak_dir_ensure_bundle_remote (FlatpakDir *self, + GFile *file, + GBytes *extra_gpg_data, + char **out_ref, + char **out_commit, + char **out_metadata, + gboolean *out_created_remote, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_install_bundle (FlatpakDir *self, + GFile *file, + const char *remote, + char **out_ref, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_needs_update_for_commit_and_subpaths (FlatpakDir *self, + const char *remote, + const char *ref, + const char *target_commit, + const char **opt_subpaths); +char * flatpak_dir_check_for_update (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + const char *checksum_or_latest, + const char **opt_subpaths, + gboolean no_pull, + OstreeRepoFinderResult ***out_results, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_update (FlatpakDir *self, + gboolean no_pull, + gboolean no_deploy, + gboolean no_static_deltas, + gboolean allow_downgrade, + FlatpakRemoteState *state, + const char *ref, + const char *checksum_or_latest, + const OstreeRepoFinderResult * const *results, + const char **opt_subpaths, + OstreeAsyncProgress *progress, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_uninstall (FlatpakDir *self, + const char *ref, + FlatpakHelperUninstallFlags flags, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_undeploy (FlatpakDir *self, + const char *ref, + const char *checksum, + gboolean is_update, + gboolean force_remove, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_undeploy_all (FlatpakDir *self, + const char *ref, + gboolean force_remove, + gboolean *was_deployed_out, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_remove_ref (FlatpakDir *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_update_exports (FlatpakDir *self, + const char *app, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_prune (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_run_triggers (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_update_summary (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_cleanup_removed (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_cleanup_undeployed_refs (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_collect_deployed_refs (FlatpakDir *self, + const char *type, + const char *name_prefix, + const char *branch, + const char *arch, + GHashTable *hash, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_collect_unmaintained_refs (FlatpakDir *self, + const char *name_prefix, + const char *arch, + const char *branch, + GHashTable *hash, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_remote_has_deploys (FlatpakDir *self, + const char *remote); +char *flatpak_dir_create_origin_remote (FlatpakDir *self, + const char *url, + const char *id, + const char *title, + const char *main_ref, + GBytes *gpg_data, + 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, + GKeyFile *keyfile, + const char *default_arch, + char **remote_name_out, + char **collection_id_out, + char **ref_out, + GError **error); +gboolean flatpak_dir_create_suggested_remote_for_ref_file (FlatpakDir *self, + GBytes *data, + GError **error); +GKeyFile * flatpak_dir_parse_repofile (FlatpakDir *self, + const char *remote_name, + gboolean from_ref, + GKeyFile *keyfile, + GBytes **gpg_data_out, + GCancellable *cancellable, + GError **error); + +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, + GError **error); +char **flatpak_dir_list_remotes (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +char **flatpak_dir_list_enumerated_remotes (FlatpakDir *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_modify_remote (FlatpakDir *self, + const char *remote_name, + GKeyFile *config, + GBytes *gpg_data, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_remove_remote (FlatpakDir *self, + gboolean force_remove, + const char *remote_name, + GCancellable *cancellable, + GError **error); +char *flatpak_dir_get_remote_title (FlatpakDir *self, + const char *remote_name); +char *flatpak_dir_get_remote_collection_id (FlatpakDir *self, + const char *remote_name); +char *flatpak_dir_get_remote_main_ref (FlatpakDir *self, + const char *remote_name); +gboolean flatpak_dir_get_remote_oci (FlatpakDir *self, + const char *remote_name); +char *flatpak_dir_get_remote_default_branch (FlatpakDir *self, + const char *remote_name); +int flatpak_dir_get_remote_prio (FlatpakDir *self, + const char *remote_name); +gboolean flatpak_dir_get_remote_noenumerate (FlatpakDir *self, + const char *remote_name); +gboolean flatpak_dir_get_remote_nodeps (FlatpakDir *self, + const char *remote_name); +gboolean flatpak_dir_get_remote_disabled (FlatpakDir *self, + const char *remote_name); +gboolean flatpak_dir_list_remote_refs (FlatpakDir *self, + FlatpakRemoteState *state, + GHashTable **refs, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_list_all_remote_refs (FlatpakDir *self, + FlatpakRemoteState *state, + GHashTable **out_all_refs, + 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, + GError **error); +gboolean flatpak_dir_update_remote_configuration_for_state (FlatpakDir *self, + FlatpakRemoteState *remote_state, + gboolean dry_run, + gboolean *has_changed_out, + GCancellable *cancellable, + GError **error); +FlatpakRemoteState * flatpak_dir_get_remote_state (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error); +FlatpakRemoteState * flatpak_dir_get_remote_state_for_summary (FlatpakDir *self, + const char *remote, + GBytes *opt_summary, + GBytes *opt_summary_sig, + GCancellable *cancellable, + GError **error); +FlatpakRemoteState * flatpak_dir_get_remote_state_optional (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error); +FlatpakRemoteState * flatpak_dir_get_remote_state_local_only (FlatpakDir *self, + const char *remote, + GCancellable *cancellable, + GError **error); +GPtrArray * flatpak_dir_find_remote_related_for_metadata (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + GKeyFile *metakey, + GCancellable *cancellable, + GError **error); +GPtrArray * flatpak_dir_find_remote_related (FlatpakDir *dir, + FlatpakRemoteState *state, + const char *ref, + GCancellable *cancellable, + GError **error); +GPtrArray * flatpak_dir_find_local_related_for_metadata (FlatpakDir *self, + const char *ref, + const char *remote_name, + GKeyFile *metakey, + GCancellable *cancellable, + GError **error); +GPtrArray * flatpak_dir_find_local_related (FlatpakDir *self, + const char *remote_name, + const char *ref, + gboolean deployed, + GCancellable *cancellable, + GError **error); +gboolean flatpak_dir_find_latest_rev (FlatpakDir *self, + FlatpakRemoteState *state, + const char *ref, + const char *checksum_or_latest, + char **out_rev, + OstreeRepoFinderResult ***out_results, + GCancellable *cancellable, + GError **error); + +typedef struct +{ + /* in */ + char *remote; + char *ref; + char *opt_commit; + + /* out */ + char *resolved_commit; + GBytes *resolved_metadata; +} FlatpakDirResolve; + +FlatpakDirResolve *flatpak_dir_resolve_new (const char *remote, + const char *ref, + const char *opt_commit); +void flatpak_dir_resolve_free (FlatpakDirResolve *resolve); +gboolean flatpak_dir_resolve_p2p_refs (FlatpakDir *self, + FlatpakDirResolve **resolves, + GCancellable *cancellable, + GError **error); + + +char ** flatpak_dir_get_default_locale_languages (FlatpakDir *self); +char ** flatpak_dir_get_locale_languages (FlatpakDir *self); +char ** flatpak_dir_get_locale_subpaths (FlatpakDir *self); + +#endif /* __FLATPAK_DIR_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-enum-types.c.template flatpak-1.0.7/common/flatpak-enum-types.c.template --- flatpak-0.11.3/common/flatpak-enum-types.c.template 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-enum-types.c.template 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,40 @@ +/*** BEGIN file-header ***/ +#include "config.h" +#include +#include +#include +#include + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static volatile gsize g_define_type_id__volatile = 0; + + if (g_once_init_enter (&g_define_type_id__volatile)) + { + static const G@Type@Value values[] = { +/*** END value-header ***/ + +/*** BEGIN value-production ***/ + { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, +/*** END value-production ***/ + +/*** BEGIN value-tail ***/ + { 0, NULL, NULL } + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); + } + + return g_define_type_id__volatile; +} + +/*** END value-tail ***/ diff -Nru flatpak-0.11.3/common/flatpak-enum-types.h.template flatpak-1.0.7/common/flatpak-enum-types.h.template --- flatpak-0.11.3/common/flatpak-enum-types.h.template 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-enum-types.h.template 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,24 @@ +/*** BEGIN file-header ***/ +#ifndef __FLATPAK_ENUM_TYPES_H__ +#define __FLATPAK_ENUM_TYPES_H__ + +#include + +G_BEGIN_DECLS +/*** END file-header ***/ + +/*** BEGIN file-production ***/ + +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +FLATPAK_EXTERN GType @enum_name@_get_type (void) G_GNUC_CONST; +#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) +/*** END value-header ***/ + +/*** BEGIN file-tail ***/ +G_END_DECLS + +#endif /* __GIO_ENUM_TYPES_H__ */ +/*** END file-tail ***/ diff -Nru flatpak-0.11.3/common/flatpak-error.c flatpak-1.0.7/common/flatpak-error.c --- flatpak-0.11.3/common/flatpak-error.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-error.c 2018-09-12 08:41:11.000000000 +0000 @@ -0,0 +1,36 @@ +/* flatpak-error.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 "flatpak-error.h" + +#include + +/** + * SECTION:flatpak-error + * @Title: Error codes + * + * The FlatpakError and FlatpakPortalError enumerations contain error codes + * for some common errors. + */ + +/* This is actually defined in common/flatpak-utils.c so the common code can report errors */ diff -Nru flatpak-0.11.3/common/flatpak-error.h flatpak-1.0.7/common/flatpak-error.h --- flatpak-0.11.3/common/flatpak-error.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-error.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,91 @@ +/* flatpak-error.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 + */ + +#ifndef FLATPAK_ERROR_H +#define FLATPAK_ERROR_H + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#include + +G_BEGIN_DECLS + +/* NOTE: If you add an error code below, also update the list in common/flatpak-utils.c */ +/** + * FlatpakError: + * @FLATPAK_ERROR_ALREADY_INSTALLED: App/runtime is already installed + * @FLATPAK_ERROR_NOT_INSTALLED: App/runtime is not installed + * @FLATPAK_ERROR_ONLY_PULLED: App/runtime was only pulled into the local + * repository but not installed. + * @FLATPAK_ERROR_DIFFERENT_REMOTE: The App/Runtime is already installed, but from a different remote. + * @FLATPAK_ERROR_ABORTED: The transaction was aborted (returned TRUE in operation-error signal). + * @FLATPAK_ERROR_SKIPPED: The App/Runtime install was skipped due to earlier errors. + * @FLATPAK_ERROR_NEED_NEW_FLATPAK: The App/Runtime needs a more recent version of flatpak. + * @FLATPAK_ERROR_REMOTE_NOT_FOUND: The specified remote was not found. + * @FLATPAK_ERROR_RUNTIME_NOT_FOUND: An runtime needed for the app was not found. + * @FLATPAK_ERROR_DOWNGRADE: The pulled commit is a downgrade, and a downgrade wasn't + * specifically allowed. (Since: 1.0) + * @FLATPAK_ERROR_INVALID_REF: A ref could not be parsed. (Since: 1.0.3) + * @FLATPAK_ERROR_INVALID_DATA: Invalid data. (Since: 1.0.3) + * @FLATPAK_ERROR_UNTRUSTED: Missing GPG key or signature. (Since: 1.0.3) + * @FLATPAK_ERROR_SETUP_FAILED: Sandbox setup failed. (Since: 1.0.3) + * @FLATPAK_ERROR_EXPORT_FAILED: Exporting data failed. (Since: 1.0.3) + * @FLATPAK_ERROR_REMOTE_USED: Remote can't be uninstalled. (Since: 1.0.3) + * @FLATPAK_ERROR_RUNTIME_USED: Runtime can't be uninstalled. (Since: 1.0.3) + * @FLATPAK_ERROR_INVALID_NAME: Application, runtime or remote name is invalid. (Since: 1.0.3) + * + * Error codes for library functions. + */ +typedef enum { + FLATPAK_ERROR_ALREADY_INSTALLED, + FLATPAK_ERROR_NOT_INSTALLED, + FLATPAK_ERROR_ONLY_PULLED, + FLATPAK_ERROR_DIFFERENT_REMOTE, + FLATPAK_ERROR_ABORTED, + FLATPAK_ERROR_SKIPPED, + FLATPAK_ERROR_NEED_NEW_FLATPAK, + FLATPAK_ERROR_REMOTE_NOT_FOUND, + FLATPAK_ERROR_RUNTIME_NOT_FOUND, + FLATPAK_ERROR_DOWNGRADE, + FLATPAK_ERROR_INVALID_REF, + FLATPAK_ERROR_INVALID_DATA, + FLATPAK_ERROR_UNTRUSTED, + FLATPAK_ERROR_SETUP_FAILED, + FLATPAK_ERROR_EXPORT_FAILED, + FLATPAK_ERROR_REMOTE_USED, + FLATPAK_ERROR_RUNTIME_USED, + FLATPAK_ERROR_INVALID_NAME, +} FlatpakError; + +/** + * FLATPAK_ERROR: + * + * The error domain for #FlatpakError errors. + */ +#define FLATPAK_ERROR flatpak_error_quark () + +FLATPAK_EXTERN GQuark flatpak_error_quark (void); + +G_END_DECLS + +#endif /* FLATPAK_ERROR_H */ diff -Nru flatpak-0.11.3/common/flatpak-exports.c flatpak-1.0.7/common/flatpak-exports.c --- flatpak-0.11.3/common/flatpak-exports.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-exports.c 2018-10-03 13:41:18.000000000 +0000 @@ -27,28 +27,31 @@ #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-exports-private.h" +#include "flatpak-run-private.h" #include "flatpak-proxy.h" -#include "flatpak-utils.h" -#include "flatpak-dir.h" -#include "flatpak-systemd-dbus.h" -#include "lib/flatpak-error.h" +#include "flatpak-utils-private.h" +#include "flatpak-dir-private.h" +#include "flatpak-systemd-dbus-generated.h" +#include "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 + "/lib", "/lib32", "/lib64", "/bin", "/sbin", "/usr", "/etc", "/app", "/dev", "/proc", NULL }; static char * @@ -80,13 +83,15 @@ #define FAKE_MODE_TMPFS 0 #define FAKE_MODE_SYMLINK G_MAXINT -typedef struct { +typedef struct +{ char *path; - gint mode; + gint mode; } ExportedPath; -struct _FlatpakExports { - GHashTable *hash; +struct _FlatpakExports +{ + GHashTable *hash; FlatpakFilesystemMode host_fs; }; @@ -101,7 +106,8 @@ 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); + + exports->hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GFreeFunc) exported_path_free); return exports; } @@ -116,9 +122,9 @@ 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 n_keys, + GHashTable *hash_table, + const char *path) { guint i; gboolean is_mapped = FALSE; @@ -145,10 +151,10 @@ static gboolean path_is_mapped (const char **keys, - guint n_keys, - GHashTable *hash_table, - const char *path, - gboolean *is_readonly_out) + guint n_keys, + GHashTable *hash_table, + const char *path, + gboolean *is_readonly_out) { guint i; gboolean is_mapped = FALSE; @@ -215,15 +221,16 @@ void flatpak_exports_append_bwrap_args (FlatpakExports *exports, - FlatpakBwrap *bwrap) + FlatpakBwrap *bwrap) { guint n_keys; - g_autofree const char **keys = (const char **)g_hash_table_get_keys_as_array (exports->hash, &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); + eps = g_list_sort (eps, (GCompareFunc) compare_eps); g_qsort_with_data (keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); @@ -287,12 +294,13 @@ /* Returns 0 if not visible */ FlatpakFilesystemMode flatpak_exports_path_get_mode (FlatpakExports *exports, - const char *path) + 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 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 (""); @@ -302,7 +310,7 @@ path = canonical = flatpak_canonicalize_filename (path); - parts = g_strsplit (path+1, "/", -1); + 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 @@ -318,7 +326,19 @@ if (path_is_mapped (keys, n_keys, exports->hash, path_builder->str, &is_readonly)) { if (lstat (path_builder->str, &st) != 0) - return 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)) { @@ -340,7 +360,7 @@ return flatpak_exports_path_get_mode (exports, path2_builder->str); } } - else if (parts[i+1] == NULL) + else if (parts[i + 1] == NULL) return 0; /* Last part was not mapped */ } @@ -352,7 +372,7 @@ gboolean flatpak_exports_path_is_visible (FlatpakExports *exports, - const char *path) + const char *path) { return flatpak_exports_path_get_mode (exports, path) > 0; } @@ -371,8 +391,8 @@ static void do_export_path (FlatpakExports *exports, - const char *path, - gint mode) + const char *path, + gint mode) { ExportedPath *old_ep = g_hash_table_lookup (exports->hash, path); ExportedPath *ep; @@ -388,18 +408,89 @@ g_hash_table_replace (exports->hash, ep->path, ep); } +/* AUTOFS mounts are tricky, as using them as a source in a bind mount + * causes the mount to trigger, which can take a long time (or forever) + * waiting for a device or network mount. We try to open the directory + * but time out after a while, ignoring the mount. Unfortunately we + * have to mess with forks and stuff to be able to handle the timeout. + */ +static gboolean +check_if_autofs_works (const char *path) +{ + int selfpipe[2]; + struct timeval timeout; + pid_t pid; + fd_set rfds; + int res; + int wstatus; + + if (pipe2 (selfpipe, O_CLOEXEC) == -1) + return FALSE; + + fcntl (selfpipe[0], F_SETFL, fcntl (selfpipe[0], F_GETFL) | O_NONBLOCK); + fcntl (selfpipe[1], F_SETFL, fcntl (selfpipe[1], F_GETFL) | O_NONBLOCK); + + pid = fork (); + if (pid == -1) + { + close (selfpipe[0]); + close (selfpipe[1]); + return FALSE; + } + + if (pid == 0) + { + /* Note: open, close and _exit are signal-async-safe, so it is ok to call in the child after fork */ + + close (selfpipe[0]); /* Close unused read end */ + int dir_fd = open (path, O_RDONLY | O_NONBLOCK | O_CLOEXEC | O_DIRECTORY); + _exit (dir_fd == -1 ? 1 : 0); + } + + /* Parent */ + close (selfpipe[1]); /* Close unused write end */ + + /* 200 msec timeout*/ + timeout.tv_sec = 0; + timeout.tv_usec = 200 * 1000; + + FD_ZERO (&rfds); + FD_SET (selfpipe[0], &rfds); + res = select (selfpipe[0] + 1, &rfds, NULL, NULL, &timeout); + + close (selfpipe[0]); + + if (res == -1 /* Error */ || res == 0) /* Timeout */ + { + /* Kill, but then waitpid to avoid zombie */ + kill (pid, SIGKILL); + } + + if (waitpid (pid, &wstatus, 0) != pid) + return FALSE; + + if (res == -1 /* Error */ || res == 0) /* Timeout */ + return FALSE; + + if (!WIFEXITED (wstatus) || WEXITSTATUS (wstatus) != 0) + return FALSE; + + return TRUE; +} /* We use level to avoid infinite recursion */ static gboolean _exports_path_expose (FlatpakExports *exports, - int mode, - const char *path, - int level) + int mode, + const char *path, + int level) { g_autofree char *canonical = NULL; struct stat st; + struct statfs stfs; char *slash; int i; + glnx_autofd int o_path_fd = -1; if (level > 40) /* 40 is the current kernel ELOOP check */ { @@ -414,7 +505,11 @@ } /* Check if it exists at all */ - if (lstat (path, &st) != 0) + o_path_fd = open (path, O_PATH | O_NOFOLLOW | O_CLOEXEC); + if (o_path_fd == -1) + return FALSE; + + if (fstat (o_path_fd, &st) != 0) return FALSE; /* Don't expose weird things */ @@ -424,6 +519,19 @@ S_ISSOCK (st.st_mode))) return FALSE; + /* O_PATH + fstatfs is the magic that we need to statfs without automounting the target */ + if (fstatfs (o_path_fd, &stfs) != 0) + return FALSE; + + if (stfs.f_type == AUTOFS_SUPER_MAGIC) + { + if (!check_if_autofs_works (path)) + { + g_debug ("ignoring blocking autofs path %s", path); + return FALSE; + } + } + path = canonical = flatpak_canonicalize_filename (path); for (i = 0; dont_export_in[i] != NULL; i++) @@ -478,24 +586,24 @@ } void -flatpak_exports_add_path_expose (FlatpakExports *exports, +flatpak_exports_add_path_expose (FlatpakExports *exports, FlatpakFilesystemMode mode, - const char *path) + const char *path) { _exports_path_expose (exports, mode, path, 0); } void flatpak_exports_add_path_tmpfs (FlatpakExports *exports, - const char *path) + const char *path) { _exports_path_expose (exports, FAKE_MODE_TMPFS, path, 0); } void -flatpak_exports_add_path_expose_or_hide (FlatpakExports *exports, +flatpak_exports_add_path_expose_or_hide (FlatpakExports *exports, FlatpakFilesystemMode mode, - const char *path) + const char *path) { if (mode == 0) flatpak_exports_add_path_tmpfs (exports, path); @@ -505,13 +613,13 @@ void flatpak_exports_add_path_dir (FlatpakExports *exports, - const char *path) + const char *path) { _exports_path_expose (exports, FAKE_MODE_DIR, path, 0); } void -flatpak_exports_add_home_expose (FlatpakExports *exports, +flatpak_exports_add_home_expose (FlatpakExports *exports, FlatpakFilesystemMode mode) { exports->host_fs = mode; diff -Nru flatpak-0.11.3/common/flatpak-exports.h flatpak-1.0.7/common/flatpak-exports.h --- flatpak-0.11.3/common/flatpak-exports.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-exports.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,62 +0,0 @@ -/* - * 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 -Nru flatpak-0.11.3/common/flatpak-exports-private.h flatpak-1.0.7/common/flatpak-exports-private.h --- flatpak-0.11.3/common/flatpak-exports-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-exports-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,61 @@ +/* + * 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-bwrap-private.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 -Nru flatpak-0.11.3/common/flatpak.h flatpak-1.0.7/common/flatpak.h --- flatpak-0.11.3/common/flatpak.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,43 @@ +/* + * 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_H__ +#define __FLATPAK_H__ + +#define __FLATPAK_H_INSIDE__ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef __FLATPAK_H_INSIDE__ + +#endif /* __FLATPAK_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-installation.c flatpak-1.0.7/common/flatpak-installation.c --- flatpak-0.11.3/common/flatpak-installation.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installation.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,2710 @@ +/* + * 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 "flatpak-installation-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-installation.h" +#include "flatpak-installed-ref-private.h" +#include "flatpak-transaction-private.h" +#include "flatpak-related-ref-private.h" +#include "flatpak-remote-private.h" +#include "flatpak-remote-ref-private.h" +#include "flatpak-enum-types.h" +#include "flatpak-dir-private.h" +#include "flatpak-run-private.h" +#include "flatpak-error.h" + +/** + * SECTION:flatpak-installation + * @Title: FlatpakInstallation + * @Short_description: Installation information + * @See_also: FlatpakTransaction + * + * FlatpakInstallation is the toplevel object that software installers + * should use to operate on an flatpak applications. + * + * An FlatpakInstallation object provides information about an installation + * location for flatpak applications. Typical installation locations are either + * system-wide (in $prefix/var/lib/flatpak) or per-user (in ~/.local/share/flatpak). + * + * FlatpakInstallation can list configured remotes as well as installed application + * and runtime references (in short: refs), and it can add, remove and modify remotes. + * + * FlatpakInstallation can also run, install, update and uninstall applications and + * runtimes, but #FlatpakTransaction is a better, high-level API for these tasks. + * + * To get a list of all configured installations, use flatpak_get_system_installations(), + * together with flatpak_installation_new_user(). + * + * The FlatpakInstallatio nAPI is threadsafe in the sense that it is safe to run two + * operations at the same time, in different threads (or processes). + */ + +typedef struct _FlatpakInstallationPrivate FlatpakInstallationPrivate; + +G_LOCK_DEFINE_STATIC (dir); + +struct _FlatpakInstallationPrivate +{ + /* All raw access to this should be protected by the dir lock. The FlatpakDir object is mostly + threadsafe (apart from pull transactions being a singleton on it), however we replace it during + flatpak_installation_drop_caches(), so every user needs to keep its own reference alive until + done. */ + FlatpakDir *dir_unlocked; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakInstallation, flatpak_installation, G_TYPE_OBJECT) + +enum { + PROP_0, +}; + +static void +no_progress_cb (OstreeAsyncProgress *progress, gpointer user_data) +{ +} + +static void +flatpak_installation_finalize (GObject *object) +{ + FlatpakInstallation *self = FLATPAK_INSTALLATION (object); + FlatpakInstallationPrivate *priv = flatpak_installation_get_instance_private (self); + + g_object_unref (priv->dir_unlocked); + + G_OBJECT_CLASS (flatpak_installation_parent_class)->finalize (object); +} + +static void +flatpak_installation_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_installation_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_installation_class_init (FlatpakInstallationClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_installation_get_property; + object_class->set_property = flatpak_installation_set_property; + object_class->finalize = flatpak_installation_finalize; + + /* Avoid weird recursive type initialization deadlocks from libsoup */ + g_type_ensure (G_TYPE_SOCKET); +} + +static void +flatpak_installation_init (FlatpakInstallation *self) +{ +} + +static FlatpakInstallation * +flatpak_installation_new_steal_dir (FlatpakDir *dir, + GCancellable *cancellable, + GError **error) +{ + FlatpakInstallation *self; + FlatpakInstallationPrivate *priv; + + if (!flatpak_dir_maybe_ensure_repo (dir, NULL, error)) + { + g_object_unref (dir); + return NULL; + } + + self = g_object_new (FLATPAK_TYPE_INSTALLATION, NULL); + priv = flatpak_installation_get_instance_private (self); + + priv->dir_unlocked = dir; + + return self; +} + +FlatpakInstallation * +flatpak_installation_new_for_dir (FlatpakDir *dir, + GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_new_steal_dir (g_object_ref (dir), + cancellable, + error); +} + +/** + * flatpak_get_default_arch: + * + * Returns the canonical name for the arch of the current machine. + * + * Returns: an arch string + */ +const char * +flatpak_get_default_arch (void) +{ + return flatpak_get_arch (); +} + +/** + * flatpak_get_supported_arches: + * + * Returns the canonical names for the arches that are supported (i.e. can run) + * on the current machine, in order of priority (default is first). + * + * Returns: a zero terminated array of arch strings + */ +const char * const * +flatpak_get_supported_arches (void) +{ + return (const char * const *) flatpak_get_arches (); +} + +/** + * flatpak_get_system_installations: + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists the system installations according to the current configuration and current + * availability (e.g. doesn't return a configured installation if not reachable). + * + * Returns: (transfer container) (element-type FlatpakInstallation): a GPtrArray of + * #FlatpakInstallation instances + * + * Since: 0.8 + */ +GPtrArray * +flatpak_get_system_installations (GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) system_dirs = NULL; + g_autoptr(GPtrArray) installs = NULL; + GPtrArray *ret = NULL; + int i; + + system_dirs = flatpak_dir_get_system_list (cancellable, error); + if (system_dirs == NULL) + goto out; + + installs = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); + for (i = 0; i < system_dirs->len; i++) + { + g_autoptr(GError) local_error = NULL; + FlatpakDir *install_dir = g_ptr_array_index (system_dirs, i); + g_autoptr(FlatpakInstallation) installation = NULL; + + installation = flatpak_installation_new_for_dir (install_dir, + cancellable, + &local_error); + if (installation != NULL) + g_ptr_array_add (installs, g_steal_pointer (&installation)); + else + { + /* 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); + } + } + + if (installs->len == 0) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "No system installations found"); + } + + ret = g_steal_pointer (&installs); + +out: + return ret; +} + +/** + * flatpak_installation_new_system: + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a new #FlatpakInstallation for the system-wide installation. + * + * Returns: (transfer full): a new #FlatpakInstallation + */ +FlatpakInstallation * +flatpak_installation_new_system (GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_new_steal_dir (flatpak_dir_get_system_default (), cancellable, error); +} + +/** + * flatpak_installation_new_system_with_id: + * @id: (nullable): the ID of the system-wide installation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a new #FlatpakInstallation for the system-wide installation @id. + * + * Returns: (transfer full): a new #FlatpakInstallation + * + * Since: 0.8 + */ +FlatpakInstallation * +flatpak_installation_new_system_with_id (const char *id, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) install_dir = NULL; + g_autoptr(FlatpakInstallation) installation = NULL; + g_autoptr(GError) local_error = NULL; + + install_dir = flatpak_dir_get_system_by_id (id, cancellable, error); + if (install_dir == NULL) + return NULL; + + installation = flatpak_installation_new_for_dir (install_dir, + cancellable, + &local_error); + if (installation == NULL) + { + g_debug ("Error creating Flatpak installation: %s", local_error->message); + g_propagate_error (error, g_steal_pointer (&local_error)); + } + + g_debug ("Found Flatpak installation for '%s'", id); + return g_steal_pointer (&installation); +} + +/** + * flatpak_installation_new_user: + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a new #FlatpakInstallation for the per-user installation. + * + * Returns: (transfer full): a new #FlatpakInstallation + */ +FlatpakInstallation * +flatpak_installation_new_user (GCancellable *cancellable, + GError **error) +{ + flatpak_migrate_from_xdg_app (); + + return flatpak_installation_new_steal_dir (flatpak_dir_get_user (), cancellable, error); +} + +/** + * flatpak_installation_new_for_path: + * @path: a #GFile + * @user: whether this is a user-specific location + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a new #FlatpakInstallation for the installation at the given @path. + * + * Returns: (transfer full): a new #FlatpakInstallation + */ +FlatpakInstallation * +flatpak_installation_new_for_path (GFile *path, gboolean user, + GCancellable *cancellable, + GError **error) +{ + flatpak_migrate_from_xdg_app (); + + return flatpak_installation_new_steal_dir (flatpak_dir_new (path, user), cancellable, error); +} + +static FlatpakDir * +_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); +} + +FlatpakDir * +flatpak_installation_clone_dir_noensure (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir_clone = NULL; + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir_maybe_no_repo (self); + + /* Pull, prune, etc are not threadsafe, so we work on a copy */ + dir_clone = flatpak_dir_clone (dir); + + return g_steal_pointer (&dir_clone); +} + +FlatpakDir * +flatpak_installation_clone_dir (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir_clone = NULL; + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + /* 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)) + return NULL; + + return g_steal_pointer (&dir_clone); +} + +/** + * flatpak_installation_drop_caches: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Drops all internal (in-memory) caches. For instance, this may be needed to pick up new or changed + * remotes configured outside this installation instance. + * + * Returns: %TRUE on success, %FALSE on error + */ +gboolean +flatpak_installation_drop_caches (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakInstallationPrivate *priv = flatpak_installation_get_instance_private (self); + FlatpakDir *clone, *old; + gboolean res = FALSE; + + G_LOCK (dir); + + old = priv->dir_unlocked; + clone = flatpak_dir_clone (priv->dir_unlocked); + + if (flatpak_dir_maybe_ensure_repo (clone, cancellable, error)) + { + priv->dir_unlocked = clone; + g_object_unref (old); + res = TRUE; + } + + G_UNLOCK (dir); + + return res; +} + +/** + * flatpak_installation_get_is_user: + * @self: a #FlatpakInstallation + * + * Returns whether the installation is for a user-specific location. + * + * Returns: %TRUE if @self is a per-user installation + */ +gboolean +flatpak_installation_get_is_user (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + return flatpak_dir_is_user (dir); +} + +/** + * flatpak_installation_get_path: + * @self: a #FlatpakInstallation + * + * Returns the installation location for @self. + * + * Returns: (transfer full): an #GFile + */ +GFile * +flatpak_installation_get_path (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + return g_object_ref (flatpak_dir_get_path (dir)); +} + +/** + * flatpak_installation_get_id: + * @self: a #FlatpakInstallation + * + * Returns the ID of the system installation for @self. + * + * Returns: (transfer none): a string with the installation's ID + * + * Since: 0.8 + */ +const char * +flatpak_installation_get_id (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + return flatpak_dir_get_id (dir); +} + +/** + * flatpak_installation_get_display_name: + * @self: a #FlatpakInstallation + * + * Returns the display name of the system installation for @self. + * + * Returns: (transfer none): a string with the installation's display name + * + * Since: 0.8 + */ +const char * +flatpak_installation_get_display_name (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + return flatpak_dir_get_display_name (dir); +} + +/** + * flatpak_installation_get_priority: + * @self: a #FlatpakInstallation + * + * Returns the numeric priority of the system installation for @self. + * + * Returns: an integer with the configured priority value + * + * Since: 0.8 + */ +gint +flatpak_installation_get_priority (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + return flatpak_dir_get_priority (dir); +} + +/** + * flatpak_installation_get_storage_type: + * @self: a #FlatpakInstallation + * + * Returns the type of storage of the system installation for @self. + * + * Returns: a #FlatpakStorageType + * + * Since: 0.8 + */FlatpakStorageType +flatpak_installation_get_storage_type (FlatpakInstallation *self) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + + switch (flatpak_dir_get_storage_type (dir)) + { + case FLATPAK_DIR_STORAGE_TYPE_HARD_DISK: + return FLATPAK_STORAGE_TYPE_HARD_DISK; + + case FLATPAK_DIR_STORAGE_TYPE_SDCARD: + return FLATPAK_STORAGE_TYPE_SDCARD; + + 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; + } + + return FLATPAK_STORAGE_TYPE_DEFAULT; +} + +/** + * flatpak_installation_launch: + * @self: a #FlatpakInstallation + * @name: name of the app to launch + * @arch: (nullable): which architecture to launch (default: current architecture) + * @branch: (nullable): which branch of the application (default: "master") + * @commit: (nullable): the commit of @branch to launch + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Launch an installed application. + * + * You can use flatpak_installation_get_installed_ref() or + * flatpak_installation_get_current_installed_app() to find out what builds + * are available, in order to get a value for @commit. + * + * Returns: %TRUE, unless an error occurred + */ +gboolean +flatpak_installation_launch (FlatpakInstallation *self, + const char *name, + const char *arch, + const char *branch, + const char *commit, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakDeploy) app_deploy = NULL; + g_autofree char *app_ref = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + + app_ref = + flatpak_build_app_ref (name, branch, arch); + + app_deploy = + flatpak_dir_load_deployed (dir, app_ref, + commit, + cancellable, error); + if (app_deploy == NULL) + return FALSE; + + return flatpak_run_app (app_ref, + app_deploy, + NULL, NULL, + NULL, NULL, + FLATPAK_RUN_FLAG_BACKGROUND, + NULL, + NULL, 0, + cancellable, error); +} + + +static FlatpakInstalledRef * +get_ref (FlatpakDir *dir, + const char *full_ref, + GCancellable *cancellable, + GError **error) +{ + g_auto(GStrv) parts = NULL; + const char *origin = NULL; + const char *commit = NULL; + const char *alt_id = NULL; + g_autofree char *latest_alt_id = NULL; + g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(GFile) deploy_subdir = NULL; + g_autofree char *deploy_path = NULL; + g_autofree char *latest_commit = NULL; + g_autofree char *deploy_subdirname = NULL; + g_autoptr(GVariant) deploy_data = NULL; + g_autofree const char **subpaths = NULL; + gboolean is_current = FALSE; + guint64 installed_size = 0; + + parts = g_strsplit (full_ref, "/", -1); + + deploy_data = flatpak_dir_get_deploy_data (dir, full_ref, cancellable, error); + if (deploy_data == NULL) + return NULL; + origin = flatpak_deploy_data_get_origin (deploy_data); + commit = flatpak_deploy_data_get_commit (deploy_data); + alt_id = flatpak_deploy_data_get_alt_id (deploy_data); + subpaths = flatpak_deploy_data_get_subpaths (deploy_data); + installed_size = flatpak_deploy_data_get_installed_size (deploy_data); + + deploy_dir = flatpak_dir_get_deploy_dir (dir, full_ref); + deploy_subdirname = flatpak_dir_get_deploy_subdir (dir, commit, subpaths); + deploy_subdir = g_file_get_child (deploy_dir, deploy_subdirname); + deploy_path = g_file_get_path (deploy_subdir); + + if (strcmp (parts[0], "app") == 0) + { + g_autofree char *current = + flatpak_dir_current_ref (dir, parts[1], cancellable); + if (current && strcmp (full_ref, current) == 0) + is_current = TRUE; + } + + latest_commit = flatpak_dir_read_latest (dir, origin, full_ref, &latest_alt_id, NULL, NULL); + + return flatpak_installed_ref_new (full_ref, + alt_id ? alt_id : commit, + latest_alt_id ? latest_alt_id : latest_commit, + origin, subpaths, + deploy_path, + installed_size, + is_current, + flatpak_deploy_data_get_eol (deploy_data), + flatpak_deploy_data_get_eol_rebase (deploy_data)); +} + +/** + * flatpak_installation_get_installed_ref: + * @self: a #FlatpakInstallation + * @kind: whether this is an app or runtime + * @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") + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Returns information about an installed ref, such as the available builds, + * its size, location, etc. + * + * Returns: (transfer full): an #FlatpakInstalledRef, or %NULL if an error occurred + */ +FlatpakInstalledRef * +flatpak_installation_get_installed_ref (FlatpakInstallation *self, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable, + GError **error) +{ + 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 (); + + if (kind == FLATPAK_REF_KIND_APP) + ref = flatpak_build_app_ref (name, branch, arch); + else + ref = flatpak_build_runtime_ref (name, branch, arch); + + + deploy = flatpak_dir_get_if_deployed (dir, + ref, NULL, cancellable); + if (deploy == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, + _("Ref %s not installed"), ref); + return NULL; + } + + return get_ref (dir, ref, cancellable, error); +} + +/** + * flatpak_installation_get_current_installed_app: + * @self: a #FlatpakInstallation + * @name: the name of the app + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Get the last build of reference @name that was installed with + * flatpak_installation_install(), or %NULL if the reference has + * never been installed locally. + * + * Returns: (transfer full): an #FlatpakInstalledRef + */ +FlatpakInstalledRef * +flatpak_installation_get_current_installed_app (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GFile) deploy = NULL; + 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); + + if (deploy == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, + _("App %s not installed"), name); + return NULL; + } + + return get_ref (dir, current, cancellable, error); +} + +/** + * flatpak_installation_list_installed_refs: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists the installed references. + * + * Returns: (transfer container) (element-type FlatpakInstalledRef): a GPtrArray of + * #FlatpakInstalledRef instances + */ +GPtrArray * +flatpak_installation_list_installed_refs (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + 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); + int i; + + if (!flatpak_dir_list_refs (dir, + "app", + &raw_refs_app, + cancellable, error)) + return NULL; + + for (i = 0; raw_refs_app[i] != NULL; i++) + { + g_autoptr(GError) local_error = NULL; + FlatpakInstalledRef *ref = get_ref (dir, raw_refs_app[i], cancellable, &local_error); + if (ref != NULL) + g_ptr_array_add (refs, ref); + else + g_warning ("Unexpected failure getting ref for %s: %s", raw_refs_app[i], local_error->message); + } + + if (!flatpak_dir_list_refs (dir, + "runtime", + &raw_refs_runtime, + cancellable, error)) + return NULL; + + for (i = 0; raw_refs_runtime[i] != NULL; i++) + { + g_autoptr(GError) local_error = NULL; + FlatpakInstalledRef *ref = get_ref (dir, raw_refs_runtime[i], cancellable, &local_error); + if (ref != NULL) + g_ptr_array_add (refs, ref); + else + g_warning ("Unexpected failure getting ref for %s: %s", raw_refs_runtime[i], local_error->message); + } + + return g_steal_pointer (&refs); +} + +/** + * flatpak_installation_list_installed_refs_by_kind: + * @self: a #FlatpakInstallation + * @kind: the kind of installation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists the installed references of a specific kind. + * + * Returns: (transfer container) (element-type FlatpakInstalledRef): a GPtrArray of + * #FlatpakInstalledRef instances + */ +GPtrArray * +flatpak_installation_list_installed_refs_by_kind (FlatpakInstallation *self, + FlatpakRefKind kind, + GCancellable *cancellable, + GError **error) +{ + 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; + + if (!flatpak_dir_list_refs (dir, + kind == FLATPAK_REF_KIND_APP ? "app" : "runtime", + &raw_refs, + cancellable, error)) + return NULL; + + for (i = 0; raw_refs[i] != NULL; i++) + { + g_autoptr(GError) local_error = NULL; + FlatpakInstalledRef *ref = get_ref (dir, raw_refs[i], cancellable, &local_error); + if (ref != NULL) + g_ptr_array_add (refs, ref); + else + g_warning ("Unexpected failure getting ref for %s: %s", raw_refs[i], local_error->message); + } + + return g_steal_pointer (&refs); +} + +static void +async_result_cb (GObject *obj, + GAsyncResult *result, + gpointer user_data) +{ + GAsyncResult **result_out = user_data; + + *result_out = g_object_ref (result); +} + +/** + * flatpak_installation_list_installed_refs_for_update: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists the installed references that has a remote update that is not + * locally available. However, even though an app is not returned by this + * it can have local updates available that has not been deployed. Look + * at commit vs latest_commit on installed apps for this. + * + * Returns: (transfer container) (element-type FlatpakInstalledRef): a GPtrArray of + * #FlatpakInstalledRef instances, or %NULL on error + */ +GPtrArray * +flatpak_installation_list_installed_refs_for_update (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(GPtrArray) updates = NULL; /* (element-type FlatpakInstalledRef) */ + g_autoptr(GPtrArray) installed = NULL; /* (element-type FlatpakInstalledRef) */ + g_autoptr(GPtrArray) remotes = NULL; /* (element-type FlatpakRemote) */ + g_autoptr(GHashTable) remote_commits = NULL; /* (element-type utf8 utf8) */ + int i, j; + g_autoptr(FlatpakDir) dir = NULL; + g_auto(OstreeRepoFinderResultv) results = NULL; + g_autoptr(GAsyncResult) result = NULL; + g_autoptr(GPtrArray) collection_refs = NULL; /* (element-type OstreeCollectionRef) */ + + remote_commits = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); + + remotes = flatpak_installation_list_remotes (self, cancellable, error); + if (remotes == NULL) + return NULL; + + for (i = 0; i < remotes->len; i++) + { + FlatpakRemote *remote = g_ptr_array_index (remotes, i); + g_autoptr(GPtrArray) refs = NULL; + g_autoptr(GError) local_error = NULL; + g_autofree char *collection_id = NULL; + const char *remote_name = flatpak_remote_get_name (remote); + + if (flatpak_remote_get_disabled (remote)) + continue; + + /* Remotes with collection IDs will be handled separately below */ + collection_id = flatpak_remote_get_collection_id (remote); + if (collection_id != NULL) + continue; + + /* We ignore errors here. we don't want one remote to fail us */ + refs = flatpak_installation_list_remote_refs_sync (self, + remote_name, + cancellable, &local_error); + if (refs != NULL) + { + for (j = 0; j < refs->len; j++) + { + FlatpakRemoteRef *remote_ref = g_ptr_array_index (refs, j); + g_autofree char *full_ref = flatpak_ref_format_ref (FLATPAK_REF (remote_ref)); + g_autofree char *key = g_strdup_printf ("%s:%s", remote_name, full_ref); + + g_hash_table_insert (remote_commits, g_steal_pointer (&key), + g_strdup (flatpak_ref_get_commit (FLATPAK_REF (remote_ref)))); + } + } + else + { + g_debug ("Update: Failed to read remote %s: %s", + flatpak_remote_get_name (remote), + local_error->message); + } + } + + installed = flatpak_installation_list_installed_refs (self, cancellable, error); + if (installed == NULL) + return NULL; + + updates = g_ptr_array_new_with_free_func (g_object_unref); + + for (i = 0; i < installed->len; i++) + { + FlatpakInstalledRef *installed_ref = g_ptr_array_index (installed, i); + const char *remote_name = flatpak_installed_ref_get_origin (installed_ref); + g_autofree char *full_ref = flatpak_ref_format_ref (FLATPAK_REF (installed_ref)); + g_autofree char *key = g_strdup_printf ("%s:%s", remote_name, full_ref); + const char *remote_commit = g_hash_table_lookup (remote_commits, key); + const char *local_commit = flatpak_installed_ref_get_latest_commit (installed_ref); + + /* Note: local_commit may be NULL here */ + if (remote_commit != NULL && + g_strcmp0 (remote_commit, local_commit) != 0) + g_ptr_array_add (updates, g_object_ref (installed_ref)); + } + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + collection_refs = g_ptr_array_new (); + + for (i = 0; i < installed->len; i++) + { + FlatpakInstalledRef *installed_ref = g_ptr_array_index (installed, i); + g_autofree char *collection_id = NULL; + const char *remote_name = flatpak_installed_ref_get_origin (installed_ref); + + collection_id = flatpak_dir_get_remote_collection_id (dir, remote_name); + if (collection_id != NULL) + { + g_autofree char *ref = flatpak_ref_format_ref (FLATPAK_REF (installed_ref)); + OstreeCollectionRef *c_r = ostree_collection_ref_new (collection_id, ref); + g_ptr_array_add (collection_refs, c_r); + } + } + + /* if we do not have any collection refs, then we shouldn't try to find + * dynamic remotes for them, to avoid extra unnecessary processing, and also + * because the refs array cannot be empty in ostree_repo_find_remotes_async + * (otherwise it early returns and we never get our callback called) */ + if (collection_refs->len > 0) + { + g_autoptr(GMainContextPopDefault) context = NULL; + + g_ptr_array_add (collection_refs, NULL); + + context = flatpak_main_context_new_default (); + + ostree_repo_find_remotes_async (flatpak_dir_get_repo (dir), + (const OstreeCollectionRef * const *) collection_refs->pdata, + NULL, /* no options */ + NULL, /* default finders */ + NULL, /* no progress */ + cancellable, + async_result_cb, + &result); + + while (result == NULL) + g_main_context_iteration (context, TRUE); + + results = ostree_repo_find_remotes_finish (flatpak_dir_get_repo (dir), result, error); + + if (results == NULL) + return NULL; + } + + for (i = 0; i < installed->len; i++) + { + FlatpakInstalledRef *installed_ref = g_ptr_array_index (installed, i); + const char *remote_name = flatpak_installed_ref_get_origin (installed_ref); + g_autofree char *ref = flatpak_ref_format_ref (FLATPAK_REF (installed_ref)); + g_autofree char *collection_id = NULL; + g_autoptr(OstreeCollectionRef) collection_ref = NULL; + + collection_id = flatpak_dir_get_remote_collection_id (dir, remote_name); + collection_ref = ostree_collection_ref_new (collection_id, ref); + + /* Look for matching remote refs that are updates */ + for (j = 0; results != NULL && results[j] != NULL; j++) + { + const char *local_commit, *remote_commit; + + local_commit = flatpak_installed_ref_get_latest_commit (installed_ref); + remote_commit = g_hash_table_lookup (results[j]->ref_to_checksum, collection_ref); + if (remote_commit == NULL || g_strcmp0 (remote_commit, local_commit) == 0) + continue; + + /* The ref_to_checksum map only tells us if this remote is offering + * the latest commit of the available remotes; we have to check + * ref_to_timestamp to know if the commit is an update or a + * downgrade. If local_commit is NULL assume it's an update until + * proven otherwise. + */ + if (local_commit != NULL) + { + guint64 local_timestamp = 0; + guint64 *remote_timestamp; + g_autoptr(GVariant) commit_v = NULL; + + if (ostree_repo_load_commit (flatpak_dir_get_repo (dir), local_commit, &commit_v, NULL, NULL)) + local_timestamp = ostree_commit_get_timestamp (commit_v); + + remote_timestamp = g_hash_table_lookup (results[j]->ref_to_timestamp, collection_ref); + *remote_timestamp = GUINT64_FROM_BE (*remote_timestamp); + + g_debug ("%s: Comparing local timestamp %" G_GUINT64_FORMAT " to remote timestamp %" + G_GUINT64_FORMAT " on ref (%s, %s)", G_STRFUNC, local_timestamp, *remote_timestamp, + collection_ref->collection_id, collection_ref->ref_name); + + /* The timestamp could be 0 due to an error reading it. Assume + * it's an update until proven otherwise. */ + if (*remote_timestamp != 0 && *remote_timestamp <= local_timestamp) + continue; + } + + g_ptr_array_add (updates, g_object_ref (installed_ref)); + + /* Move on to the next ref so we don't add duplicates */ + break; + } + } + + return g_steal_pointer (&updates); +} + +/* Find all USB and LAN repositories which share the same collection ID as + * @remote_name, and add a #FlatpakRemote to @remotes for each of them. The caller + * must initialise @remotes. Returns %TRUE without modifying @remotes if the + * given remote doesn’t have a collection ID configured. + * + * FIXME: If this were async, the parallelisation could be handled in the caller. */ +static gboolean +list_remotes_for_configured_remote (FlatpakInstallation *self, + const gchar *remote_name, + FlatpakDir *dir, + gboolean types_filter[], + GPtrArray *remotes /* (element-type FlatpakRemote) */, + GCancellable *cancellable, + GError **error) +{ + g_autofree gchar *collection_id = NULL; + OstreeCollectionRef ref; + OstreeCollectionRef ref2; + const OstreeCollectionRef *refs[3] = { NULL, }; + g_autofree gchar *appstream_ref = NULL; + g_autofree gchar *appstream2_ref = NULL; + + g_auto(OstreeRepoFinderResultv) results = NULL; + g_autoptr(GAsyncResult) result = NULL; + g_autoptr(OstreeRepoFinder) finder_mount = NULL, finder_avahi = NULL; + OstreeRepoFinder *finders[3] = { NULL, }; + gsize i; + guint finder_index = 0; + g_autoptr(GMainContextPopDefault) context = NULL; + + if (!types_filter[FLATPAK_REMOTE_TYPE_USB] && + !types_filter[FLATPAK_REMOTE_TYPE_LAN]) + return TRUE; + + /* Find the collection ID for @remote_name, or bail if there is none. */ + if (!ostree_repo_get_remote_option (flatpak_dir_get_repo (dir), + remote_name, "collection-id", + NULL, &collection_id, error)) + return FALSE; + if (collection_id == NULL || *collection_id == '\0') + return TRUE; + + context = flatpak_main_context_new_default (); + + appstream_ref = g_strdup_printf ("appstream/%s", flatpak_get_arch ()); + ref.collection_id = collection_id; + ref.ref_name = appstream_ref; + refs[0] = &ref; + appstream2_ref = g_strdup_printf ("appstream2/%s", flatpak_get_arch ()); + ref2.collection_id = collection_id; + ref2.ref_name = appstream2_ref; + refs[1] = &ref2; + + if (types_filter[FLATPAK_REMOTE_TYPE_USB]) + { + finder_mount = OSTREE_REPO_FINDER (ostree_repo_finder_mount_new (NULL)); + finders[finder_index++] = finder_mount; + } + + if (types_filter[FLATPAK_REMOTE_TYPE_LAN]) + { + g_autoptr(GError) local_error = NULL; + finder_avahi = OSTREE_REPO_FINDER (ostree_repo_finder_avahi_new (context)); + finders[finder_index++] = finder_avahi; + + /* The Avahi finder may fail to start on, for example, a CI server. */ + ostree_repo_finder_avahi_start (OSTREE_REPO_FINDER_AVAHI (finder_avahi), &local_error); + if (local_error != NULL) + { + if (finder_index == 1) + return TRUE; + else + { + finders[--finder_index] = NULL; + g_clear_object (&finder_avahi); + } + } + } + + ostree_repo_find_remotes_async (flatpak_dir_get_repo (dir), + (const OstreeCollectionRef * const *) refs, + NULL, /* no options */ + finders, + NULL, /* no progress */ + cancellable, + async_result_cb, + &result); + + while (result == NULL) + g_main_context_iteration (context, TRUE); + + results = ostree_repo_find_remotes_finish (flatpak_dir_get_repo (dir), result, error); + + if (types_filter[FLATPAK_REMOTE_TYPE_LAN]) + ostree_repo_finder_avahi_stop (OSTREE_REPO_FINDER_AVAHI (finder_avahi)); + + for (i = 0; results != NULL && results[i] != NULL; i++) + { + g_ptr_array_add (remotes, + flatpak_remote_new_from_ostree (results[i]->remote, + results[i]->finder, + dir)); + } + + return TRUE; +} + +/** + * flatpak_installation_list_remotes_by_type: + * @self: a #FlatpakInstallation + * @types: (array length=num_types): an array of #FlatpakRemoteType + * @num_types: the number of types provided in @types + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists only the remotes whose type is included in the @types argument. + * + * Returns: (transfer container) (element-type FlatpakRemote): a GPtrArray of + * #FlatpakRemote instances + */ +GPtrArray * +flatpak_installation_list_remotes_by_type (FlatpakInstallation *self, + const FlatpakRemoteType *types, + gsize num_types, + GCancellable *cancellable, + GError **error) +{ + 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); + const guint NUM_FLATPAK_REMOTE_TYPES = 3; + gboolean types_filter[NUM_FLATPAK_REMOTE_TYPES]; + gsize i; + + remote_names = flatpak_dir_list_remotes (dir, cancellable, error); + if (remote_names == NULL) + return 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_maybe_ensure_repo (dir_clone, cancellable, error)) + return NULL; + + for (i = 0; i < NUM_FLATPAK_REMOTE_TYPES; ++i) + { + /* If NULL or an empty array of types is passed then we include all types */ + types_filter[i] = (num_types == 0) ? TRUE : FALSE; + } + + for (i = 0; i < num_types; ++i) + { + g_return_val_if_fail (types[i] < NUM_FLATPAK_REMOTE_TYPES, NULL); + types_filter[types[i]] = TRUE; + } + + for (i = 0; remote_names[i] != NULL; ++i) + { + g_autoptr(GError) local_error = NULL; + if (types_filter[FLATPAK_REMOTE_TYPE_STATIC]) + g_ptr_array_add (remotes, flatpak_remote_new_with_dir (remote_names[i], + dir_clone)); + + /* Add the dynamic mirrors of this remote. */ + if (!list_remotes_for_configured_remote (self, remote_names[i], dir_clone, + types_filter, remotes, + cancellable, &local_error)) + g_debug ("Couldn't find remotes for configured remote %s: %s", + remote_names[i], local_error->message); + } + + return g_steal_pointer (&remotes); +} + +/** + * flatpak_installation_list_remotes: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists the static remotes, in priority (highest first) order. For same + * priority, an earlier added remote comes before a later added one. + * + * Returns: (transfer container) (element-type FlatpakRemote): an GPtrArray of + * #FlatpakRemote instances + */ +GPtrArray * +flatpak_installation_list_remotes (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + const FlatpakRemoteType types[] = { FLATPAK_REMOTE_TYPE_STATIC }; + + return flatpak_installation_list_remotes_by_type (self, types, 1, cancellable, error); +} + +/** + * flatpak_installation_modify_remote: + * @self: a #FlatpakInstallation + * @remote: the modified #FlatpakRemote + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Saves changes in the @remote object. + * + * Returns: %TRUE if the modifications have been committed successfully + */ +gboolean +flatpak_installation_modify_remote (FlatpakInstallation *self, + FlatpakRemote *remote, + GCancellable *cancellable, + GError **error) +{ + 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_maybe_ensure_repo (dir_clone, cancellable, error)) + return FALSE; + + if (!flatpak_remote_commit (remote, dir_clone, cancellable, error)) + return FALSE; + + /* Make sure we pick up the new config */ + flatpak_installation_drop_caches (self, NULL, NULL); + + return TRUE; +} + +/** + * flatpak_installation_remove_remote: + * @self: a #FlatpakInstallation + * @name: the name of the remote to remove + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Removes the remote with the given name from the installation. + * + * Returns: %TRUE if the remote has been removed successfully + */ +gboolean +flatpak_installation_remove_remote (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error) +{ + 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); + if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) + return FALSE; + + if (!flatpak_dir_remove_remote (dir, FALSE, name, + cancellable, error)) + return FALSE; + + /* Make sure we pick up the new config */ + flatpak_installation_drop_caches (self, NULL, NULL); + + return TRUE; +} + +/** + * flatpak_installation_set_config_sync: + * @self: a #FlatpakInstallation + * @key: the name of the key to set + * @value: the new value, or %NULL to unset + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Set a global configuration option for the installation, currently + * the only supported key is "languages", which is a comman-separated + * list of langue codes like "sv;en;pl", or "" to mean all languages. + * + * Returns: %TRUE if the option was set correctly + */ +gboolean +flatpak_installation_set_config_sync (FlatpakInstallation *self, + const char *key, + const char *value, + GCancellable *cancellable, + GError **error) +{ + 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); + if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) + return FALSE; + + if (!flatpak_dir_set_config (dir, key, value, error)) + return FALSE; + + /* Make sure we pick up the new config */ + flatpak_installation_drop_caches (self, NULL, NULL); + + return TRUE; +} + +/** + * flatpak_installation_get_config: + * @self: a #FlatpakInstallation + * @key: the name of the key to get + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Get a global configuration option for the installation, see + * flatpak_installation_set_config_sync() for supported keys. + * + * Returns: The (newly allocated) value, or %NULL on error (%G_KEY_FILE_ERROR_KEY_NOT_FOUND error if key is not set) + */ +char * +flatpak_installation_get_config (FlatpakInstallation *self, + const char *key, + GCancellable *cancellable, + GError **error) +{ + 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); +} + +/** + * flatpak_installation_update_remote_sync: + * @self: a #FlatpakInstallation + * @name: the name of the remote to update + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Updates the local configuration of a remote repository by fetching + * the related information from the summary file in the remote OSTree + * repository and committing the changes to the local installation. + * + * Returns: %TRUE if the remote has been updated successfully + * + * Since: 0.6.13 + */ +gboolean +flatpak_installation_update_remote_sync (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error) +{ + 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); + if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) + return FALSE; + + if (!flatpak_dir_update_remote_configuration (dir, name, cancellable, error)) + return FALSE; + + /* Make sure we pick up the new config */ + flatpak_installation_drop_caches (self, NULL, NULL); + + return TRUE; +} + +/** + * flatpak_installation_get_remote_by_name: + * @self: a #FlatpakInstallation + * @name: a remote name + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Looks up a remote by name. + * + * Returns: (transfer full): a #FlatpakRemote instances, or %NULL error + */ +FlatpakRemote * +flatpak_installation_get_remote_by_name (FlatpakInstallation *self, + const gchar *name, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + g_autoptr(FlatpakDir) dir_clone = NULL; + + if (!flatpak_dir_has_remote (dir, name, error)) + return 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)) + return NULL; + + return flatpak_remote_new_with_dir (name, dir_clone); +} + +/** + * flatpak_installation_load_app_overrides: + * @self: a #FlatpakInstallation + * @app_id: an application id + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Loads the metadata overrides file for an application. + * + * Returns: (transfer full): the contents of the overrides files, + * or %NULL if an error occurred + */ +char * +flatpak_installation_load_app_overrides (FlatpakInstallation *self, + const char *app_id, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + char *metadata_contents; + 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; + + return metadata_contents; +} + +/** + * flatpak_installation_install_bundle: + * @self: a #FlatpakInstallation + * @file: a #GFile that is an flatpak bundle + * @progress: (scope call) (nullable): progress callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Install an application or runtime from an flatpak bundle file. + * See flatpak-build-bundle(1) for how to create bundles. + * + * Returns: (transfer full): The ref for the newly installed app or %NULL on failure + */ +FlatpakInstalledRef * +flatpak_installation_install_bundle (FlatpakInstallation *self, + GFile *file, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + 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, NULL, cancellable, error); + if (remote == NULL) + return NULL; + + /* Make sure we pick up the new config */ + flatpak_installation_drop_caches (self, NULL, NULL); + + /* 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)) + return NULL; + + if (!flatpak_dir_install_bundle (dir_clone, file, remote, NULL, + cancellable, error)) + return NULL; + + if (g_str_has_prefix (ref, "app")) + flatpak_dir_run_triggers (dir_clone, cancellable, NULL); + + result = get_ref (dir, ref, cancellable, error); + if (result == NULL) + return NULL; + + return result; +} + +/** + * flatpak_installation_install_ref_file: + * @self: a #FlatpakInstallation + * @ref_file_data: The ref file contents + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a remote based on the passed in .flatpakref file contents + * in @ref_file_data and returns the #FlatpakRemoteRef that can be used + * to install it. + * + * Note, the #FlatpakRemoteRef will not have the commit field set, or other details, to + * avoid unnecessary roundtrips. If you need that you have to resolve it + * explicitly with flatpak_installation_fetch_remote_ref_sync (). + * + * Returns: (transfer full): a #FlatpakRemoteRef if the remote has been added successfully, %NULL + * on error. + * + * Since: 0.6.10 + */ +FlatpakRemoteRef * +flatpak_installation_install_ref_file (FlatpakInstallation *self, + GBytes *ref_file_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autofree char *remote = NULL; + g_autofree char *ref = NULL; + g_autofree char *collection_id = NULL; + g_autoptr(FlatpakCollectionRef) coll_ref = NULL; + g_autoptr(GKeyFile) keyfile = g_key_file_new (); + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + if (!g_key_file_load_from_data (keyfile, g_bytes_get_data (ref_file_data, NULL), + g_bytes_get_size (ref_file_data), + 0, error)) + return FALSE; + + + if (!flatpak_dir_create_remote_for_ref_file (dir, keyfile, NULL, &remote, &collection_id, &ref, error)) + return NULL; + + if (!flatpak_installation_drop_caches (self, cancellable, error)) + return NULL; + + coll_ref = flatpak_collection_ref_new (collection_id, ref); + return flatpak_remote_ref_new (coll_ref, NULL, remote, NULL); +} + +/** + * flatpak_installation_install_full: + * @self: a #FlatpakInstallation + * @flags: set of #FlatpakInstallFlags flag + * @remote_name: name of the remote to use + * @kind: what this ref contains (an #FlatpakRefKind) + * @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) (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 + * @error: return location for a #GError + * + * Install a new application or runtime. + * + * Note that this function was originally written to always return a + * #FlatpakInstalledRef. Since 0.9.13, passing + * FLATPAK_INSTALL_FLAGS_NO_DEPLOY will only pull refs into the local flatpak + * repository without deploying them, however this function will + * be unable to provide information on the installed ref, so + * FLATPAK_ERROR_ONLY_PULLED will be set and the caller must respond + * accordingly. + * + * Returns: (transfer full): The ref for the newly installed app or %NULL on failure + */ +FlatpakInstalledRef * +flatpak_installation_install_full (FlatpakInstallation *self, + FlatpakInstallFlags flags, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + const char * const *subpaths, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autofree char *ref = NULL; + g_autoptr(FlatpakDir) dir_clone = NULL; + g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; + FlatpakInstalledRef *result = NULL; + g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(GMainContextPopDefault) main_context = 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; + + deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, cancellable); + if (deploy_dir != NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_ALREADY_INSTALLED, + _("%s branch %s already installed"), name, branch ? branch : "master"); + return NULL; + } + + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return NULL; + + /* 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)) + return NULL; + + /* Work around ostree-pull spinning the default main context for the sync calls */ + main_context = flatpak_main_context_new_default (); + + if (progress) + ostree_progress = flatpak_progress_new (progress, progress_data); + else + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + + if (!flatpak_dir_install (dir_clone, + (flags & FLATPAK_INSTALL_FLAGS_NO_PULL) != 0, + (flags & FLATPAK_INSTALL_FLAGS_NO_DEPLOY) != 0, + (flags & FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS) != 0, + FALSE, state, + ref, NULL, (const char **) subpaths, + ostree_progress, cancellable, error)) + goto out; + + if (!(flags & FLATPAK_INSTALL_FLAGS_NO_TRIGGERS) && + g_str_has_prefix (ref, "app")) + flatpak_dir_run_triggers (dir_clone, cancellable, NULL); + + /* Note that if the caller sets FLATPAK_INSTALL_FLAGS_NO_DEPLOY we must + * always return an error, as explained above. Otherwise get_ref will + * always return an error. */ + if ((flags & FLATPAK_INSTALL_FLAGS_NO_DEPLOY) != 0) + { + flatpak_fail_error (error, FLATPAK_ERROR_ONLY_PULLED, + _("As requested, %s was only pulled, but not installed"), name); + goto out; + } + + result = get_ref (dir, ref, cancellable, error); + if (result == NULL) + goto out; + +out: + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); + + return result; +} + +/** + * flatpak_installation_install: + * @self: a #FlatpakInstallation + * @remote_name: name of the remote to use + * @kind: what this ref contains (an #FlatpakRefKind) + * @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') + * @progress: (scope call) (nullable): progress callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Install a new application or runtime. + * + * Note that this function was originally written to always return a + * #FlatpakInstalledRef. Since 0.9.13, passing + * FLATPAK_INSTALL_FLAGS_NO_DEPLOY will only pull refs into the local flatpak + * repository without deploying them, however this function will + * be unable to provide information on the installed ref, so + * FLATPAK_ERROR_ONLY_PULLED will be set and the caller must respond + * accordingly. + * + * Returns: (transfer full): The ref for the newly installed app or %NULL on failure + */ +FlatpakInstalledRef * +flatpak_installation_install (FlatpakInstallation *self, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_install_full (self, FLATPAK_INSTALL_FLAGS_NONE, + remote_name, kind, name, arch, branch, + NULL, progress, progress_data, + cancellable, error); +} + +/** + * flatpak_installation_update_full: + * @self: a #FlatpakInstallation + * @flags: set of #FlatpakUpdateFlags flag + * @kind: whether this is an app or runtime + * @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) (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 + * @error: return location for a #GError + * + * Update an application or runtime. + * + * 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, + FlatpakUpdateFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + const char * const *subpaths, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autofree char *ref = NULL; + g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(FlatpakDir) dir_clone = NULL; + g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; + g_autofree char *remote_name = NULL; + FlatpakInstalledRef *result = NULL; + g_autofree char *target_commit = NULL; + g_auto(OstreeRepoFinderResultv) check_results = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(GMainContextPopDefault) main_context = 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; + + deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, cancellable); + if (deploy_dir == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, + _("%s branch %s is not installed"), name, branch ? branch : "master"); + return NULL; + } + + remote_name = flatpak_dir_get_origin (dir, ref, cancellable, error); + if (remote_name == NULL) + return NULL; + + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return NULL; + + target_commit = flatpak_dir_check_for_update (dir, state, ref, NULL, + (const char **) subpaths, + (flags & FLATPAK_UPDATE_FLAGS_NO_PULL) != 0, + &check_results, + cancellable, error); + if (target_commit == NULL) + return NULL; + + /* 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)) + return NULL; + + /* Work around ostree-pull spinning the default main context for the sync calls */ + main_context = flatpak_main_context_new_default (); + + if (progress) + ostree_progress = flatpak_progress_new (progress, progress_data); + else + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + + if (!flatpak_dir_update (dir_clone, + (flags & FLATPAK_UPDATE_FLAGS_NO_PULL) != 0, + (flags & FLATPAK_UPDATE_FLAGS_NO_DEPLOY) != 0, + (flags & FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS) != 0, + FALSE, state, + ref, target_commit, + (const OstreeRepoFinderResult * const *) check_results, + (const char **) subpaths, + ostree_progress, cancellable, error)) + goto out; + + if (!(flags & FLATPAK_UPDATE_FLAGS_NO_TRIGGERS) && + g_str_has_prefix (ref, "app")) + flatpak_dir_run_triggers (dir_clone, cancellable, NULL); + + result = get_ref (dir, ref, cancellable, error); + if (result == NULL) + goto out; + + /* We don't get prunable objects if not pulling or if NO_PRUNE is passed */ + if (!(flags & FLATPAK_UPDATE_FLAGS_NO_PULL) && !(flags & FLATPAK_UPDATE_FLAGS_NO_PRUNE)) + flatpak_dir_prune (dir_clone, cancellable, NULL); + +out: + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); + + return result; +} + +/** + * flatpak_installation_update: + * @self: a #FlatpakInstallation + * @flags: set of #FlatpakUpdateFlags flag + * @kind: whether this is an app or runtime + * @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) + * @progress: (scope call) (nullable): the callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Update an application or runtime. + * + * 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, + FlatpakUpdateFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_update_full (self, flags, kind, name, arch, + branch, NULL, progress, progress_data, + cancellable, error); +} + +/** + * flatpak_installation_uninstall: + * @self: a #FlatpakInstallation + * @kind: what this ref contains (an #FlatpakRefKind) + * @name: name of the app or runtime to uninstall + * @arch: (nullable): architecture of the app or runtime to uninstall; if + * %NULL, flatpak_get_default_arch() is assumed + * @branch: (nullable): name of the branch of the app or runtime to uninstall; + * if %NULL, `master` is assumed + * @progress: (scope call) (nullable): the callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Uninstall an application or runtime. + * + * Returns: %TRUE on success + */ +FLATPAK_EXTERN gboolean +flatpak_installation_uninstall (FlatpakInstallation *self, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_uninstall_full (self, FLATPAK_UNINSTALL_FLAGS_NONE, + kind, name, arch, branch, + progress, progress_data, + cancellable, error); +} + +/** + * flatpak_installation_uninstall_full: + * @self: a #FlatpakInstallation + * @flags: set of #FlatpakUninstallFlags flags + * @kind: what this ref contains (an #FlatpakRefKind) + * @name: name of the app or runtime to uninstall + * @arch: (nullable): architecture of the app or runtime to uninstall; if + * %NULL, flatpak_get_default_arch() is assumed + * @branch: (nullable): name of the branch of the app or runtime to uninstall; + * if %NULL, `master` is assumed + * @progress: (scope call) (nullable): the callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Uninstall an application or runtime. + * + * Returns: %TRUE on success + * + * Since: 0.11.8 + */ +gboolean +flatpak_installation_uninstall_full (FlatpakInstallation *self, + FlatpakUninstallFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error) +{ + 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; + + /* 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)) + return FALSE; + + if (!flatpak_dir_uninstall (dir_clone, ref, FLATPAK_HELPER_UNINSTALL_FLAGS_NONE, + cancellable, error)) + return FALSE; + + if (!(flags & FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS) && + g_str_has_prefix (ref, "app")) + flatpak_dir_run_triggers (dir_clone, cancellable, NULL); + + if (!(flags & FLATPAK_UNINSTALL_FLAGS_NO_PRUNE)) + flatpak_dir_prune (dir_clone, cancellable, NULL); + + return TRUE; +} + +/** + * flatpak_installation_fetch_remote_size_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @ref: the ref + * @download_size: (out): return location for the (maximum) download size + * @installed_size: (out): return location for the installed size + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Gets information about the maximum amount of data that needs to be transferred + * to pull the ref from a remote repository, and about the amount of + * local disk space that is required to check out this commit. + * + * Note that if there are locally available data that are in the ref, which is common + * for instance if you're doing an update then the real download size may be smaller + * than what is returned here. + * + * NOTE: Since 0.11.4 this information is accessible in FlatpakRemoteRef, so this + * function is not very useful anymore. + * + * Returns: %TRUE, unless an error occurred + */ +gboolean +flatpak_installation_fetch_remote_size_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRef *ref, + guint64 *download_size, + guint64 *installed_size, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autofree char *full_ref = flatpak_ref_format_ref (ref); + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return FALSE; + + return flatpak_remote_state_lookup_cache (state, full_ref, + download_size, installed_size, NULL, + error); +} + +/** + * flatpak_installation_fetch_remote_metadata_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @ref: the ref + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Obtains the metadata file from a commit. + * + * NOTE: Since 0.11.4 this information is accessible in FlatpakRemoteRef, so this + * function is not very useful anymore. + * + * Returns: (transfer full): a #GBytes containing the flatpak metadata file, + * or %NULL if an error occurred + */ +GBytes * +flatpak_installation_fetch_remote_metadata_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRef *ref, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autofree char *full_ref = flatpak_ref_format_ref (ref); + const char *res = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return FALSE; + + if (!flatpak_remote_state_lookup_cache (state, full_ref, + NULL, NULL, &res, + error)) + return NULL; + + return g_bytes_new (res, strlen (res)); +} + +/** + * flatpak_installation_list_remote_refs_sync: + * @self: a #FlatpakInstallation + * @remote_or_uri: the name or URI of the remote + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists all the applications and runtimes in a remote. + * + * Returns: (transfer container) (element-type FlatpakRemoteRef): a GPtrArray of + * #FlatpakRemoteRef instances + */ +GPtrArray * +flatpak_installation_list_remote_refs_sync (FlatpakInstallation *self, + const char *remote_or_uri, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(GHashTable) ht = NULL; + GHashTableIter iter; + gpointer key; + gpointer value; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + state = flatpak_dir_get_remote_state (dir, remote_or_uri, cancellable, error); + if (state == NULL) + return NULL; + + if (!flatpak_dir_list_remote_refs (dir, state, &ht, + cancellable, error)) + return NULL; + + g_hash_table_iter_init (&iter, ht); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakRemoteRef *ref; + FlatpakCollectionRef *coll_ref = key; + const gchar *ref_commit = value; + + ref = flatpak_remote_ref_new (coll_ref, ref_commit, remote_or_uri, state); + + if (ref) + g_ptr_array_add (refs, ref); + } + + return g_steal_pointer (&refs); +} + +/** + * flatpak_installation_fetch_remote_ref_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @kind: what this ref contains (an #FlatpakRefKind) + * @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') + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Gets the current remote branch of a ref in the remote. + * + * Returns: (transfer full): a #FlatpakRemoteRef instance, or %NULL + */ +FlatpakRemoteRef * +flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GHashTable) ht = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autofree char *ref = NULL; + g_autoptr(FlatpakCollectionRef) coll_ref = NULL; + g_autofree gchar *collection_id = NULL; + const char *checksum; + + if (branch == NULL) + branch = "master"; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + state = flatpak_dir_get_remote_state (dir, remote_name, cancellable, error); + if (state == NULL) + return NULL; + + if (!flatpak_dir_list_remote_refs (dir, state, &ht, + cancellable, error)) + return NULL; + + /* FIXME: Rework to accept the collection ID as an input argument instead */ + if (!ostree_repo_get_remote_option (flatpak_dir_get_repo (dir), + remote_name, "collection-id", + NULL, &collection_id, error)) + return FALSE; + + if (kind == FLATPAK_REF_KIND_APP) + ref = flatpak_build_app_ref (name, + branch, + arch); + else + ref = flatpak_build_runtime_ref (name, + branch, + arch); + + coll_ref = flatpak_collection_ref_new (collection_id, ref); + checksum = g_hash_table_lookup (ht, coll_ref); + + /* If there was not a match, it may be because the collection ID is + * not set in the local configuration, or it is wrong, so we resort to + * trying to match just the ref name */ + if (checksum == NULL) + { + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, ht); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + FlatpakCollectionRef *current = (FlatpakCollectionRef *) key; + if (g_strcmp0 (current->ref_name, ref) == 0) + { + checksum = (const gchar *) value; + break; + } + } + } + + if (checksum != NULL) + return flatpak_remote_ref_new (coll_ref, checksum, remote_name, state); + + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Reference %s doesn't exist in remote", ref); + return NULL; +} + +/** + * flatpak_installation_update_appstream_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @arch: Architecture to update, or %NULL for the local machine arch + * @out_changed: (nullable): Set to %TRUE if the contents of the appstream changed, %FALSE if nothing changed + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Updates the local copy of appstream for @remote_name for the specified @arch. + * If you need progress feedback, use flatpak_installation_update_appstream_full_sync(). + * + * Returns: %TRUE on success, or %FALSE on error + */ +gboolean +flatpak_installation_update_appstream_sync (FlatpakInstallation *self, + const char *remote_name, + const char *arch, + gboolean *out_changed, + GCancellable *cancellable, + GError **error) +{ + return flatpak_installation_update_appstream_full_sync (self, remote_name, arch, + NULL, NULL, out_changed, + cancellable, error); + +} + +/** + * flatpak_installation_update_appstream_full_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @arch: Architecture to update, or %NULL for the local machine arch + * @progress: (scope call) (nullable): progress callback + * @progress_data: (closure progress) (nullable): user data passed to @progress + * @out_changed: (nullable): Set to %TRUE if the contents of the appstream changed, %FALSE if nothing changed + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Updates the local copy of appstream for @remote_name for the specified @arch. + * + * Returns: %TRUE on success, or %FALSE on error + */ +gboolean +flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self, + const char *remote_name, + const char *arch, + FlatpakProgressCallback progress, + gpointer progress_data, + gboolean *out_changed, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(FlatpakDir) dir_clone = NULL; + g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; + gboolean res; + g_autoptr(GMainContextPopDefault) main_context = NULL; + + 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)) + return FALSE; + + /* Work around ostree-pull spinning the default main context for the sync calls */ + main_context = flatpak_main_context_new_default (); + + if (progress) + ostree_progress = flatpak_progress_new (progress, progress_data); + else + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + + res = flatpak_dir_update_appstream (dir_clone, + remote_name, + arch, + out_changed, + ostree_progress, + cancellable, + error); + + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); + + return res; +} + + +/** + * flatpak_installation_create_monitor: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Gets monitor object for the installation. The returned file monitor will + * emit the #GFileMonitor::changed signal whenever an application or runtime + * was installed, uninstalled or updated. + * + * Returns: (transfer full): a new #GFileMonitor instance, or %NULL on error + */ +GFileMonitor * +flatpak_installation_create_monitor (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); + g_autoptr(GFile) path = NULL; + + path = flatpak_dir_get_changed_path (dir); + + return g_file_monitor_file (path, G_FILE_MONITOR_NONE, + cancellable, error); +} + + +/** + * flatpak_installation_list_remote_related_refs_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @ref: the ref + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists all the available refs on @remote_name that are related to + * @ref, and the subpaths to use. These are things that are + * interesting to install, update, or uninstall together with + * @ref. For instance, locale data or debug information. + * + * The returned list contains all available related refs, but not + * everyone should always be installed. For example, + * flatpak_related_ref_should_download () returns TRUE if the + * reference should be installed/updated with the app, and + * flatpak_related_ref_should_delete () returns TRUE if it + * should be uninstalled with the main ref. + * + * The commit property of each FlatpakRelatedRef is not guaranteed to be + * non-%NULL. + * + * Returns: (transfer container) (element-type FlatpakRelatedRef): a GPtrArray of + * #FlatpakRelatedRef instances + * + * Since: 0.6.7 + */ +GPtrArray * +flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + g_autoptr(GPtrArray) related = NULL; + g_autoptr(GPtrArray) refs = g_ptr_array_new_with_free_func (g_object_unref); + g_autoptr(FlatpakRemoteState) state = NULL; + int i; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return NULL; + + state = flatpak_dir_get_remote_state_optional (dir, remote_name, cancellable, error); + if (state == NULL) + return NULL; + + related = flatpak_dir_find_remote_related (dir, state, ref, + cancellable, error); + if (related == NULL) + return NULL; + + for (i = 0; i < related->len; i++) + { + FlatpakRelated *rel = g_ptr_array_index (related, i); + FlatpakRelatedRef *ref; + + ref = flatpak_related_ref_new (rel->collection_id, rel->ref, rel->commit, + rel->subpaths, rel->download, rel->delete); + + if (ref) + g_ptr_array_add (refs, ref); + } + + return g_steal_pointer (&refs); +} + +/** + * flatpak_installation_list_installed_related_refs_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @ref: the ref + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Lists all the locally installed refs from @remote_name that are + * related to @ref. These are things that are interesting to install, + * update, or uninstall together with @ref. For instance, locale data + * or debug information. + * + * This function is similar to flatpak_installation_list_remote_related_refs_sync, + * but instead of looking at what is available on the remote, it only looks + * at the locally installed refs. This is useful for instance when you're + * looking for related refs to uninstall, or when you're planning to use + * FLATPAK_UPDATE_FLAGS_NO_PULL to install previously pulled refs. + * + * Returns: (transfer container) (element-type FlatpakRelatedRef): a GPtrArray of + * #FlatpakRelatedRef instances + * + * Since: 0.6.7 + */ +GPtrArray * +flatpak_installation_list_installed_related_refs_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error) +{ + 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, TRUE, + cancellable, error); + if (related == NULL) + return NULL; + + for (i = 0; i < related->len; i++) + { + FlatpakRelated *rel = g_ptr_array_index (related, i); + FlatpakRelatedRef *ref; + + ref = flatpak_related_ref_new (rel->collection_id, rel->ref, rel->commit, + rel->subpaths, rel->download, rel->delete); + + if (ref) + g_ptr_array_add (refs, ref); + } + + return g_steal_pointer (&refs); +} + +/** + * flatpak_installation_remove_local_ref_sync: + * @self: a #FlatpakInstallation + * @remote_name: the name of the remote + * @ref: the ref + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Remove the OSTree ref given by @remote_name:@ref from the local flatpak + * repository. The next time the underlying OSTree repo is pruned, objects + * which were attached to that ref will be removed. This is useful if you + * pulled a flatpak ref using flatpak_installation_install_full() and + * specified %FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to + * deploy the ref later on and want to remove the local ref to prevent it + * from taking up disk space. Note that this will not remove the objects + * referred to by @ref from the underlying OSTree repo, you should use + * flatpak_installation_prune_local_repo() to do that. + * + * Since: 0.10.0 + * Returns: %TRUE on success + */ +gboolean +flatpak_installation_remove_local_ref_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error) +{ + 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); +} + +/** + * flatpak_installation_cleanup_local_refs_sync: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Remove all OSTree refs from the local flatpak repository which are not + * in a deployed state. The next time the underlying OSTree repo is pruned, + * objects which were attached to that ref will be removed. This is useful if + * you pulled a flatpak refs using flatpak_installation_install_full() and + * specified %FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to + * deploy the refs later on and want to remove the local refs to prevent them + * from taking up disk space. Note that this will not remove the objects + * referred to by @ref from the underlying OSTree repo, you should use + * flatpak_installation_prune_local_repo() to do that. + * + * Since: 0.10.0 + * Returns: %TRUE on success + */ +gboolean +flatpak_installation_cleanup_local_refs_sync (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + 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); +} + +/** + * flatpak_installation_prune_local_repo: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Remove all orphaned OSTree objects from the underlying OSTree repo in + * @self. + * + * Since: 0.10.0 + * Returns: %TRUE on success + */ +gboolean +flatpak_installation_prune_local_repo (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + + return flatpak_dir_prune (dir, cancellable, error); +} + +/** + * flatpak_installation_run_triggers: + * @self: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Run the trigger commands to update the files exported by the apps in + * @self. Should be used after one or more app install, upgrade or + * uninstall operations with the %FLATPAK_INSTALL_FLAGS_NO_TRIGGERS, + * %FLATPAK_UPDATE_FLAGS_NO_TRIGGERS or %FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS + * flags set. + * + * Since: 1.0.3 + * Returns: %TRUE on success + */ +gboolean +flatpak_installation_run_triggers (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakDir) dir = NULL; + + dir = flatpak_installation_get_dir (self, error); + if (dir == NULL) + return FALSE; + + return flatpak_dir_run_triggers (dir, cancellable, error); +} diff -Nru flatpak-0.11.3/common/flatpak-installation.h flatpak-1.0.7/common/flatpak-installation.h --- flatpak-0.11.3/common/flatpak-installation.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installation.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,388 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_INSTALLATION_H__ +#define __FLATPAK_INSTALLATION_H__ + +typedef struct _FlatpakInstallation FlatpakInstallation; + +#include +#include +#include + +#define FLATPAK_TYPE_INSTALLATION flatpak_installation_get_type () +#define FLATPAK_INSTALLATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_INSTALLATION, FlatpakInstallation)) +#define FLATPAK_IS_INSTALLATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_INSTALLATION)) + +FLATPAK_EXTERN GType flatpak_installation_get_type (void); + +struct _FlatpakInstallation +{ + GObject parent; +}; + +typedef struct +{ + GObjectClass parent_class; +} FlatpakInstallationClass; + +/** + * FlatpakUpdateFlags: + * @FLATPAK_UPDATE_FLAGS_NONE: Fetch remote builds and install the latest one (default) + * @FLATPAK_UPDATE_FLAGS_NO_DEPLOY: Don't install any new builds that might be fetched + * @FLATPAK_UPDATE_FLAGS_NO_PULL: Don't try to fetch new builds from the remote repo + * @FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS: Don't use static deltas when pulling + * @FLATPAK_UPDATE_FLAGS_NO_PRUNE: Don't prune the local OSTree repository after updating (Since: 0.11.8) + * @FLATPAK_UPDATE_FLAGS_NO_TRIGGERS: Don't call triggers after updating. If used, + * the caller must later call flatpak_installation_run_triggers() to update + * the exported files. (Since: 1.0.3) + * + * Flags to alter the behavior of flatpak_installation_update(). + */ +typedef enum { + FLATPAK_UPDATE_FLAGS_NONE = 0, + FLATPAK_UPDATE_FLAGS_NO_DEPLOY = (1 << 0), + FLATPAK_UPDATE_FLAGS_NO_PULL = (1 << 1), + FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS = (1 << 2), + FLATPAK_UPDATE_FLAGS_NO_PRUNE = (1 << 3), + FLATPAK_UPDATE_FLAGS_NO_TRIGGERS = (1 << 4), +} FlatpakUpdateFlags; + +/** + * FlatpakInstallFlags: + * @FLATPAK_INSTALL_FLAGS_NONE: Default + * @FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS: Don't use static deltas when pulling + * @FLATPAK_INSTALL_FLAGS_NO_DEPLOY: Don't install any new builds that might be fetched + * @FLATPAK_INSTALL_FLAGS_NO_PULL: Don't try to fetch new builds from the remote repo + * @FLATPAK_INSTALL_FLAGS_NO_TRIGGERS: Don't call triggers after installing. If used, + * the caller must later call flatpak_installation_run_triggers() to update + * the exported files. (Since: 1.0.3) + * + * Flags to alter the behavior of flatpak_installation_install_full(). + */ +typedef enum { + FLATPAK_INSTALL_FLAGS_NONE = 0, + FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS = (1 << 0), + FLATPAK_INSTALL_FLAGS_NO_DEPLOY = (1 << 2), + FLATPAK_INSTALL_FLAGS_NO_PULL = (1 << 3), + FLATPAK_INSTALL_FLAGS_NO_TRIGGERS = (1 << 4), +} FlatpakInstallFlags; + +/** + * FlatpakUninstallFlags: + * @FLATPAK_UNINSTALL_FLAGS_NONE: Default + * @FLATPAK_UNINSTALL_FLAGS_NO_PRUNE: Don't prune the local OSTree repository after uninstalling + * @FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS: Don't call triggers after uninstalling. If used, + * the caller must later call flatpak_installation_run_triggers() to update + * the exported file. (Since: 1.0.3) + * + * Flags to alter the behavior of flatpak_installation_uninstall_full(). + * + * Since: 0.11.8 + */ +typedef enum { + FLATPAK_UNINSTALL_FLAGS_NONE = 0, + FLATPAK_UNINSTALL_FLAGS_NO_PRUNE = (1 << 0), + FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS = (1 << 1), +} FlatpakUninstallFlags; + +/** + * FlatpakStorageType: + * @FLATPAK_STORAGE_TYPE_DEFAULT: default + * @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(). + * + * Since: 0.6.15 + */ +typedef enum { + FLATPAK_STORAGE_TYPE_DEFAULT = 0, + FLATPAK_STORAGE_TYPE_HARD_DISK, + FLATPAK_STORAGE_TYPE_SDCARD, + FLATPAK_STORAGE_TYPE_MMC, + FLATPAK_STORAGE_TYPE_NETWORK, +} FlatpakStorageType; + + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakInstallation, g_object_unref) +#endif + +FLATPAK_EXTERN const char *flatpak_get_default_arch (void); + +FLATPAK_EXTERN const char *const *flatpak_get_supported_arches (void); + +FLATPAK_EXTERN GPtrArray *flatpak_get_system_installations (GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_system (GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_system_with_id (const char *id, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_user (GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_for_path (GFile *path, + gboolean user, + GCancellable *cancellable, + GError **error); + +/** + * FlatpakProgressCallback: + * @status: A status string, suitable for display + * @progress: percentage of completion + * @estimating: whether @progress is just an estimate + * @user_data: User data passed to the caller + * + * The progress callback is called repeatedly during long-running operations + * such as installations or updates, and can be used to update progress information + * in a user interface. + * + * The callback occurs in the thread-default context of the caller. + */ +typedef void (*FlatpakProgressCallback)(const char *status, + guint progress, + gboolean estimating, + gpointer user_data); + +FLATPAK_EXTERN gboolean flatpak_installation_drop_caches (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_get_is_user (FlatpakInstallation *self); +FLATPAK_EXTERN GFile *flatpak_installation_get_path (FlatpakInstallation *self); +FLATPAK_EXTERN const char *flatpak_installation_get_id (FlatpakInstallation *self); +FLATPAK_EXTERN const char *flatpak_installation_get_display_name (FlatpakInstallation *self); +FLATPAK_EXTERN gint flatpak_installation_get_priority (FlatpakInstallation *self); +FLATPAK_EXTERN FlatpakStorageType flatpak_installation_get_storage_type (FlatpakInstallation *self); +FLATPAK_EXTERN gboolean flatpak_installation_launch (FlatpakInstallation *self, + const char *name, + const char *arch, + const char *branch, + const char *commit, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GFileMonitor *flatpak_installation_create_monitor (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs_by_kind (FlatpakInstallation *self, + FlatpakRefKind kind, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs_for_update (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_get_installed_ref (FlatpakInstallation *self, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_get_current_installed_app (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error); + +FLATPAK_EXTERN GPtrArray *flatpak_installation_list_remotes (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray *flatpak_installation_list_remotes_by_type (FlatpakInstallation *self, + const FlatpakRemoteType types[], + gsize num_types, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakRemote *flatpak_installation_get_remote_by_name (FlatpakInstallation *self, + const gchar *name, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_modify_remote (FlatpakInstallation *self, + FlatpakRemote *remote, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_remove_remote (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_update_remote_sync (FlatpakInstallation *self, + const char *name, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_set_config_sync (FlatpakInstallation *self, + const char *key, + const char *value, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN char * flatpak_installation_get_config (FlatpakInstallation *self, + const char *key, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN char * flatpak_installation_load_app_overrides (FlatpakInstallation *self, + const char *app_id, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install (FlatpakInstallation *self, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install_full (FlatpakInstallation *self, + FlatpakInstallFlags flags, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + const char * const *subpaths, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_update (FlatpakInstallation *self, + FlatpakUpdateFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_update_full (FlatpakInstallation *self, + FlatpakUpdateFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + const char * const *subpaths, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install_bundle (FlatpakInstallation *self, + GFile *file, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakRemoteRef * flatpak_installation_install_ref_file (FlatpakInstallation *self, + GBytes *ref_file_data, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_uninstall (FlatpakInstallation *self, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); + +FLATPAK_EXTERN gboolean flatpak_installation_uninstall_full (FlatpakInstallation *self, + FlatpakUninstallFlags flags, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + FlatpakProgressCallback progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); + +FLATPAK_EXTERN gboolean flatpak_installation_fetch_remote_size_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRef *ref, + guint64 *download_size, + guint64 *installed_size, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GBytes * flatpak_installation_fetch_remote_metadata_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRef *ref, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray * flatpak_installation_list_remote_refs_sync (FlatpakInstallation *self, + const char *remote_or_uri, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN FlatpakRemoteRef *flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, + const char *remote_name, + FlatpakRefKind kind, + const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_update_appstream_sync (FlatpakInstallation *self, + const char *remote_name, + const char *arch, + gboolean *out_changed, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self, + const char *remote_name, + const char *arch, + FlatpakProgressCallback progress, + gpointer progress_data, + gboolean *out_changed, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray * flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN GPtrArray * flatpak_installation_list_installed_related_refs_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error); + +FLATPAK_EXTERN gboolean flatpak_installation_remove_local_ref_sync (FlatpakInstallation *self, + const char *remote_name, + const char *ref, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_cleanup_local_refs_sync (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_prune_local_repo (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN gboolean flatpak_installation_run_triggers (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); + + +#endif /* __FLATPAK_INSTALLATION_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-installation-private.h flatpak-1.0.7/common/flatpak-installation-private.h --- flatpak-0.11.3/common/flatpak-installation-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installation-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,38 @@ +/* + * Copyright © 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_INSTALLATION_PRIVATE_H__ +#define __FLATPAK_INSTALLATION_PRIVATE_H__ + +#include "flatpak-installation.h" + +#include "flatpak-dir-private.h" + +FlatpakDir *flatpak_installation_clone_dir_noensure (FlatpakInstallation *self); + +FlatpakDir *flatpak_installation_clone_dir (FlatpakInstallation *self, + GCancellable *cancellable, + GError **error); + +FlatpakInstallation *flatpak_installation_new_for_dir (FlatpakDir *dir, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_INSTALLATION_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-installed-ref.c flatpak-1.0.7/common/flatpak-installed-ref.c --- flatpak-0.11.3/common/flatpak-installed-ref.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installed-ref.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,469 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-installed-ref.h" +#include "flatpak-installed-ref-private.h" +#include "flatpak-enum-types.h" + +/** + * SECTION:flatpak-installed-ref + * @Title: FlatpakInstalledRef + * @Short_description: Installed application reference + * + * A FlatpakInstalledRef provides information about an installed + * application or runtime (in short: ref), such as the available + * builds, its size, location, etc. + */ + +typedef struct _FlatpakInstalledRefPrivate FlatpakInstalledRefPrivate; + +struct _FlatpakInstalledRefPrivate +{ + gboolean is_current; + char *origin; + char *latest_commit; + char *deploy_dir; + char **subpaths; + guint64 installed_size; + char *eol; + char *eol_rebase; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakInstalledRef, flatpak_installed_ref, FLATPAK_TYPE_REF) + +enum { + PROP_0, + + PROP_IS_CURRENT, + PROP_ORIGIN, + PROP_LATEST_COMMIT, + PROP_DEPLOY_DIR, + PROP_INSTALLED_SIZE, + PROP_SUBPATHS, + PROP_EOL, + PROP_EOL_REBASE, +}; + +static void +flatpak_installed_ref_finalize (GObject *object) +{ + FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + g_free (priv->origin); + g_free (priv->latest_commit); + g_free (priv->deploy_dir); + g_strfreev (priv->subpaths); + g_free (priv->eol); + g_free (priv->eol_rebase); + + G_OBJECT_CLASS (flatpak_installed_ref_parent_class)->finalize (object); +} + +static void +flatpak_installed_ref_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_IS_CURRENT: + priv->is_current = g_value_get_boolean (value); + break; + + case PROP_INSTALLED_SIZE: + priv->installed_size = g_value_get_uint64 (value); + break; + + case PROP_ORIGIN: + g_clear_pointer (&priv->origin, g_free); + priv->origin = g_value_dup_string (value); + break; + + case PROP_LATEST_COMMIT: + g_clear_pointer (&priv->latest_commit, g_free); + priv->latest_commit = g_value_dup_string (value); + break; + + case PROP_DEPLOY_DIR: + g_clear_pointer (&priv->deploy_dir, g_free); + priv->deploy_dir = g_value_dup_string (value); + break; + + case PROP_SUBPATHS: + g_clear_pointer (&priv->subpaths, g_strfreev); + priv->subpaths = g_strdupv (g_value_get_boxed (value)); + break; + + case PROP_EOL: + g_clear_pointer (&priv->eol, g_free); + priv->eol = g_value_dup_string (value); + break; + + case PROP_EOL_REBASE: + g_clear_pointer (&priv->eol_rebase, g_free); + priv->eol_rebase = g_value_dup_string (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_installed_ref_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_IS_CURRENT: + g_value_set_boolean (value, priv->is_current); + break; + + case PROP_INSTALLED_SIZE: + g_value_set_uint64 (value, priv->installed_size); + break; + + case PROP_ORIGIN: + g_value_set_string (value, priv->origin); + break; + + case PROP_LATEST_COMMIT: + g_value_set_string (value, priv->latest_commit); + break; + + case PROP_DEPLOY_DIR: + g_value_set_string (value, priv->deploy_dir); + break; + + case PROP_SUBPATHS: + g_value_set_boxed (value, priv->subpaths); + break; + + case PROP_EOL: + g_value_set_string (value, priv->eol); + break; + + case PROP_EOL_REBASE: + g_value_set_string (value, priv->eol_rebase); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_installed_ref_class_init (FlatpakInstalledRefClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_installed_ref_get_property; + object_class->set_property = flatpak_installed_ref_set_property; + object_class->finalize = flatpak_installed_ref_finalize; + + g_object_class_install_property (object_class, + PROP_IS_CURRENT, + g_param_spec_boolean ("is-current", + "Is Current", + "Whether the application is current", + FALSE, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_INSTALLED_SIZE, + g_param_spec_uint64 ("installed-size", + "Installed Size", + "The installed size of the application", + 0, G_MAXUINT64, 0, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_ORIGIN, + g_param_spec_string ("origin", + "Origin", + "The origin", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_LATEST_COMMIT, + g_param_spec_string ("latest-commit", + "Latest Commit", + "The latest commit", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_DEPLOY_DIR, + g_param_spec_string ("deploy-dir", + "Deploy Dir", + "Where the application is installed", + NULL, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_SUBPATHS, + g_param_spec_boxed ("subpaths", + "Subpaths", + "The subpaths for a partially installed ref", + G_TYPE_STRV, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_EOL, + g_param_spec_string ("end-of-life", + "End of life", + "The reason for the ref to be end of life", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_EOL_REBASE, + g_param_spec_string ("end-of-life-rebase", + "End of life rebase", + "The new ref for the end-of-lifed ref", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); +} + +static void +flatpak_installed_ref_init (FlatpakInstalledRef *self) +{ +} + +/** + * flatpak_installed_ref_get_origin: + * @self: a #FlatpakInstalledRef + * + * Gets the origin of the ref. + * + * Returns: (transfer none): the origin + */ +const char * +flatpak_installed_ref_get_origin (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->origin; +} + +/** + * flatpak_installed_ref_get_latest_commit: + * @self: a #FlatpakInstalledRef + * + * Gets the latest commit of the ref. + * + * Returns: (transfer none): the latest commit + */ +const char * +flatpak_installed_ref_get_latest_commit (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->latest_commit; +} + +/** + * flatpak_installed_ref_get_deploy_dir: + * @self: a #FlatpakInstalledRef + * + * Gets the deploy dir of the ref. + * + * Returns: (transfer none): the deploy dir + */ +const char * +flatpak_installed_ref_get_deploy_dir (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->deploy_dir; +} + +/** + * flatpak_installed_ref_get_is_current: + * @self: a #FlatpakInstalledRef + * + * Returns whether the ref is current. + * + * Returns: %TRUE if the ref is current + */ +gboolean +flatpak_installed_ref_get_is_current (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->is_current; +} + +/** + * flatpak_installed_ref_get_subpaths: + * @self: a #FlatpakInstalledRef + * + * Returns the subpaths that are installed, or %NULL if all files installed. + * + * Returns: (transfer none): A strv, or %NULL + */ +const char * const * +flatpak_installed_ref_get_subpaths (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return (const char * const *) priv->subpaths; +} + +/** + * flatpak_installed_ref_get_installed_size: + * @self: a #FlatpakInstalledRef + * + * Returns the installed size of the ref. + * + * Returns: the installed size + */ +guint64 +flatpak_installed_ref_get_installed_size (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->installed_size; +} + +/** + * flatpak_installed_ref_load_metadata: + * @self: a #FlatpakInstalledRef + * @cancellable: (nullable): a #GCancellable + * @error: a return location for a #GError + * + * Loads the metadata file for this ref. + * + * Returns: (transfer full): a #GBytes containing the metadata file, + * or %NULL if an error occurred + */ +GBytes * +flatpak_installed_ref_load_metadata (FlatpakInstalledRef *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + g_autofree char *path = NULL; + char *metadata; + gsize length; + + if (priv->deploy_dir == NULL) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Unknown deploy directory"); + return NULL; + } + + path = g_build_filename (priv->deploy_dir, "metadata", NULL); + if (!g_file_get_contents (path, &metadata, &length, error)) + return NULL; + + return g_bytes_new_take (metadata, length); +} + +/** + * flatpak_installed_ref_get_eol: + * @self: a #FlatpakInstalledRef + * + * Returns the end-of-life reason string, or %NULL if the + * ref is not end-of-lifed. + * + * Returns: (transfer none): the end-of-life reason or %NULL + */ +const char * +flatpak_installed_ref_get_eol (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->eol; +} + +/** + * flatpak_installed_ref_get_eol_rebase: + * @self: a #FlatpakInstalledRef + * + * Returns the end-of-life rebased ref, or %NULL if the + * ref is not end-of-lifed. + * + * Returns: (transfer none): the end-of-life rebased ref or %NULL + */ +const char * +flatpak_installed_ref_get_eol_rebase (FlatpakInstalledRef *self) +{ + FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); + + return priv->eol_rebase; +} + +FlatpakInstalledRef * +flatpak_installed_ref_new (const char *full_ref, + const char *commit, + const char *latest_commit, + const char *origin, + const char **subpaths, + const char *deploy_dir, + guint64 installed_size, + gboolean is_current, + const char *eol, + const char *eol_rebase) +{ + FlatpakRefKind kind = FLATPAK_REF_KIND_APP; + FlatpakInstalledRef *ref; + + g_auto(GStrv) parts = NULL; + + parts = g_strsplit (full_ref, "/", -1); + + if (strcmp (parts[0], "app") != 0) + kind = FLATPAK_REF_KIND_RUNTIME; + + /* Canonicalize the "no subpaths" case */ + if (subpaths && *subpaths == NULL) + subpaths = NULL; + + ref = g_object_new (FLATPAK_TYPE_INSTALLED_REF, + "kind", kind, + "name", parts[1], + "arch", parts[2], + "branch", parts[3], + "commit", commit, + "latest-commit", latest_commit, + "origin", origin, + "subpaths", subpaths, + "is-current", is_current, + "installed-size", installed_size, + "deploy-dir", deploy_dir, + "end-of-life", eol, + "end-of-life-rebase", eol_rebase, + NULL); + + return ref; +} diff -Nru flatpak-0.11.3/common/flatpak-installed-ref.h flatpak-1.0.7/common/flatpak-installed-ref.h --- flatpak-0.11.3/common/flatpak-installed-ref.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installed-ref.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,65 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_INSTALLED_REF_H__ +#define __FLATPAK_INSTALLED_REF_H__ + +typedef struct _FlatpakInstalledRef FlatpakInstalledRef; + +#include +#include + +#define FLATPAK_TYPE_INSTALLED_REF flatpak_installed_ref_get_type () +#define FLATPAK_INSTALLED_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_INSTALLED_REF, FlatpakInstalledRef)) +#define FLATPAK_IS_INSTALLED_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_INSTALLED_REF)) + +FLATPAK_EXTERN GType flatpak_installed_ref_get_type (void); + +struct _FlatpakInstalledRef +{ + FlatpakRef parent; +}; + +typedef struct +{ + FlatpakRefClass parent_class; +} FlatpakInstalledRefClass; + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakInstalledRef, g_object_unref) +#endif + +FLATPAK_EXTERN const char *flatpak_installed_ref_get_origin (FlatpakInstalledRef * self); +FLATPAK_EXTERN const char * const *flatpak_installed_ref_get_subpaths (FlatpakInstalledRef *self); +FLATPAK_EXTERN guint64 flatpak_installed_ref_get_installed_size (FlatpakInstalledRef *self); +FLATPAK_EXTERN const char *flatpak_installed_ref_get_deploy_dir (FlatpakInstalledRef *self); +FLATPAK_EXTERN const char *flatpak_installed_ref_get_latest_commit (FlatpakInstalledRef *self); +FLATPAK_EXTERN gboolean flatpak_installed_ref_get_is_current (FlatpakInstalledRef *self); +FLATPAK_EXTERN GBytes *flatpak_installed_ref_load_metadata (FlatpakInstalledRef *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN const char * flatpak_installed_ref_get_eol (FlatpakInstalledRef *self); +FLATPAK_EXTERN const char * flatpak_installed_ref_get_eol_rebase (FlatpakInstalledRef *self); + +#endif /* __FLATPAK_INSTALLED_REF_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-installed-ref-private.h flatpak-1.0.7/common/flatpak-installed-ref-private.h --- flatpak-0.11.3/common/flatpak-installed-ref-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-installed-ref-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,42 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_INSTALLED_REF_PRIVATE_H__ +#define __FLATPAK_INSTALLED_REF_PRIVATE_H__ + +#include +#include + +FlatpakInstalledRef *flatpak_installed_ref_new (const char *full_ref, + const char *commit, + const char *latest_commit, + const char *origin, + const char **subpaths, + const char *deploy_dir, + guint64 installed_size, + gboolean current, + const char *eol, + const char *eol_rebase); + +#endif /* __FLATPAK_INSTALLED_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-instance.c flatpak-1.0.7/common/flatpak-instance.c --- flatpak-0.11.3/common/flatpak-instance.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-instance.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,353 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#include "config.h" + +#include "flatpak-utils-private.h" +#include "flatpak-run-private.h" +#include "flatpak-instance-private.h" +#include "flatpak-enum-types.h" + + +typedef struct _FlatpakInstancePrivate FlatpakInstancePrivate; + +struct _FlatpakInstancePrivate +{ + char *id; + char *dir; + + GKeyFile *info; + char *app; + char *arch; + char *branch; + char *commit; + char *runtime; + char *runtime_commit; + + int pid; + int child_pid; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakInstance, flatpak_instance, G_TYPE_OBJECT) + +static void +flatpak_instance_finalize (GObject *object) +{ + FlatpakInstance *self = FLATPAK_INSTANCE (object); + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + g_free (priv->id); + g_free (priv->dir); + g_free (priv->app); + g_free (priv->arch); + g_free (priv->branch); + g_free (priv->commit); + g_free (priv->runtime); + g_free (priv->runtime_commit); + + if (priv->info) + g_key_file_unref (priv->info); + + G_OBJECT_CLASS (flatpak_instance_parent_class)->finalize (object); +} + +static void +flatpak_instance_class_init (FlatpakInstanceClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = flatpak_instance_finalize; +} + +static void +flatpak_instance_init (FlatpakInstance *self) +{ +} + +const char * +flatpak_instance_get_id (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->id; +} + +const char * +flatpak_instance_get_app (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->app; +} + +const char * +flatpak_instance_get_arch (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->arch; +} + +const char * +flatpak_instance_get_branch (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->branch; +} + +const char * +flatpak_instance_get_commit (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->commit; +} + +const char * +flatpak_instance_get_runtime (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->runtime; +} + +const char * +flatpak_instance_get_runtime_commit (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->runtime_commit; +} + +int +flatpak_instance_get_pid (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->pid; +} + +int +flatpak_instance_get_child_pid (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->child_pid; +} + +GKeyFile * +flatpak_instance_get_info (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + return priv->info; +} + +static GKeyFile * +get_instance_info (const char *dir) +{ + g_autofree char *file = NULL; + g_autoptr(GKeyFile) key_file = NULL; + g_autoptr(GError) error = NULL; + + file = g_build_filename (dir, "info", NULL); + + key_file = g_key_file_new (); + if (!g_key_file_load_from_file (key_file, file, G_KEY_FILE_NONE, &error)) + { + g_debug ("Failed to load instance info file '%s': %s", file, error->message); + return NULL; + } + + return g_steal_pointer (&key_file); +} + +static int +get_child_pid (const char *dir) +{ + g_autofree char *file = NULL; + g_autofree char *contents = NULL; + gsize length; + g_autoptr(GError) error = NULL; + g_autoptr(JsonParser) parser = NULL; + JsonNode *node; + JsonObject *obj; + + file = g_build_filename (dir, "bwrapinfo.json", NULL); + + if (!g_file_get_contents (file, &contents, &length, &error)) + { + g_debug ("Failed to load bwrapinfo.json file '%s': %s", file, error->message); + return 0; + } + + parser = json_parser_new (); + if (!json_parser_load_from_data (parser, contents, length, &error)) + { + g_debug ("Failed to parse bwrapinfo.json file '%s': %s", file, error->message); + return 0; + } + + node = json_parser_get_root (parser); + obj = json_node_get_object (node); + + return json_object_get_int_member (obj, "child-pid"); +} + +static int +get_pid (const char *dir) +{ + g_autofree char *file = NULL; + g_autofree char *contents = NULL; + g_autoptr(GError) error = NULL; + + file = g_build_filename (dir, "pid", NULL); + + if (!g_file_get_contents (file, &contents, NULL, &error)) + { + g_debug ("Failed to load pid file '%s': %s", file, error->message); + return 0; + } + + return (int) g_ascii_strtoll (contents, NULL, 10); +} + +static FlatpakInstance * +flatpak_instance_new (const char *id) +{ + FlatpakInstance *self = g_object_new (flatpak_instance_get_type (), NULL); + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + priv->id = g_strdup (id); + + priv->dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak", id, NULL); + + priv->pid = get_pid (priv->dir); + priv->child_pid = get_child_pid (priv->dir); + priv->info = get_instance_info (priv->dir); + + if (priv->info) + { + priv->app = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_APPLICATION, FLATPAK_METADATA_KEY_NAME, NULL); + priv->runtime = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_APPLICATION, FLATPAK_METADATA_KEY_RUNTIME, NULL); + + priv->arch = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_ARCH, NULL); + priv->branch = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_BRANCH, NULL); + priv->commit = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_APP_COMMIT, NULL); + priv->runtime_commit = g_key_file_get_string (priv->info, + FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_RUNTIME_COMMIT, NULL); + } + + return self; +} + +GPtrArray * +flatpak_instance_get_all (void) +{ + g_autoptr(GPtrArray) instances = NULL; + g_autofree char *base_dir = NULL; + g_auto(GLnxDirFdIterator) iter = { 0 }; + struct dirent *dent; + + instances = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); + base_dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak", NULL); + + if (!glnx_dirfd_iterator_init_at (AT_FDCWD, base_dir, FALSE, &iter, NULL)) + return g_steal_pointer (&instances); + + while (TRUE) + { + if (!glnx_dirfd_iterator_next_dent_ensure_dtype (&iter, &dent, NULL, NULL)) + break; + + if (dent == NULL) + break; + + if (dent->d_type == DT_DIR) + { + g_autofree char *ref_file = g_strconcat (dent->d_name, "/.ref", NULL); + struct stat statbuf; + struct flock l = { + .l_type = F_WRLCK, + .l_whence = SEEK_SET, + .l_start = 0, + .l_len = 0 + }; + glnx_autofd int lock_fd = openat (iter.fd, ref_file, O_RDWR | O_CLOEXEC); + if (lock_fd != -1 && + fstat (lock_fd, &statbuf) == 0 && + /* Only gc if created at least 3 secs ago, to work around race mentioned in flatpak_run_allocate_id() */ + statbuf.st_mtime + 3 < time (NULL) && + fcntl (lock_fd, F_GETLK, &l) == 0 && + l.l_type == F_UNLCK) + { + /* The instance is not used, remove it */ + g_debug ("Cleaning up unused container id %s", dent->d_name); + glnx_shutil_rm_rf_at (iter.fd, dent->d_name, NULL, NULL); + continue; + } + + g_ptr_array_add (instances, flatpak_instance_new (dent->d_name)); + } + } + + return g_steal_pointer (&instances); +} + +gboolean +flatpak_instance_is_running (FlatpakInstance *self) +{ + FlatpakInstancePrivate *priv = flatpak_instance_get_instance_private (self); + + if (priv->dir) + { + g_autofree char *ref_file = g_strconcat (priv->dir, "/.ref", NULL); + struct stat statbuf; + struct flock l = { + .l_type = F_WRLCK, + .l_whence = SEEK_SET, + .l_start = 0, + .l_len = 0 + }; + glnx_autofd int lock_fd = open (ref_file, O_RDWR | O_CLOEXEC); + if (lock_fd != -1 && + fstat (lock_fd, &statbuf) == 0 && + /* Only gc if created at least 3 secs ago, to work around race mentioned in flatpak_run_allocate_id() */ + statbuf.st_mtime + 3 < time (NULL) && + fcntl (lock_fd, F_GETLK, &l) == 0 && + l.l_type == F_UNLCK) + { + /* The instance is not used, remove it */ + g_debug ("Cleaning up unused container id %s", priv->id); + glnx_shutil_rm_rf_at (-1, priv->dir, NULL, NULL); + + g_clear_pointer (&priv->dir, g_free); + } + } + + return priv->dir != NULL; +} + diff -Nru flatpak-0.11.3/common/flatpak-instance-private.h flatpak-1.0.7/common/flatpak-instance-private.h --- flatpak-0.11.3/common/flatpak-instance-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-instance-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,68 @@ +/* + * Copyright © 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: + * Matthias Clasen + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_INSTANCE_H__ +#define __FLATPAK_INSTANCE_H__ + +typedef struct _FlatpakInstance FlatpakInstance; + +#include + +#define FLATPAK_TYPE_INSTANCE flatpak_instance_get_type () +#define FLATPAK_INSTANCE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_INSTANCE, FlatpakInstance)) +#define FLATPAK_IS_INSTANCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_INSTANCE)) + +FLATPAK_EXTERN GType flatpak_instance_get_type (void); + +struct _FlatpakInstance +{ + GObject parent; +}; + +typedef struct +{ + GObjectClass parent_class; +} FlatpakInstanceClass; + + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakInstance, g_object_unref) +#endif + +FLATPAK_EXTERN GPtrArray * flatpak_instance_get_all (void); + +FLATPAK_EXTERN const char * flatpak_instance_get_id (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_app (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_arch (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_branch (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_commit (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_runtime (FlatpakInstance *self); +FLATPAK_EXTERN const char * flatpak_instance_get_runtime_commit (FlatpakInstance *self); +FLATPAK_EXTERN int flatpak_instance_get_pid (FlatpakInstance *self); +FLATPAK_EXTERN int flatpak_instance_get_child_pid (FlatpakInstance *self); +FLATPAK_EXTERN GKeyFile * flatpak_instance_get_info (FlatpakInstance *self); + +FLATPAK_EXTERN gboolean flatpak_instance_is_running (FlatpakInstance *self); + +#endif /* __FLATPAK_INSTANCE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-json.c flatpak-1.0.7/common/flatpak-json.c --- flatpak-0.11.3/common/flatpak-json.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json.c 2018-08-14 07:36:37.000000000 +0000 @@ -21,8 +21,8 @@ #include "config.h" #include "string.h" -#include "flatpak-json.h" -#include "flatpak-utils.h" +#include "flatpak-json-private.h" +#include "flatpak-utils-private.h" #include "libglnx.h" G_DEFINE_TYPE (FlatpakJson, flatpak_json, G_TYPE_OBJECT); @@ -47,14 +47,14 @@ } static gboolean -demarshal (JsonNode *parent_node, - const char *name, - gpointer dest, - FlatpakJsonPropType type, - gpointer type_data, - gpointer type_data2, +demarshal (JsonNode *parent_node, + const char *name, + gpointer dest, + FlatpakJsonPropType type, + gpointer type_data, + gpointer type_data2, FlatpakJsonPropFlags flags, - GError **error) + GError **error) { JsonObject *parent_object; JsonNode *node; @@ -87,7 +87,7 @@ "Expecting string for property %s", name); return FALSE; } - *(char **)dest = g_strdup (json_node_get_string (node)); + *(char **) dest = g_strdup (json_node_get_string (node)); break; case FLATPAK_JSON_PROP_TYPE_INT64: @@ -98,7 +98,7 @@ "Expecting int64 for property %s", name); return FALSE; } - *(gint64 *)dest = json_node_get_int (node); + *(gint64 *) dest = json_node_get_int (node); break; case FLATPAK_JSON_PROP_TYPE_BOOL: @@ -109,7 +109,7 @@ "Expecting bool for property %s", name); return FALSE; } - *(gboolean *)dest = json_node_get_boolean (node); + *(gboolean *) dest = json_node_get_boolean (node); break; case FLATPAK_JSON_PROP_TYPE_STRV: @@ -136,7 +136,7 @@ } g_ptr_array_add (str_array, NULL); - *(char ***)dest = (char **)g_ptr_array_free (g_steal_pointer (&str_array), FALSE); + *(char ***) dest = (char **) g_ptr_array_free (g_steal_pointer (&str_array), FALSE); } break; @@ -212,7 +212,7 @@ break; } - new_element = g_malloc0 ((gsize)type_data2); + new_element = g_malloc0 ((gsize) type_data2); g_ptr_array_add (obj_array, new_element); for (i = 0; struct_props[i].name != NULL; i++) @@ -234,7 +234,7 @@ /* We always set the array, even if it is partial, because we don't know how to free what we demarshalled so far */ - *(gpointer *)dest = (gpointer *)g_ptr_array_free (g_steal_pointer (&obj_array), FALSE); + *(gpointer *) dest = (gpointer *) g_ptr_array_free (g_steal_pointer (&obj_array), FALSE); return res; } break; @@ -273,7 +273,7 @@ g_hash_table_insert (h, g_strdup (member_name), g_strdup (val_str)); } - *(GHashTable **)dest = g_steal_pointer (&h); + *(GHashTable **) dest = g_steal_pointer (&h); } break; @@ -300,7 +300,7 @@ g_ptr_array_add (res, NULL); - *(char ***)dest = (char **)g_ptr_array_free (g_steal_pointer (&res), FALSE); + *(char ***) dest = (char **) g_ptr_array_free (g_steal_pointer (&res), FALSE); } break; @@ -352,9 +352,9 @@ } FlatpakJson * -flatpak_json_from_bytes (GBytes *bytes, - GType type, - GError **error) +flatpak_json_from_bytes (GBytes *bytes, + GType type, + GError **error) { g_autoptr(JsonParser) parser = NULL; JsonNode *root = NULL; @@ -371,12 +371,33 @@ return flatpak_json_from_node (root, type, error); } +FlatpakJson * +flatpak_json_from_stream (GInputStream *stream, + GType type, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(JsonParser) parser = NULL; + JsonNode *root = NULL; + + parser = json_parser_new (); + if (!json_parser_load_from_stream (parser, + stream, + cancellable, + error)) + return NULL; + + root = json_parser_get_root (parser); + + return flatpak_json_from_node (root, type, error); +} + static JsonNode * -marshal (JsonObject *parent, - const char *name, - gpointer src, - FlatpakJsonPropType type, - gpointer type_data, +marshal (JsonObject *parent, + const char *name, + gpointer src, + FlatpakJsonPropType type, + gpointer type_data, FlatpakJsonPropFlags flags) { JsonNode *retval = NULL; @@ -385,7 +406,7 @@ { case FLATPAK_JSON_PROP_TYPE_STRING: { - const char *str = *(const char **)src; + const char *str = *(const char **) src; if (str != NULL) retval = json_node_init_string (json_node_alloc (), str); break; @@ -393,13 +414,13 @@ case FLATPAK_JSON_PROP_TYPE_INT64: { - retval = json_node_init_int (json_node_alloc (), *(gint64 *)src); + retval = json_node_init_int (json_node_alloc (), *(gint64 *) src); break; } case FLATPAK_JSON_PROP_TYPE_BOOL: { - gboolean val = *(gboolean *)src; + gboolean val = *(gboolean *) src; if (val) retval = json_node_init_boolean (json_node_alloc (), val); break; @@ -407,7 +428,7 @@ case FLATPAK_JSON_PROP_TYPE_STRV: { - char **strv = *(char ***)src; + char **strv = *(char ***) src; int i; JsonArray *array; @@ -454,11 +475,15 @@ json_object_set_member (obj, struct_props[i].name, val); } - if (type != FLATPAK_JSON_PROP_TYPE_PARENT && - (!empty || (flags & FLATPAK_JSON_PROP_FLAGS_OPTIONAL) == 0)) + if (type != FLATPAK_JSON_PROP_TYPE_PARENT) { - retval = json_node_new (JSON_NODE_OBJECT); - json_node_take_object (retval, obj); + if (!empty || (flags & FLATPAK_JSON_PROP_FLAGS_OPTIONAL) == 0) + { + retval = json_node_new (JSON_NODE_OBJECT); + json_node_take_object (retval, obj); + } + else + json_object_unref (obj); } break; } @@ -466,7 +491,7 @@ case FLATPAK_JSON_PROP_TYPE_STRUCTV: { FlatpakJsonProp *struct_props = type_data; - gpointer *structv = *(gpointer **)src; + gpointer *structv = *(gpointer **) src; int i, j; JsonArray *array; @@ -504,7 +529,7 @@ case FLATPAK_JSON_PROP_TYPE_STRMAP: { - GHashTable *map = *(GHashTable **)src; + GHashTable *map = *(GHashTable **) src; if (map != NULL && g_hash_table_size (map) > 0) { @@ -533,7 +558,7 @@ case FLATPAK_JSON_PROP_TYPE_BOOLMAP: { - char **map = *(char ***)src; + char **map = *(char ***) src; if (map != NULL && map[0] != NULL) { @@ -566,9 +591,9 @@ } static void -marshal_props_for_class (FlatpakJson *self, +marshal_props_for_class (FlatpakJson *self, FlatpakJsonClass *class, - JsonObject *obj) + JsonObject *obj) { FlatpakJsonProp *props = NULL; int i; @@ -578,7 +603,7 @@ if (FLATPAK_JSON_CLASS (parent_class)->props != NULL) marshal_props_for_class (self, - FLATPAK_JSON_CLASS(parent_class), + FLATPAK_JSON_CLASS (parent_class), obj); props = FLATPAK_JSON_CLASS (class)->props; @@ -617,7 +642,7 @@ } GBytes * -flatpak_json_to_bytes (FlatpakJson *self) +flatpak_json_to_bytes (FlatpakJson *self) { g_autoptr(JsonNode) node = NULL; g_autoptr(JsonGenerator) generator = NULL; diff -Nru flatpak-0.11.3/common/flatpak-json.h flatpak-1.0.7/common/flatpak-json.h --- flatpak-0.11.3/common/flatpak-json.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -/* - * Copyright © 2016 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_JSON_H__ -#define __FLATPAK_JSON_H__ - -#include - -G_BEGIN_DECLS - -#define FLATPAK_TYPE_JSON flatpak_json_get_type () - -typedef struct _FlatpakJsonProp FlatpakJsonProp; - -typedef enum { - FLATPAK_JSON_PROP_TYPE_PARENT, - FLATPAK_JSON_PROP_TYPE_INT64, - FLATPAK_JSON_PROP_TYPE_BOOL, - FLATPAK_JSON_PROP_TYPE_STRING, - FLATPAK_JSON_PROP_TYPE_STRUCT, - FLATPAK_JSON_PROP_TYPE_STRUCTV, - FLATPAK_JSON_PROP_TYPE_STRV, - FLATPAK_JSON_PROP_TYPE_STRMAP, - FLATPAK_JSON_PROP_TYPE_BOOLMAP, -} FlatpakJsonPropType; - -typedef enum { - FLATPAK_JSON_PROP_FLAGS_NONE = 0, - FLATPAK_JSON_PROP_FLAGS_OPTIONAL = 1<<0, - FLATPAK_JSON_PROP_FLAGS_STRICT = 1<<1, - FLATPAK_JSON_PROP_FLAGS_MANDATORY = 1<<2, -} FlatpakJsonPropFlags; - - -struct _FlatpakJsonProp { - const char *name; - gsize offset; - FlatpakJsonPropType type; - gpointer type_data; - gpointer type_data2; - FlatpakJsonPropFlags flags; -} ; - -#define FLATPAK_JSON_STRING_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRING } -#define FLATPAK_JSON_MANDATORY_STRING_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRING, 0, 0, FLATPAK_JSON_PROP_FLAGS_MANDATORY } -#define FLATPAK_JSON_INT64_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_INT64 } -#define FLATPAK_JSON_BOOL_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_BOOL } -#define FLATPAK_JSON_STRV_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRV } -#define FLATPAK_JSON_STRMAP_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRMAP } -#define FLATPAK_JSON_BOOLMAP_PROP(_struct, _field, _name) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_BOOLMAP } -#define FLATPAK_JSON_STRUCT_PROP(_struct, _field, _name, _props) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer)_props} -#define FLATPAK_JSON_OPT_STRUCT_PROP(_struct, _field, _name, _props) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer)_props, 0, FLATPAK_JSON_PROP_FLAGS_OPTIONAL} -#define FLATPAK_JSON_STRICT_STRUCT_PROP(_struct, _field, _name, _props) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer)_props, 0, FLATPAK_JSON_PROP_FLAGS_STRICT} -#define FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(_struct, _field, _name, _props) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer)_props, 0, FLATPAK_JSON_PROP_FLAGS_STRICT | FLATPAK_JSON_PROP_FLAGS_MANDATORY} -#define FLATPAK_JSON_PARENT_PROP(_struct, _field, _props) \ - { "parent", G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_PARENT, (gpointer)_props} -#define FLATPAK_JSON_STRUCTV_PROP(_struct, _field, _name, _props) \ - { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCTV, (gpointer)_props, (gpointer) sizeof (**((_struct *) 0)->_field) } -#define FLATPAK_JSON_LAST_PROP { NULL } - -G_DECLARE_DERIVABLE_TYPE (FlatpakJson, flatpak_json, FLATPAK, JSON, GObject) - -struct _FlatpakJsonClass { - GObjectClass parent_class; - - FlatpakJsonProp *props; - const char *mediatype; -}; - -FlatpakJson *flatpak_json_from_node (JsonNode *node, - GType type, - GError **error); -JsonNode *flatpak_json_to_node (FlatpakJson *self); -FlatpakJson *flatpak_json_from_bytes (GBytes *bytes, - GType type, - GError **error); -GBytes *flatpak_json_to_bytes (FlatpakJson *self); - -G_END_DECLS - -#endif /* __FLATPAK_JSON_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-json-oci.c flatpak-1.0.7/common/flatpak-json-oci.c --- flatpak-0.11.3/common/flatpak-json-oci.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json-oci.c 2018-08-08 14:56:20.000000000 +0000 @@ -21,8 +21,8 @@ #include "config.h" #include "string.h" -#include "flatpak-json-oci.h" -#include "flatpak-utils.h" +#include "flatpak-json-oci-private.h" +#include "flatpak-utils-private.h" #include "libglnx.h" const char * @@ -40,7 +40,7 @@ FlatpakOciDescriptor * flatpak_oci_descriptor_new (const char *mediatype, const char *digest, - gint64 size) + gint64 size) { FlatpakOciDescriptor *desc = g_new0 (FlatpakOciDescriptor, 1); @@ -61,7 +61,7 @@ dest->mediatype = g_strdup (source->mediatype); dest->digest = g_strdup (source->digest); dest->size = source->size; - dest->urls = g_strdupv ((char **)source->urls); + dest->urls = g_strdupv ((char **) source->urls); dest->annotations = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); if (source->annotations) flatpak_oci_copy_annotations (source->annotations, dest->annotations); @@ -89,7 +89,7 @@ FLATPAK_JSON_STRING_PROP (FlatpakOciDescriptor, digest, "digest"), FLATPAK_JSON_INT64_PROP (FlatpakOciDescriptor, size, "size"), FLATPAK_JSON_STRV_PROP (FlatpakOciDescriptor, urls, "urls"), - FLATPAK_JSON_STRMAP_PROP(FlatpakOciDescriptor, annotations, "annotations"), + FLATPAK_JSON_STRMAP_PROP (FlatpakOciDescriptor, annotations, "annotations"), FLATPAK_JSON_LAST_PROP }; @@ -245,9 +245,9 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); FlatpakJsonClass *json_class = FLATPAK_JSON_CLASS (klass); static FlatpakJsonProp props[] = { - FLATPAK_JSON_STRUCT_PROP(FlatpakOciManifest, config, "config", flatpak_oci_descriptor_props), - FLATPAK_JSON_STRUCTV_PROP(FlatpakOciManifest, layers, "layers", flatpak_oci_descriptor_props), - FLATPAK_JSON_STRMAP_PROP(FlatpakOciManifest, annotations, "annotations"), + FLATPAK_JSON_STRUCT_PROP (FlatpakOciManifest, config, "config", flatpak_oci_descriptor_props), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciManifest, layers, "layers", flatpak_oci_descriptor_props), + FLATPAK_JSON_STRMAP_PROP (FlatpakOciManifest, annotations, "annotations"), FLATPAK_JSON_LAST_PROP }; @@ -276,7 +276,7 @@ } void -flatpak_oci_manifest_set_config (FlatpakOciManifest *self, +flatpak_oci_manifest_set_config (FlatpakOciManifest *self, FlatpakOciDescriptor *desc) { g_free (self->config.mediatype); @@ -298,15 +298,16 @@ } void -flatpak_oci_manifest_set_layer (FlatpakOciManifest *self, +flatpak_oci_manifest_set_layer (FlatpakOciManifest *self, FlatpakOciDescriptor *desc) { FlatpakOciDescriptor *descs[2] = { desc, NULL }; + flatpak_oci_manifest_set_layers (self, descs); } void -flatpak_oci_manifest_set_layers (FlatpakOciManifest *self, +flatpak_oci_manifest_set_layers (FlatpakOciManifest *self, FlatpakOciDescriptor **descs) { int i, count; @@ -315,7 +316,7 @@ flatpak_oci_descriptor_free (self->layers[i]); g_free (self->layers); - count = ptrv_count ((gpointer *)descs); + count = ptrv_count ((gpointer *) descs); self->layers = g_new0 (FlatpakOciDescriptor *, count + 1); for (i = 0; i < count; i++) @@ -330,12 +331,12 @@ int flatpak_oci_manifest_get_n_layers (FlatpakOciManifest *self) { - return ptrv_count ((gpointer *)self->layers); + return ptrv_count ((gpointer *) self->layers); } const char * flatpak_oci_manifest_get_layer_digest (FlatpakOciManifest *self, - int i) + int i) { return self->layers[i]->digest; } @@ -371,8 +372,8 @@ GObjectClass *object_class = G_OBJECT_CLASS (klass); FlatpakJsonClass *json_class = FLATPAK_JSON_CLASS (klass); static FlatpakJsonProp props[] = { - FLATPAK_JSON_STRUCTV_PROP(FlatpakOciIndex, manifests, "manifests", flatpak_oci_manifest_descriptor_props), - FLATPAK_JSON_STRMAP_PROP(FlatpakOciIndex, annotations, "annotations"), + FLATPAK_JSON_STRUCTV_PROP (FlatpakOciIndex, manifests, "manifests", flatpak_oci_manifest_descriptor_props), + FLATPAK_JSON_STRMAP_PROP (FlatpakOciIndex, annotations, "annotations"), FLATPAK_JSON_LAST_PROP }; @@ -409,19 +410,19 @@ 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)); + g_strdup ("org.opencontainers.image.ref.name"), + g_strdup (ref)); return desc; } int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self) { - return ptrv_count ((gpointer *)self->manifests); + return ptrv_count ((gpointer *) self->manifests); } void -flatpak_oci_index_add_manifest (FlatpakOciIndex *self, +flatpak_oci_index_add_manifest (FlatpakOciIndex *self, FlatpakOciDescriptor *desc) { FlatpakOciManifestDescriptor *m; @@ -439,7 +440,7 @@ 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; + self->manifests[count + 1] = NULL; } const char * @@ -457,7 +458,7 @@ static int index_find_ref (FlatpakOciIndex *self, - const char *ref) + const char *ref) { int i; @@ -480,7 +481,7 @@ FlatpakOciManifestDescriptor * flatpak_oci_index_get_manifest (FlatpakOciIndex *self, - const char *ref) + const char *ref) { int i = index_find_ref (self, ref); @@ -527,7 +528,7 @@ return FALSE; for (; self->manifests[i] != NULL; i++) - self->manifests[i] = self->manifests[i+1]; + self->manifests[i] = self->manifests[i + 1]; return TRUE; } @@ -601,7 +602,7 @@ FLATPAK_JSON_STRV_PROP (FlatpakOciImageConfig, cmd, "Cmd"), FLATPAK_JSON_BOOLMAP_PROP (FlatpakOciImageConfig, volumes, "Volumes"), FLATPAK_JSON_STRING_PROP (FlatpakOciImageConfig, working_dir, "WorkingDir"), - FLATPAK_JSON_STRMAP_PROP(FlatpakOciImageConfig, labels, "Labels"), + FLATPAK_JSON_STRMAP_PROP (FlatpakOciImageConfig, labels, "Labels"), FLATPAK_JSON_LAST_PROP }; static FlatpakJsonProp rootfs_props[] = { @@ -662,7 +663,7 @@ void flatpak_oci_image_set_created (FlatpakOciImage *image, - const char *created) + const char *created) { g_free (image->created); image->created = g_strdup (created); @@ -670,7 +671,7 @@ void flatpak_oci_image_set_architecture (FlatpakOciImage *image, - const char *arch) + const char *arch) { g_free (image->architecture); image->architecture = g_strdup (arch); @@ -678,7 +679,7 @@ void flatpak_oci_image_set_os (FlatpakOciImage *image, - const char *os) + const char *os) { g_free (image->os); image->os = g_strdup (os); @@ -686,15 +687,15 @@ void flatpak_oci_image_set_layers (FlatpakOciImage *image, - const char **layers) + const char **layers) { g_strfreev (image->rootfs.diff_ids); - image->rootfs.diff_ids = g_strdupv ((char **)layers); + image->rootfs.diff_ids = g_strdupv ((char **) layers); } void flatpak_oci_image_set_layer (FlatpakOciImage *image, - const char *layer) + const char *layer) { const char *layers[] = {layer, NULL}; @@ -728,35 +729,35 @@ flatpak_oci_copy_annotations (GHashTable *source, GHashTable *dest) { - GHashTableIter iter; - gpointer key, value; + GHashTableIter iter; + gpointer key, value; - g_hash_table_iter_init (&iter, source); - while (g_hash_table_iter_next (&iter, &key, &value)) - g_hash_table_replace (dest, - g_strdup ((char *)key), - g_strdup ((char *)value)); + g_hash_table_iter_init (&iter, source); + while (g_hash_table_iter_next (&iter, &key, &value)) + g_hash_table_replace (dest, + g_strdup ((char *) key), + g_strdup ((char *) value)); } static void add_annotation (GHashTable *annotations, const char *key, const char *value) { - g_hash_table_replace (annotations, - g_strdup (key), - g_strdup (value)); + g_hash_table_replace (annotations, + g_strdup (key), + g_strdup (value)); } void flatpak_oci_add_annotations_for_commit (GHashTable *annotations, - const char *ref, - const char *commit, - GVariant *commit_data) + const char *ref, + const char *commit, + GVariant *commit_data) { if (ref) - add_annotation (annotations,"org.flatpak.ref", ref); + add_annotation (annotations, "org.flatpak.ref", ref); if (commit) - add_annotation (annotations,"org.flatpak.commit", commit); + add_annotation (annotations, "org.flatpak.commit", commit); if (commit_data) { @@ -795,17 +796,17 @@ g_variant_get_child (commit_data, 4, "s", &body); add_annotation (annotations, "org.flatpak.body", body); - } + } } void -flatpak_oci_parse_commit_annotations (GHashTable *annotations, - guint64 *out_timestamp, - char **out_subject, - char **out_body, - char **out_ref, - char **out_commit, - char **out_parent_commit, +flatpak_oci_parse_commit_annotations (GHashTable *annotations, + guint64 *out_timestamp, + char **out_subject, + char **out_body, + char **out_ref, + char **out_commit, + char **out_parent_commit, GVariantBuilder *metadata_builder) { const char *oci_timestamp, *oci_subject, *oci_body, *oci_parent_commit, *oci_commit, *oci_ref; @@ -852,7 +853,7 @@ key += strlen ("org.flatpak.commit-metadata."); bin = g_base64_decode (value, &bin_len); - data = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE("v"), bin, bin_len, FALSE, + data = g_variant_ref_sink (g_variant_new_from_data (G_VARIANT_TYPE ("v"), bin, bin_len, FALSE, g_free, bin)); g_variant_builder_add (metadata_builder, "{s@v}", key, data); } @@ -902,8 +903,8 @@ }; static FlatpakJsonProp critical_props[] = { FLATPAK_JSON_MANDATORY_STRING_PROP (FlatpakOciSignatureCritical, type, "type"), - FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(FlatpakOciSignatureCritical, image, "image", image_props), - FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(FlatpakOciSignatureCritical, identity, "identity", identity_props), + FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP (FlatpakOciSignatureCritical, image, "image", image_props), + FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP (FlatpakOciSignatureCritical, identity, "identity", identity_props), FLATPAK_JSON_LAST_PROP }; static FlatpakJsonProp optional_props[] = { @@ -1015,8 +1016,8 @@ 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_STRMAP_PROP (FlatpakOciIndexImage, annotations, "Annotations"), + FLATPAK_JSON_STRMAP_PROP (FlatpakOciIndexImage, labels, "Labels"), FLATPAK_JSON_STRV_PROP (FlatpakOciIndexImage, tags, "Tags"), FLATPAK_JSON_LAST_PROP }; diff -Nru flatpak-0.11.3/common/flatpak-json-oci.h flatpak-1.0.7/common/flatpak-json-oci.h --- flatpak-0.11.3/common/flatpak-json-oci.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json-oci.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,318 +0,0 @@ -/* - * Copyright © 2016 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_JSON_OCI_H__ -#define __FLATPAK_JSON_OCI_H__ - -#include "flatpak-json.h" - -G_BEGIN_DECLS - -#define FLATPAK_OCI_MEDIA_TYPE_DESCRIPTOR "application/vnd.oci.descriptor.v1+json" -#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_MANIFEST "application/vnd.oci.image.manifest.v1+json" -#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_INDEX "application/vnd.oci.image.index.v1+json" -#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER "application/vnd.oci.image.layer.v1.tar+gzip" -#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER_NONDISTRIBUTABLE "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip" -#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_CONFIG "application/vnd.oci.image.config.v1+json" - -#define FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK "flatpak oci image signature" - -const char * flatpak_arch_to_oci_arch (const char *flatpak_arch); -void flatpak_oci_export_annotations (GHashTable *source, - GHashTable *dest); -void flatpak_oci_copy_annotations (GHashTable *source, - GHashTable *dest); - -typedef struct { - char *mediatype; - char *digest; - gint64 size; - char **urls; - GHashTable *annotations; -} FlatpakOciDescriptor; - -FlatpakOciDescriptor *flatpak_oci_descriptor_new (const char *mediatype, - const char *digest, - gint64 size); -void flatpak_oci_descriptor_copy (FlatpakOciDescriptor *source, - FlatpakOciDescriptor *dest); -void flatpak_oci_descriptor_destroy (FlatpakOciDescriptor *self); -void flatpak_oci_descriptor_free (FlatpakOciDescriptor *self); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciDescriptor, flatpak_oci_descriptor_free) - -typedef struct -{ - char *architecture; - char *os; - char *os_version; - char **os_features; - char *variant; - char **features; -} FlatpakOciManifestPlatform; - -typedef struct -{ - FlatpakOciDescriptor parent; - FlatpakOciManifestPlatform platform; -} FlatpakOciManifestDescriptor; - -FlatpakOciManifestDescriptor * flatpak_oci_manifest_descriptor_new (void); -const char * flatpak_oci_manifest_descriptor_get_ref (FlatpakOciManifestDescriptor *m); -void flatpak_oci_manifest_descriptor_destroy (FlatpakOciManifestDescriptor *self); -void flatpak_oci_manifest_descriptor_free (FlatpakOciManifestDescriptor *self); - - -#define FLATPAK_TYPE_OCI_VERSIONED flatpak_oci_versioned_get_type () -G_DECLARE_FINAL_TYPE (FlatpakOciVersioned, flatpak_oci_versioned, FLATPAK_OCI, VERSIONED, FlatpakJson) - -struct _FlatpakOciVersioned { - FlatpakJson parent; - - int version; - char *mediatype; -}; - -struct _FlatpakOciVersionedClass { - FlatpakJsonClass parent_class; -}; - -FlatpakOciVersioned *flatpak_oci_versioned_from_json (GBytes *bytes, - GError **error); -const char * flatpak_oci_versioned_get_mediatype (FlatpakOciVersioned *self); -gint64 flatpak_oci_versioned_get_version (FlatpakOciVersioned *self); - -#define FLATPAK_TYPE_OCI_MANIFEST flatpak_oci_manifest_get_type () -G_DECLARE_FINAL_TYPE (FlatpakOciManifest, flatpak_oci_manifest, FLATPAK, OCI_MANIFEST, FlatpakOciVersioned) - -struct _FlatpakOciManifest -{ - FlatpakOciVersioned parent; - - FlatpakOciDescriptor config; - FlatpakOciDescriptor **layers; - GHashTable *annotations; -}; - -struct _FlatpakOciManifestClass -{ - FlatpakOciVersionedClass parent_class; -}; - - -FlatpakOciManifest *flatpak_oci_manifest_new (void); -void flatpak_oci_manifest_set_config (FlatpakOciManifest *self, - FlatpakOciDescriptor *desc); -void flatpak_oci_manifest_set_layers (FlatpakOciManifest *self, - FlatpakOciDescriptor **descs); -void flatpak_oci_manifest_set_layer (FlatpakOciManifest *self, - FlatpakOciDescriptor *desc); -int flatpak_oci_manifest_get_n_layers (FlatpakOciManifest *self); -const char * flatpak_oci_manifest_get_layer_digest (FlatpakOciManifest *self, - int i); -GHashTable * flatpak_oci_manifest_get_annotations (FlatpakOciManifest *self); - -#define FLATPAK_TYPE_OCI_INDEX flatpak_oci_index_get_type () -G_DECLARE_FINAL_TYPE (FlatpakOciIndex, flatpak_oci_index, FLATPAK, OCI_INDEX, FlatpakOciVersioned) - -struct _FlatpakOciIndex -{ - FlatpakOciVersioned parent; - - FlatpakOciManifestDescriptor **manifests; - GHashTable *annotations; -}; - -struct _FlatpakOciIndexClass -{ - FlatpakOciVersionedClass parent_class; -}; - -FlatpakOciIndex * flatpak_oci_index_new (void); -void flatpak_oci_index_add_manifest (FlatpakOciIndex *self, - FlatpakOciDescriptor *desc); -gboolean flatpak_oci_index_remove_manifest (FlatpakOciIndex *self, - const char *ref); -FlatpakOciManifestDescriptor *flatpak_oci_index_get_manifest (FlatpakOciIndex *self, - const char *ref); -FlatpakOciManifestDescriptor *flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self); -int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self); - -#define FLATPAK_TYPE_OCI_IMAGE flatpak_oci_image_get_type () -G_DECLARE_FINAL_TYPE (FlatpakOciImage, flatpak_oci_image, FLATPAK, OCI_IMAGE, FlatpakJson) - -typedef struct -{ - char *type; - char **diff_ids; -} FlatpakOciImageRootfs; - -typedef struct -{ - char *user; - char *working_dir; - gint64 memory; - gint64 memory_swap; - gint64 cpu_shares; - char **env; - char **cmd; - char **entrypoint; - char **exposed_ports; - char **volumes; - GHashTable *labels; -} FlatpakOciImageConfig; - -typedef struct -{ - char *created; - char *created_by; - char *author; - char *comment; - gboolean empty_layer; -} FlatpakOciImageHistory; - -struct _FlatpakOciImage -{ - FlatpakJson parent; - - char *created; - char *author; - char *architecture; - char *os; - FlatpakOciImageRootfs rootfs; - FlatpakOciImageConfig config; - FlatpakOciImageHistory **history; -}; - -struct _FlatpakOciImageClass -{ - FlatpakJsonClass parent_class; -}; - -FlatpakOciImage *flatpak_oci_image_new (void); -void flatpak_oci_image_set_created (FlatpakOciImage *image, - const char *created); -void flatpak_oci_image_set_architecture (FlatpakOciImage *image, - const char *arch); -void flatpak_oci_image_set_os (FlatpakOciImage *image, - const char *os); -void flatpak_oci_image_set_layers (FlatpakOciImage *image, - const char **layers); -void flatpak_oci_image_set_layer (FlatpakOciImage *image, - const char *layer); - -void flatpak_oci_add_annotations_for_commit (GHashTable *annotations, - const char *ref, - const char *commit, - GVariant *commit_data); -void flatpak_oci_parse_commit_annotations (GHashTable *annotations, - guint64 *out_timestamp, - char **out_subject, - char **out_body, - char **out_ref, - char **out_commit, - char **out_parent_commit, - GVariantBuilder *metadata_builder); - -#define FLATPAK_TYPE_OCI_SIGNATURE flatpak_oci_signature_get_type () -G_DECLARE_FINAL_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK, OCI_SIGNATURE, FlatpakJson) - -typedef struct -{ - char *digest; -} FlatpakOciSignatureCriticalImage; - -typedef struct -{ - char *ref; -} FlatpakOciSignatureCriticalIdentity; - -typedef struct -{ - char *type; - FlatpakOciSignatureCriticalImage image; - FlatpakOciSignatureCriticalIdentity identity; -} FlatpakOciSignatureCritical; - -typedef struct -{ - char *creator; - gint64 timestamp; -} FlatpakOciSignatureOptional; - -struct _FlatpakOciSignature -{ - FlatpakJson parent; - - FlatpakOciSignatureCritical critical; - FlatpakOciSignatureOptional optional; -}; - -struct _FlatpakOciSignatureClass -{ - FlatpakJsonClass parent_class; -}; - -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 -Nru flatpak-0.11.3/common/flatpak-json-oci-private.h flatpak-1.0.7/common/flatpak-json-oci-private.h --- flatpak-0.11.3/common/flatpak-json-oci-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json-oci-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,322 @@ +/* + * Copyright © 2016 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_JSON_OCI_H__ +#define __FLATPAK_JSON_OCI_H__ + +#include "flatpak-json-private.h" + +G_BEGIN_DECLS + +#define FLATPAK_OCI_MEDIA_TYPE_DESCRIPTOR "application/vnd.oci.descriptor.v1+json" +#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_MANIFEST "application/vnd.oci.image.manifest.v1+json" +#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_INDEX "application/vnd.oci.image.index.v1+json" +#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER "application/vnd.oci.image.layer.v1.tar+gzip" +#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_LAYER_NONDISTRIBUTABLE "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip" +#define FLATPAK_OCI_MEDIA_TYPE_IMAGE_CONFIG "application/vnd.oci.image.config.v1+json" + +#define FLATPAK_OCI_SIGNATURE_TYPE_FLATPAK "flatpak oci image signature" + +const char * flatpak_arch_to_oci_arch (const char *flatpak_arch); +void flatpak_oci_export_annotations (GHashTable *source, + GHashTable *dest); +void flatpak_oci_copy_annotations (GHashTable *source, + GHashTable *dest); + +typedef struct +{ + char *mediatype; + char *digest; + gint64 size; + char **urls; + GHashTable *annotations; +} FlatpakOciDescriptor; + +FlatpakOciDescriptor *flatpak_oci_descriptor_new (const char *mediatype, + const char *digest, + gint64 size); +void flatpak_oci_descriptor_copy (FlatpakOciDescriptor *source, + FlatpakOciDescriptor *dest); +void flatpak_oci_descriptor_destroy (FlatpakOciDescriptor *self); +void flatpak_oci_descriptor_free (FlatpakOciDescriptor *self); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciDescriptor, flatpak_oci_descriptor_free) + +typedef struct +{ + char *architecture; + char *os; + char *os_version; + char **os_features; + char *variant; + char **features; +} FlatpakOciManifestPlatform; + +typedef struct +{ + FlatpakOciDescriptor parent; + FlatpakOciManifestPlatform platform; +} FlatpakOciManifestDescriptor; + +FlatpakOciManifestDescriptor * flatpak_oci_manifest_descriptor_new (void); +const char * flatpak_oci_manifest_descriptor_get_ref (FlatpakOciManifestDescriptor *m); +void flatpak_oci_manifest_descriptor_destroy (FlatpakOciManifestDescriptor *self); +void flatpak_oci_manifest_descriptor_free (FlatpakOciManifestDescriptor *self); + + +#define FLATPAK_TYPE_OCI_VERSIONED flatpak_oci_versioned_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciVersioned, flatpak_oci_versioned, FLATPAK_OCI, VERSIONED, FlatpakJson) + +struct _FlatpakOciVersioned +{ + FlatpakJson parent; + + int version; + char *mediatype; +}; + +struct _FlatpakOciVersionedClass +{ + FlatpakJsonClass parent_class; +}; + +FlatpakOciVersioned *flatpak_oci_versioned_from_json (GBytes *bytes, + GError **error); +const char * flatpak_oci_versioned_get_mediatype (FlatpakOciVersioned *self); +gint64 flatpak_oci_versioned_get_version (FlatpakOciVersioned *self); + +#define FLATPAK_TYPE_OCI_MANIFEST flatpak_oci_manifest_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciManifest, flatpak_oci_manifest, FLATPAK, OCI_MANIFEST, FlatpakOciVersioned) + +struct _FlatpakOciManifest +{ + FlatpakOciVersioned parent; + + FlatpakOciDescriptor config; + FlatpakOciDescriptor **layers; + GHashTable *annotations; +}; + +struct _FlatpakOciManifestClass +{ + FlatpakOciVersionedClass parent_class; +}; + + +FlatpakOciManifest *flatpak_oci_manifest_new (void); +void flatpak_oci_manifest_set_config (FlatpakOciManifest *self, + FlatpakOciDescriptor *desc); +void flatpak_oci_manifest_set_layers (FlatpakOciManifest *self, + FlatpakOciDescriptor **descs); +void flatpak_oci_manifest_set_layer (FlatpakOciManifest *self, + FlatpakOciDescriptor *desc); +int flatpak_oci_manifest_get_n_layers (FlatpakOciManifest *self); +const char * flatpak_oci_manifest_get_layer_digest (FlatpakOciManifest *self, + int i); +GHashTable * flatpak_oci_manifest_get_annotations (FlatpakOciManifest *self); + +#define FLATPAK_TYPE_OCI_INDEX flatpak_oci_index_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciIndex, flatpak_oci_index, FLATPAK, OCI_INDEX, FlatpakOciVersioned) + +struct _FlatpakOciIndex +{ + FlatpakOciVersioned parent; + + FlatpakOciManifestDescriptor **manifests; + GHashTable *annotations; +}; + +struct _FlatpakOciIndexClass +{ + FlatpakOciVersionedClass parent_class; +}; + +FlatpakOciIndex * flatpak_oci_index_new (void); +void flatpak_oci_index_add_manifest (FlatpakOciIndex *self, + FlatpakOciDescriptor *desc); +gboolean flatpak_oci_index_remove_manifest (FlatpakOciIndex *self, + const char *ref); +FlatpakOciManifestDescriptor *flatpak_oci_index_get_manifest (FlatpakOciIndex *self, + const char *ref); +FlatpakOciManifestDescriptor *flatpak_oci_index_get_only_manifest (FlatpakOciIndex *self); +int flatpak_oci_index_get_n_manifests (FlatpakOciIndex *self); + +#define FLATPAK_TYPE_OCI_IMAGE flatpak_oci_image_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciImage, flatpak_oci_image, FLATPAK, OCI_IMAGE, FlatpakJson) + +typedef struct +{ + char *type; + char **diff_ids; +} FlatpakOciImageRootfs; + +typedef struct +{ + char *user; + char *working_dir; + gint64 memory; + gint64 memory_swap; + gint64 cpu_shares; + char **env; + char **cmd; + char **entrypoint; + char **exposed_ports; + char **volumes; + GHashTable *labels; +} FlatpakOciImageConfig; + +typedef struct +{ + char *created; + char *created_by; + char *author; + char *comment; + gboolean empty_layer; +} FlatpakOciImageHistory; + +struct _FlatpakOciImage +{ + FlatpakJson parent; + + char *created; + char *author; + char *architecture; + char *os; + FlatpakOciImageRootfs rootfs; + FlatpakOciImageConfig config; + FlatpakOciImageHistory **history; +}; + +struct _FlatpakOciImageClass +{ + FlatpakJsonClass parent_class; +}; + +FlatpakOciImage *flatpak_oci_image_new (void); +void flatpak_oci_image_set_created (FlatpakOciImage *image, + const char *created); +void flatpak_oci_image_set_architecture (FlatpakOciImage *image, + const char *arch); +void flatpak_oci_image_set_os (FlatpakOciImage *image, + const char *os); +void flatpak_oci_image_set_layers (FlatpakOciImage *image, + const char **layers); +void flatpak_oci_image_set_layer (FlatpakOciImage *image, + const char *layer); + +void flatpak_oci_add_annotations_for_commit (GHashTable *annotations, + const char *ref, + const char *commit, + GVariant *commit_data); +void flatpak_oci_parse_commit_annotations (GHashTable *annotations, + guint64 *out_timestamp, + char **out_subject, + char **out_body, + char **out_ref, + char **out_commit, + char **out_parent_commit, + GVariantBuilder *metadata_builder); + +#define FLATPAK_TYPE_OCI_SIGNATURE flatpak_oci_signature_get_type () +G_DECLARE_FINAL_TYPE (FlatpakOciSignature, flatpak_oci_signature, FLATPAK, OCI_SIGNATURE, FlatpakJson) + +typedef struct +{ + char *digest; +} FlatpakOciSignatureCriticalImage; + +typedef struct +{ + char *ref; +} FlatpakOciSignatureCriticalIdentity; + +typedef struct +{ + char *type; + FlatpakOciSignatureCriticalImage image; + FlatpakOciSignatureCriticalIdentity identity; +} FlatpakOciSignatureCritical; + +typedef struct +{ + char *creator; + gint64 timestamp; +} FlatpakOciSignatureOptional; + +struct _FlatpakOciSignature +{ + FlatpakJson parent; + + FlatpakOciSignatureCritical critical; + FlatpakOciSignatureOptional optional; +}; + +struct _FlatpakOciSignatureClass +{ + FlatpakJsonClass parent_class; +}; + +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 -Nru flatpak-0.11.3/common/flatpak-json-private.h flatpak-1.0.7/common/flatpak-json-private.h --- flatpak-0.11.3/common/flatpak-json-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-json-private.h 2018-08-09 13:38:21.000000000 +0000 @@ -0,0 +1,115 @@ +/* + * Copyright © 2016 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_JSON_H__ +#define __FLATPAK_JSON_H__ + +#include + +G_BEGIN_DECLS + +#define FLATPAK_TYPE_JSON flatpak_json_get_type () + +typedef struct _FlatpakJsonProp FlatpakJsonProp; + +typedef enum { + FLATPAK_JSON_PROP_TYPE_PARENT, + FLATPAK_JSON_PROP_TYPE_INT64, + FLATPAK_JSON_PROP_TYPE_BOOL, + FLATPAK_JSON_PROP_TYPE_STRING, + FLATPAK_JSON_PROP_TYPE_STRUCT, + FLATPAK_JSON_PROP_TYPE_STRUCTV, + FLATPAK_JSON_PROP_TYPE_STRV, + FLATPAK_JSON_PROP_TYPE_STRMAP, + FLATPAK_JSON_PROP_TYPE_BOOLMAP, +} FlatpakJsonPropType; + +typedef enum { + FLATPAK_JSON_PROP_FLAGS_NONE = 0, + FLATPAK_JSON_PROP_FLAGS_OPTIONAL = 1 << 0, + FLATPAK_JSON_PROP_FLAGS_STRICT = 1 << 1, + FLATPAK_JSON_PROP_FLAGS_MANDATORY = 1 << 2, +} FlatpakJsonPropFlags; + + +struct _FlatpakJsonProp +{ + const char *name; + gsize offset; + FlatpakJsonPropType type; + gpointer type_data; + gpointer type_data2; + FlatpakJsonPropFlags flags; +}; + +#define FLATPAK_JSON_STRING_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRING } +#define FLATPAK_JSON_MANDATORY_STRING_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRING, 0, 0, FLATPAK_JSON_PROP_FLAGS_MANDATORY } +#define FLATPAK_JSON_INT64_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_INT64 } +#define FLATPAK_JSON_BOOL_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_BOOL } +#define FLATPAK_JSON_STRV_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRV } +#define FLATPAK_JSON_STRMAP_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRMAP } +#define FLATPAK_JSON_BOOLMAP_PROP(_struct, _field, _name) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_BOOLMAP } +#define FLATPAK_JSON_STRUCT_PROP(_struct, _field, _name, _props) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer) _props} +#define FLATPAK_JSON_OPT_STRUCT_PROP(_struct, _field, _name, _props) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer) _props, 0, FLATPAK_JSON_PROP_FLAGS_OPTIONAL} +#define FLATPAK_JSON_STRICT_STRUCT_PROP(_struct, _field, _name, _props) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer) _props, 0, FLATPAK_JSON_PROP_FLAGS_STRICT} +#define FLATPAK_JSON_MANDATORY_STRICT_STRUCT_PROP(_struct, _field, _name, _props) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCT, (gpointer) _props, 0, FLATPAK_JSON_PROP_FLAGS_STRICT | FLATPAK_JSON_PROP_FLAGS_MANDATORY} +#define FLATPAK_JSON_PARENT_PROP(_struct, _field, _props) \ + { "parent", G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_PARENT, (gpointer) _props} +#define FLATPAK_JSON_STRUCTV_PROP(_struct, _field, _name, _props) \ + { _name, G_STRUCT_OFFSET (_struct, _field), FLATPAK_JSON_PROP_TYPE_STRUCTV, (gpointer) _props, (gpointer) sizeof (**((_struct *) 0)->_field) } +#define FLATPAK_JSON_LAST_PROP { NULL } + +G_DECLARE_DERIVABLE_TYPE (FlatpakJson, flatpak_json, FLATPAK, JSON, GObject) + +struct _FlatpakJsonClass +{ + GObjectClass parent_class; + + FlatpakJsonProp *props; + const char *mediatype; +}; + +FlatpakJson *flatpak_json_from_node (JsonNode *node, + GType type, + GError **error); +JsonNode *flatpak_json_to_node (FlatpakJson *self); +FlatpakJson *flatpak_json_from_bytes (GBytes *bytes, + GType type, + GError **error); +FlatpakJson *flatpak_json_from_stream (GInputStream *stream, + GType type, + GCancellable *cancellable, + GError **error); +GBytes *flatpak_json_to_bytes (FlatpakJson *self); + +G_END_DECLS + +#endif /* __FLATPAK_JSON_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-oci-registry.c flatpak-1.0.7/common/flatpak-oci-registry.c --- flatpak-0.11.3/common/flatpak-oci-registry.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-oci-registry.c 2018-10-03 13:41:18.000000000 +0000 @@ -20,7 +20,7 @@ #include "config.h" -#include +#include #include #include @@ -28,34 +28,45 @@ #include #include -#include "flatpak-oci-registry.h" -#include "flatpak-utils.h" +#include "flatpak-oci-registry-private.h" +#include "flatpak-utils-private.h" G_DEFINE_QUARK (flatpak_oci_error, flatpak_oci_error) #define MAX_JSON_SIZE (1024 * 1024) typedef struct archive FlatpakAutoArchiveWrite; -G_DEFINE_AUTOPTR_CLEANUP_FUNC(FlatpakAutoArchiveWrite, archive_write_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakAutoArchiveWrite, archive_write_free) static void flatpak_oci_registry_initable_iface_init (GInitableIface *iface); +/* A FlatpakOciRegistry represents either: + * + * A local directory with a layout corresponding to the OCI image specification - + * we usually use this to store a single image, but it could be used for multiple + * images. + * A remote docker registry. + * + * This code used to support OCI image layouts on remote HTTP servers, but that's not + * really a thing anybody does. It would be inefficient for storing large numbers of + * images, since all versions need to be listed in index.json. + */ struct FlatpakOciRegistry { - GObject parent; + GObject parent; gboolean for_write; gboolean valid; gboolean is_docker; - char *uri; - int tmp_dfd; + char *uri; + int tmp_dfd; /* Local repos */ int dfd; /* Remote repos */ SoupSession *soup_session; - SoupURI *base_uri; + SoupURI *base_uri; }; typedef struct @@ -91,10 +102,10 @@ } static void -flatpak_oci_registry_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +flatpak_oci_registry_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (object); const char *uri; @@ -104,17 +115,20 @@ case PROP_URI: /* Ensure the base uri ends with a / so relative urls work */ uri = g_value_get_string (value); - if (g_str_has_prefix (uri, "/")) + if (g_str_has_suffix (uri, "/")) self->uri = g_strdup (uri); else self->uri = g_strconcat (uri, "/", NULL); break; + case PROP_FOR_WRITE: self->for_write = g_value_get_boolean (value); break; + case PROP_TMP_DFD: self->tmp_dfd = g_value_get_int (value); break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -122,10 +136,10 @@ } static void -flatpak_oci_registry_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +flatpak_oci_registry_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (object); @@ -134,12 +148,15 @@ case PROP_URI: g_value_set_string (value, self->uri); break; + case PROP_FOR_WRITE: g_value_set_boolean (value, self->for_write); break; + case PROP_TMP_DFD: g_value_set_int (value, self->tmp_dfd); break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -186,17 +203,17 @@ } const char * -flatpak_oci_registry_get_uri (FlatpakOciRegistry *self) +flatpak_oci_registry_get_uri (FlatpakOciRegistry *self) { return self->uri; } FlatpakOciRegistry * -flatpak_oci_registry_new (const char *uri, - gboolean for_write, - int tmp_dfd, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_new (const char *uri, + gboolean for_write, + int tmp_dfd, + GCancellable *cancellable, + GError **error) { FlatpakOciRegistry *oci_registry; @@ -211,11 +228,11 @@ } static int -local_open_file (int dfd, - const char *subpath, - struct stat *st_buf, +local_open_file (int dfd, + const char *subpath, + struct stat *st_buf, GCancellable *cancellable, - GError **error) + GError **error) { glnx_autofd int fd = -1; struct stat tmp_st_buf; @@ -249,49 +266,32 @@ } static GBytes * -local_load_file (int dfd, - const char *subpath, - const char *etag, - char **etag_out, +local_load_file (int dfd, + const char *subpath, GCancellable *cancellable, - GError **error) + GError **error) { glnx_autofd int fd = -1; struct stat st_buf; GBytes *bytes; - g_autofree char *current_etag = NULL; fd = local_open_file (dfd, subpath, &st_buf, cancellable, error); if (fd == -1) return NULL; - current_etag = g_strdup_printf ("%lu", st_buf.st_mtime); - - if (etag != NULL && strcmp (current_etag, etag) == 0) - { - g_set_error (error, FLATPAK_OCI_ERROR, FLATPAK_OCI_ERROR_NOT_CHANGED, - "File %s was not changed", subpath); - return NULL; - } - bytes = glnx_fd_readall_bytes (fd, cancellable, error); if (bytes == NULL) return NULL; - if (etag_out) - *etag_out = g_steal_pointer (¤t_etag); - return bytes; } static GBytes * -remote_load_file (SoupSession *soup_session, - SoupURI *base, - const char *subpath, - const char *etag, - char **etag_out, +remote_load_file (SoupSession *soup_session, + SoupURI *base, + const char *subpath, GCancellable *cancellable, - GError **error) + GError **error) { g_autoptr(SoupURI) uri = NULL; g_autoptr(GBytes) bytes = NULL; @@ -307,7 +307,7 @@ uri_s = soup_uri_to_string (uri, FALSE); bytes = flatpak_load_http_uri (soup_session, - uri_s, FLATPAK_HTTP_FLAGS_ACCEPT_OCI, etag, etag_out, + uri_s, FLATPAK_HTTP_FLAGS_ACCEPT_OCI, NULL, NULL, cancellable, error); if (bytes == NULL) @@ -317,17 +317,15 @@ } static GBytes * -flatpak_oci_registry_load_file (FlatpakOciRegistry *self, - const char *subpath, - const char *etag, - char **etag_out, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_load_file (FlatpakOciRegistry *self, + const char *subpath, + GCancellable *cancellable, + GError **error) { if (self->dfd != -1) - return local_load_file (self->dfd, subpath, etag, etag_out, cancellable, error); + return local_load_file (self->dfd, subpath, cancellable, error); else - return remote_load_file (self->soup_session, self->base_uri, subpath, etag, etag_out, cancellable, error); + return remote_load_file (self->soup_session, self->base_uri, subpath, cancellable, error); } static JsonNode * @@ -357,6 +355,7 @@ verify_oci_version (GBytes *oci_layout_bytes, gboolean *not_json, GCancellable *cancellable, GError **error) { const char *version; + g_autoptr(JsonNode) node = NULL; JsonObject *oci_layout; @@ -389,9 +388,9 @@ 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; @@ -434,7 +433,7 @@ return FALSE; } - oci_layout_bytes = local_load_file (dfd, "oci-layout", NULL, NULL, cancellable, &local_error); + oci_layout_bytes = local_load_file (dfd, "oci-layout", cancellable, &local_error); if (oci_layout_bytes == NULL) { if (for_write && g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) @@ -444,7 +443,7 @@ g_clear_error (&local_error); if (!glnx_file_replace_contents_at (dfd, "oci-layout", - (const guchar *)new_layout_data, + (const guchar *) new_layout_data, strlen (new_layout_data), 0, cancellable, error)) @@ -467,12 +466,11 @@ 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; if (for_write) { @@ -490,35 +488,16 @@ 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, ¬_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->is_docker = TRUE; self->base_uri = g_steal_pointer (&baseuri); return TRUE; } static gboolean -flatpak_oci_registry_initable_init (GInitable *initable, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) { FlatpakOciRegistry *self = FLATPAK_OCI_REGISTRY (initable); gboolean res; @@ -547,35 +526,30 @@ } FlatpakOciIndex * -flatpak_oci_registry_load_index (FlatpakOciRegistry *self, - const char *etag, - char **etag_out, +flatpak_oci_registry_load_index (FlatpakOciRegistry *self, GCancellable *cancellable, GError **error) { g_autoptr(GBytes) bytes = NULL; g_autoptr(GError) local_error = NULL; - if (etag_out) - *etag_out = NULL; - g_assert (self->valid); - bytes = flatpak_oci_registry_load_file (self, "index.json", etag, etag_out, cancellable, &local_error); + bytes = flatpak_oci_registry_load_file (self, "index.json", cancellable, &local_error); if (bytes == NULL) { g_propagate_error (error, g_steal_pointer (&local_error)); return NULL; } - return (FlatpakOciIndex *)flatpak_json_from_bytes (bytes, FLATPAK_TYPE_OCI_INDEX, error); + return (FlatpakOciIndex *) flatpak_json_from_bytes (bytes, FLATPAK_TYPE_OCI_INDEX, error); } gboolean -flatpak_oci_registry_save_index (FlatpakOciRegistry *self, - FlatpakOciIndex *index, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_save_index (FlatpakOciRegistry *self, + FlatpakOciIndex *index, + GCancellable *cancellable, + GError **error) { g_autoptr(GBytes) bytes = NULL; @@ -593,13 +567,13 @@ } static gboolean -write_update_checksum (GOutputStream *out, - gconstpointer data, - gsize len, - gsize *out_bytes_written, - GChecksum *checksum, - GCancellable *cancellable, - GError **error) +write_update_checksum (GOutputStream *out, + gconstpointer data, + gsize len, + gsize *out_bytes_written, + GChecksum *checksum, + GCancellable *cancellable, + GError **error) { if (out) { @@ -619,11 +593,11 @@ } static gboolean -splice_update_checksum (GOutputStream *out, - GInputStream *in, - GChecksum *checksum, - GCancellable *cancellable, - GError **error) +splice_update_checksum (GOutputStream *out, + GInputStream *in, + GChecksum *checksum, + GCancellable *cancellable, + GError **error) { g_return_val_if_fail (out != NULL || checksum != NULL, FALSE); @@ -633,7 +607,7 @@ char buf[4096]; do { - if (!g_input_stream_read_all (in, buf, sizeof(buf), &bytes_read, cancellable, error)) + if (!g_input_stream_read_all (in, buf, sizeof (buf), &bytes_read, cancellable, error)) return FALSE; if (!write_update_checksum (out, buf, bytes_read, &bytes_written, checksum, cancellable, error)) @@ -652,10 +626,10 @@ static char * get_digest_subpath (FlatpakOciRegistry *self, - const char *repository, - gboolean is_manifest, - const char *digest, - GError **error) + const char *repository, + gboolean is_manifest, + const char *digest, + GError **error) { g_autoptr(GString) s = g_string_new (""); @@ -678,9 +652,9 @@ if (self->is_docker) { if (is_manifest) - g_string_append (s, "manifests/"); + g_string_append (s, "manifests/"); else - g_string_append (s, "blobs/"); + g_string_append (s, "blobs/"); g_string_append (s, digest); } else @@ -708,8 +682,8 @@ int flatpak_oci_registry_download_blob (FlatpakOciRegistry *self, - const char *repository, - gboolean manifest, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, @@ -757,14 +731,14 @@ return -1; fd = local_open_file (self->tmp_dfd, tmpfile_name, NULL, cancellable, error); - (void)unlinkat (self->tmp_dfd, tmpfile_name, 0); + (void) unlinkat (self->tmp_dfd, tmpfile_name, 0); if (fd == -1) return -1; if (!flatpak_download_http_uri (self->soup_session, uri_s, - FLATPAK_HTTP_FLAGS_ACCEPT_OCI, - out_stream, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI, + out_stream, progress_cb, user_data, cancellable, error)) return -1; @@ -792,16 +766,17 @@ gboolean flatpak_oci_registry_mirror_blob (FlatpakOciRegistry *self, FlatpakOciRegistry *source_registry, - const char *repository, - gboolean manifest, + const char *repository, + gboolean manifest, const char *digest, FlatpakLoadUriProgress progress_cb, gpointer user_data, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { 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; @@ -841,7 +816,7 @@ if (src_fd == -1) return FALSE; - if (glnx_regfile_copy_bytes (src_fd, tmpf.fd, (off_t)-1) < 0) + if (glnx_regfile_copy_bytes (src_fd, tmpf.fd, (off_t) -1) < 0) return glnx_throw_errno_prefix (error, "copyfile"); } else @@ -861,7 +836,7 @@ uri_s = soup_uri_to_string (uri, FALSE); if (!flatpak_download_http_uri (source_registry->soup_session, uri_s, - FLATPAK_HTTP_FLAGS_ACCEPT_OCI, out_stream, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI, out_stream, progress_cb, user_data, cancellable, error)) return FALSE; @@ -893,14 +868,15 @@ } GBytes * -flatpak_oci_registry_load_blob (FlatpakOciRegistry *self, - const char *repository, - gboolean manifest, - const char *digest, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_load_blob (FlatpakOciRegistry *self, + const char *repository, + gboolean manifest, + const char *digest, + GCancellable *cancellable, + GError **error) { g_autofree char *subpath = NULL; + g_autoptr(GBytes) bytes = NULL; g_autofree char *json_checksum = NULL; @@ -910,11 +886,11 @@ if (subpath == NULL) return NULL; - bytes = flatpak_oci_registry_load_file (self, subpath, NULL, NULL, cancellable, error); + bytes = flatpak_oci_registry_load_file (self, subpath, cancellable, error); if (bytes == NULL) return NULL; - json_checksum = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, bytes); + json_checksum = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, bytes); if (strcmp (json_checksum, digest + strlen ("sha256:")) != 0) { @@ -927,10 +903,10 @@ } char * -flatpak_oci_registry_store_blob (FlatpakOciRegistry *self, - GBytes *data, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_store_blob (FlatpakOciRegistry *self, + GBytes *data, + GCancellable *cancellable, + GError **error) { g_autofree char *sha256 = g_compute_checksum_for_bytes (G_CHECKSUM_SHA256, data); g_autofree char *subpath = NULL; @@ -948,10 +924,10 @@ } FlatpakOciDescriptor * -flatpak_oci_registry_store_json (FlatpakOciRegistry *self, - FlatpakJson *json, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_store_json (FlatpakOciRegistry *self, + FlatpakJson *json, + GCancellable *cancellable, + GError **error) { g_autoptr(GBytes) bytes = flatpak_json_to_bytes (json); g_autofree char *digest = NULL; @@ -964,12 +940,12 @@ } FlatpakOciVersioned * -flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, - const char *repository, - const char *digest, - gsize *out_size, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, + const char *repository, + const char *digest, + gsize *out_size, + GCancellable *cancellable, + GError **error) { g_autoptr(GBytes) bytes = NULL; @@ -986,17 +962,17 @@ struct FlatpakOciLayerWriter { - GObject parent; + GObject parent; FlatpakOciRegistry *registry; - GChecksum *uncompressed_checksum; - GChecksum *compressed_checksum; - struct archive *archive; - GZlibCompressor *compressor; - guint64 uncompressed_size; - guint64 compressed_size; - GLnxTmpfile tmpf; + GChecksum *uncompressed_checksum; + GChecksum *compressed_checksum; + struct archive *archive; + GZlibCompressor *compressor; + guint64 uncompressed_size; + guint64 compressed_size; + GLnxTmpfile tmpf; }; typedef struct @@ -1007,7 +983,7 @@ G_DEFINE_TYPE (FlatpakOciLayerWriter, flatpak_oci_layer_writer, G_TYPE_OBJECT) static gboolean -propagate_libarchive_error (GError **error, +propagate_libarchive_error (GError **error, struct archive *a) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, @@ -1067,21 +1043,22 @@ static int flatpak_oci_layer_writer_open_cb (struct archive *archive, - void *client_data) + void *client_data) { return ARCHIVE_OK; } static gssize flatpak_oci_layer_writer_compress (FlatpakOciLayerWriter *self, - const void *buffer, - size_t length, - gboolean at_end) + const void *buffer, + size_t length, + gboolean at_end) { guchar compressed_buffer[8192]; GConverterResult res; gsize total_bytes_read, bytes_read, bytes_written, to_write_len; guchar *to_write; + g_autoptr(GError) local_error = NULL; GConverterFlags flags = 0; bytes_read = 0; @@ -1136,9 +1113,9 @@ static ssize_t flatpak_oci_layer_writer_write_cb (struct archive *archive, - void *client_data, - const void *buffer, - size_t length) + void *client_data, + const void *buffer, + size_t length) { FlatpakOciLayerWriter *self = FLATPAK_OCI_LAYER_WRITER (client_data); @@ -1147,7 +1124,7 @@ static int flatpak_oci_layer_writer_close_cb (struct archive *archive, - void *client_data) + void *client_data) { FlatpakOciLayerWriter *self = FLATPAK_OCI_LAYER_WRITER (client_data); gssize res; @@ -1161,9 +1138,9 @@ } FlatpakOciLayerWriter * -flatpak_oci_registry_write_layer (FlatpakOciRegistry *self, - GCancellable *cancellable, - GError **error) +flatpak_oci_registry_write_layer (FlatpakOciRegistry *self, + GCancellable *cancellable, + GError **error) { g_autoptr(FlatpakOciLayerWriter) oci_layer_writer = NULL; g_autoptr(FlatpakAutoArchiveWrite) a = NULL; @@ -1215,18 +1192,19 @@ oci_layer_writer->archive = g_steal_pointer (&a); /* Transfer ownership of the tmpfile */ - oci_layer_writer->tmpf = tmpf; tmpf.initialized = 0; + oci_layer_writer->tmpf = tmpf; + tmpf.initialized = 0; oci_layer_writer->compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); return g_steal_pointer (&oci_layer_writer); } gboolean -flatpak_oci_layer_writer_close (FlatpakOciLayerWriter *self, - char **uncompressed_digest_out, - FlatpakOciDescriptor **res_out, - GCancellable *cancellable, - GError **error) +flatpak_oci_layer_writer_close (FlatpakOciLayerWriter *self, + char **uncompressed_digest_out, + FlatpakOciDescriptor **res_out, + GCancellable *cancellable, + GError **error) { g_autofree char *path = NULL; @@ -1256,15 +1234,16 @@ } struct archive * -flatpak_oci_layer_writer_get_archive (FlatpakOciLayerWriter *self) +flatpak_oci_layer_writer_get_archive (FlatpakOciLayerWriter *self) { return self->archive; } -typedef struct { - int fd; +typedef struct +{ + int fd; GChecksum *checksum; - char buffer[16*1024]; + char buffer[16 * 1024]; } FlatpakArchiveReadWithChecksum; static int @@ -1291,7 +1270,7 @@ return -1; } - g_checksum_update (data->checksum, (guchar *)data->buffer, bytes_read); + g_checksum_update (data->checksum, (guchar *) data->buffer, bytes_read); return bytes_read; } @@ -1322,9 +1301,9 @@ gboolean flatpak_archive_read_open_fd_with_checksum (struct archive *a, - int fd, - GChecksum *checksum, - GError **error) + int fd, + GChecksum *checksum, + GError **error) { FlatpakArchiveReadWithChecksum *data = g_new0 (FlatpakArchiveReadWithChecksum, 1); @@ -1341,13 +1320,13 @@ return TRUE; } -G_DEFINE_AUTO_CLEANUP_FREE_FUNC(gpgme_data_t, gpgme_data_release, NULL) -G_DEFINE_AUTO_CLEANUP_FREE_FUNC(gpgme_ctx_t, gpgme_release, NULL) -G_DEFINE_AUTO_CLEANUP_FREE_FUNC(gpgme_key_t, gpgme_key_unref, NULL) +G_DEFINE_AUTO_CLEANUP_FREE_FUNC (gpgme_data_t, gpgme_data_release, NULL) +G_DEFINE_AUTO_CLEANUP_FREE_FUNC (gpgme_ctx_t, gpgme_release, NULL) +G_DEFINE_AUTO_CLEANUP_FREE_FUNC (gpgme_key_t, gpgme_key_unref, NULL) static void -flatpak_gpgme_error_to_gio_error (gpgme_error_t gpg_error, - GError **error) +flatpak_gpgme_error_to_gio_error (gpgme_error_t gpg_error, + GError **error) { GIOErrorEnum errcode; @@ -1355,22 +1334,22 @@ switch (gpgme_err_code (gpg_error)) { - /* special case - shouldn't be here */ - case GPG_ERR_NO_ERROR: - g_return_if_reached (); - - /* special case - abort on out-of-memory */ - case GPG_ERR_ENOMEM: - g_error ("%s: out of memory", - gpgme_strsource (gpg_error)); + /* special case - shouldn't be here */ + case GPG_ERR_NO_ERROR: + g_return_if_reached (); + + /* special case - abort on out-of-memory */ + case GPG_ERR_ENOMEM: + g_error ("%s: out of memory", + gpgme_strsource (gpg_error)); - case GPG_ERR_INV_VALUE: - errcode = G_IO_ERROR_INVALID_ARGUMENT; - break; + case GPG_ERR_INV_VALUE: + errcode = G_IO_ERROR_INVALID_ARGUMENT; + break; - default: - errcode = G_IO_ERROR_FAILED; - break; + default: + errcode = G_IO_ERROR_FAILED; + break; } g_set_error (error, G_IO_ERROR, errcode, "%s: error code %d", @@ -1388,98 +1367,127 @@ switch (error->code) { - case G_IO_ERROR_FAILED: - errno = EIO; - break; - case G_IO_ERROR_NOT_FOUND: - errno = ENOENT; - break; - case G_IO_ERROR_EXISTS: - errno = EEXIST; - break; - case G_IO_ERROR_IS_DIRECTORY: - errno = EISDIR; - break; - case G_IO_ERROR_NOT_DIRECTORY: - errno = ENOTDIR; - break; - case G_IO_ERROR_NOT_EMPTY: - errno = ENOTEMPTY; - break; - case G_IO_ERROR_NOT_REGULAR_FILE: - case G_IO_ERROR_NOT_SYMBOLIC_LINK: - case G_IO_ERROR_NOT_MOUNTABLE_FILE: - errno = EBADF; - break; - case G_IO_ERROR_FILENAME_TOO_LONG: - errno = ENAMETOOLONG; - break; - case G_IO_ERROR_INVALID_FILENAME: - errno = EINVAL; - break; - case G_IO_ERROR_TOO_MANY_LINKS: - errno = EMLINK; - break; - case G_IO_ERROR_NO_SPACE: - errno = ENOSPC; - break; - case G_IO_ERROR_INVALID_ARGUMENT: - errno = EINVAL; - break; - case G_IO_ERROR_PERMISSION_DENIED: - errno = EPERM; - break; - case G_IO_ERROR_NOT_SUPPORTED: - errno = ENOTSUP; - break; - case G_IO_ERROR_NOT_MOUNTED: - errno = ENOENT; - break; - case G_IO_ERROR_ALREADY_MOUNTED: - errno = EALREADY; - break; - case G_IO_ERROR_CLOSED: - errno = EBADF; - break; - case G_IO_ERROR_CANCELLED: - errno = EINTR; - break; - case G_IO_ERROR_PENDING: - errno = EALREADY; - break; - case G_IO_ERROR_READ_ONLY: - errno = EACCES; - break; - case G_IO_ERROR_CANT_CREATE_BACKUP: - errno = EIO; - break; - case G_IO_ERROR_WRONG_ETAG: - errno = EACCES; - break; - case G_IO_ERROR_TIMED_OUT: - errno = EIO; - break; - case G_IO_ERROR_WOULD_RECURSE: - errno = ELOOP; - break; - case G_IO_ERROR_BUSY: - errno = EBUSY; - break; - case G_IO_ERROR_WOULD_BLOCK: - errno = EWOULDBLOCK; - break; - case G_IO_ERROR_HOST_NOT_FOUND: - errno = EHOSTDOWN; - break; - case G_IO_ERROR_WOULD_MERGE: - errno = EIO; - break; - case G_IO_ERROR_FAILED_HANDLED: - errno = 0; - break; - default: - errno = EIO; - break; + case G_IO_ERROR_FAILED: + errno = EIO; + break; + + case G_IO_ERROR_NOT_FOUND: + errno = ENOENT; + break; + + case G_IO_ERROR_EXISTS: + errno = EEXIST; + break; + + case G_IO_ERROR_IS_DIRECTORY: + errno = EISDIR; + break; + + case G_IO_ERROR_NOT_DIRECTORY: + errno = ENOTDIR; + break; + + case G_IO_ERROR_NOT_EMPTY: + errno = ENOTEMPTY; + break; + + case G_IO_ERROR_NOT_REGULAR_FILE: + case G_IO_ERROR_NOT_SYMBOLIC_LINK: + case G_IO_ERROR_NOT_MOUNTABLE_FILE: + errno = EBADF; + break; + + case G_IO_ERROR_FILENAME_TOO_LONG: + errno = ENAMETOOLONG; + break; + + case G_IO_ERROR_INVALID_FILENAME: + errno = EINVAL; + break; + + case G_IO_ERROR_TOO_MANY_LINKS: + errno = EMLINK; + break; + + case G_IO_ERROR_NO_SPACE: + errno = ENOSPC; + break; + + case G_IO_ERROR_INVALID_ARGUMENT: + errno = EINVAL; + break; + + case G_IO_ERROR_PERMISSION_DENIED: + errno = EPERM; + break; + + case G_IO_ERROR_NOT_SUPPORTED: + errno = ENOTSUP; + break; + + case G_IO_ERROR_NOT_MOUNTED: + errno = ENOENT; + break; + + case G_IO_ERROR_ALREADY_MOUNTED: + errno = EALREADY; + break; + + case G_IO_ERROR_CLOSED: + errno = EBADF; + break; + + case G_IO_ERROR_CANCELLED: + errno = EINTR; + break; + + case G_IO_ERROR_PENDING: + errno = EALREADY; + break; + + case G_IO_ERROR_READ_ONLY: + errno = EACCES; + break; + + case G_IO_ERROR_CANT_CREATE_BACKUP: + errno = EIO; + break; + + case G_IO_ERROR_WRONG_ETAG: + errno = EACCES; + break; + + case G_IO_ERROR_TIMED_OUT: + errno = EIO; + break; + + case G_IO_ERROR_WOULD_RECURSE: + errno = ELOOP; + break; + + case G_IO_ERROR_BUSY: + errno = EBUSY; + break; + + case G_IO_ERROR_WOULD_BLOCK: + errno = EWOULDBLOCK; + break; + + case G_IO_ERROR_HOST_NOT_FOUND: + errno = EHOSTDOWN; + break; + + case G_IO_ERROR_WOULD_MERGE: + errno = EIO; + break; + + case G_IO_ERROR_FAILED_HANDLED: + errno = 0; + break; + + default: + errno = EIO; + break; } } @@ -1520,24 +1528,28 @@ g_return_val_if_fail (G_IS_INPUT_STREAM (stream) || G_IS_OUTPUT_STREAM (stream), -1); - if (!G_IS_SEEKABLE (stream)) { - errno = EOPNOTSUPP; - goto out; - } + if (!G_IS_SEEKABLE (stream)) + { + errno = EOPNOTSUPP; + goto out; + } switch (whence) { - case SEEK_SET: - seek_type = G_SEEK_SET; - break; - case SEEK_CUR: - seek_type = G_SEEK_CUR; - break; - case SEEK_END: - seek_type = G_SEEK_END; - break; - default: - g_assert_not_reached (); + case SEEK_SET: + seek_type = G_SEEK_SET; + break; + + case SEEK_CUR: + seek_type = G_SEEK_CUR; + break; + + case SEEK_END: + seek_type = G_SEEK_END; + break; + + default: + g_assert_not_reached (); } seekable = G_SEEKABLE (stream); @@ -1598,9 +1610,10 @@ static gpgme_ctx_t flatpak_gpgme_new_ctx (const char *homedir, - GError **error) + GError **error) { gpgme_error_t err; + g_auto(gpgme_ctx_t) context = NULL; if ((err = gpgme_new (&context)) != GPG_ERR_NO_ERROR) @@ -1630,10 +1643,10 @@ } GBytes * -flatpak_oci_sign_data (GBytes *data, +flatpak_oci_sign_data (GBytes *data, const gchar **key_ids, - const char *homedir, - GError **error) + const char *homedir, + GError **error) { g_auto(GLnxTmpfile) tmpf = { 0 }; g_autoptr(GOutputStream) tmp_signature_output = NULL; @@ -1662,20 +1675,23 @@ err = gpgme_get_key (context, key_ids[i], &key, 1); if (gpgme_err_code (err) == GPG_ERR_EOF) { - flatpak_fail (error,"No gpg key found with ID %s (homedir: %s)", key_ids[i], - homedir ? homedir : ""); + flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, + _("No gpg key found with ID %s (homedir: %s)"), + key_ids[i], homedir ? homedir : ""); return NULL; } else if (err != GPG_ERR_NO_ERROR) { - flatpak_fail (error, "Unable to lookup key ID %s: %d)", key_ids[i], err); + flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, + _("Unable to lookup key ID %s: %d)"), + key_ids[i], err); return NULL; } /* Add the key to the context as a signer */ if ((err = gpgme_signers_add (context, key)) != GPG_ERR_NO_ERROR) { - flatpak_fail (error, "Error signing commit: %d", err); + flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("Error signing commit: %d"), err); return NULL; } } @@ -1740,7 +1756,7 @@ flatpak_fail (error, "Can't seek in gpg plain text"); return NULL; } - while ((ret = gpgme_data_read (buffer, buf, sizeof(buf)-1)) > 0) + while ((ret = gpgme_data_read (buffer, buf, sizeof (buf) - 1)) > 0) g_string_append_len (res, buf, ret); if (ret < 0) { @@ -1752,15 +1768,16 @@ } static gboolean -flatpak_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx, - GLnxTmpDir *tmpdir, - OstreeRepo *repo, - const char *remote_name, - GCancellable *cancellable, - GError **error) +flatpak_gpgme_ctx_tmp_home_dir (gpgme_ctx_t gpgme_ctx, + GLnxTmpDir *tmpdir, + OstreeRepo *repo, + const char *remote_name, + GCancellable *cancellable, + GError **error) { g_autofree char *tmp_home_dir_pattern = NULL; gpgme_error_t gpg_error; + g_autoptr(GFile) keyring_file = NULL; g_autofree char *keyring_name = NULL; @@ -1805,11 +1822,12 @@ FlatpakOciSignature * flatpak_oci_verify_signature (OstreeRepo *repo, const char *remote_name, - GBytes *signed_data, - GError **error) + GBytes *signed_data, + GError **error) { gpgme_ctx_t context; gpgme_error_t gpg_error; + g_auto(gpgme_data_t) signed_data_buffer = NULL; g_auto(gpgme_data_t) plain_buffer = NULL; gpgme_verify_result_t vresult; @@ -1882,7 +1900,7 @@ if (json == NULL) return FALSE; - return g_steal_pointer (&json); + return (FlatpakOciSignature *) g_steal_pointer (&json); } static const char * @@ -1891,8 +1909,9 @@ return g_hash_table_lookup (img->annotations, "org.flatpak.ref"); } -typedef struct { - char *repository; +typedef struct +{ + char *repository; FlatpakOciIndexImage *image; } ImageInfo; @@ -1906,17 +1925,137 @@ return g_strcmp0 (a_ref, b_ref); } -GVariant * -flatpak_oci_index_fetch_summary (SoupSession *soup_session, - const char *uri, - const char *etag, +gboolean +flatpak_oci_index_ensure_cached (SoupSession *soup_session, + const char *uri, + GFile *index, + char **index_uri_out, GCancellable *cancellable, - GError **error) + GError **error) +{ + g_autofree char *index_path = g_file_get_path (index); + g_autoptr(SoupURI) base_uri = NULL; + g_autoptr(SoupURI) query_uri = NULL; + g_autofree char *query_uri_s = NULL; + g_autoptr(GString) path = NULL; + g_autofree char *tag = NULL; + const char *oci_arch = NULL; + gboolean success = FALSE; + g_autoptr(GError) local_error = NULL; + + if (!g_str_has_prefix (uri, "oci+http:") && !g_str_has_prefix (uri, "oci+https:")) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + "OCI Index URI %s does not start with oci+http(s)://", uri); + return FALSE; + } + + base_uri = soup_uri_new (uri + 4); + if (base_uri == NULL) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + "Cannot parse index url %s", uri); + return FALSE; + } + + path = g_string_new (soup_uri_get_path (base_uri)); + + /* Append /index/static or /static to the path. + */ + if (!g_str_has_suffix (path->str, "/")) + g_string_append_c (path, '/'); + + if (!g_str_has_suffix (path->str, "/index/")) + g_string_append (path, "index/"); + + g_string_append (path, "static"); + + soup_uri_set_path (base_uri, path->str); + + /* The fragment of the URI defines a tag to look for; if absent + * or empty, we use 'latest' + */ + tag = g_strdup (soup_uri_get_fragment (base_uri)); + if (tag == NULL || tag[0] == '\0') + { + g_clear_pointer (&tag, g_free); + tag = g_strdup ("latest"); + } + soup_uri_set_fragment (base_uri, NULL); + + query_uri = soup_uri_copy (base_uri); + + oci_arch = flatpak_arch_to_oci_arch (flatpak_get_arch ()); + + soup_uri_set_query_from_fields (query_uri, + "annotation:org.flatpak.ref:exists", "1", + "architecture", oci_arch, + "os", "linux", + "tag", tag, + NULL); + query_uri_s = soup_uri_to_string (query_uri, FALSE); + + success = flatpak_cache_http_uri (soup_session, + query_uri_s, + FLATPAK_HTTP_FLAGS_STORE_COMPRESSED, + AT_FDCWD, index_path, + NULL, NULL, + cancellable, &local_error); + + if (success || + g_error_matches (local_error, FLATPAK_OCI_ERROR, FLATPAK_OCI_ERROR_NOT_CHANGED)) + { + if (index_uri_out) + *index_uri_out = soup_uri_to_string (base_uri, FALSE); + } + else + { + if (index_uri_out) + *index_uri_out = NULL; + } + + if (!success) + g_propagate_error (error, g_steal_pointer (&local_error)); + + return success; +} + +static FlatpakOciIndexResponse * +load_oci_index (GFile *index, + GCancellable *cancellable, + GError **error) { - g_autoptr(GBytes) res = NULL; - g_autofree char *new_etag = NULL; + g_autoptr(GFileInputStream) in = NULL; + g_autoptr(GZlibDecompressor) decompressor = NULL; + g_autoptr(GInputStream) converter = NULL; + g_autoptr(GError) local_error = NULL; g_autoptr(FlatpakJson) json = NULL; - FlatpakOciIndexResponse *response; + + in = g_file_read (index, cancellable, error); + if (in == NULL) + return FALSE; + + decompressor = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); + converter = g_converter_input_stream_new (G_INPUT_STREAM (in), G_CONVERTER (decompressor)); + + json = flatpak_json_from_stream (G_INPUT_STREAM (converter), FLATPAK_TYPE_OCI_INDEX_RESPONSE, + cancellable, error); + if (json == NULL) + return NULL; + + if (!g_input_stream_close (G_INPUT_STREAM (in), cancellable, error)) + g_warning ("Error closing http stream: %s", local_error->message); + + return (FlatpakOciIndexResponse *) g_steal_pointer (&json); +} + +GVariant * +flatpak_oci_index_make_summary (GFile *index, + const char *index_uri, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakOciIndexResponse) response = NULL; g_autoptr(SoupURI) registry_uri = NULL; g_autofree char *registry_uri_s = NULL; int i; @@ -1926,39 +2065,13 @@ 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) + response = load_oci_index (index, cancellable, error); + if (!response) return NULL; - json = flatpak_json_from_bytes (res, FLATPAK_TYPE_OCI_INDEX_RESPONSE, error); - if (json == NULL) - return NULL; - - response = (FlatpakOciIndexResponse *)json; - + soup_uri = soup_uri_new (index_uri); registry_uri = soup_uri_new_with_base (soup_uri, response->registry); registry_uri_s = soup_uri_to_string (registry_uri, FALSE); @@ -1969,10 +2082,10 @@ 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); - } + { + info.image = r->images[j]; + g_array_append_val (images, info); + } for (j = 0; r->lists != NULL && r->lists[j] != NULL; j++) { @@ -1980,10 +2093,10 @@ int k; for (k = 0; list->images != NULL && list->images[k] != NULL; k++) - { - info.image = list->images[k]; - g_array_append_val (images, info); - } + { + info.image = list->images[k]; + g_array_append_val (images, info); + } } } @@ -1992,7 +2105,7 @@ 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); + g_array_sort (images, (GCompareFunc) compare_image_by_ref); for (i = 0; i < images->len; i++) { @@ -2033,11 +2146,11 @@ 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_new_string (info->repository)); g_variant_builder_add_value (refs_builder, g_variant_new ("(s(t@ay@a{sv}))", ref, - 0, + (guint64)0, ostree_checksum_to_bytes_v (fake_commit), g_variant_builder_end (ref_metadata_builder))); g_variant_builder_add (ref_data_builder, "{s(tts)}", @@ -2049,10 +2162,6 @@ 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)); @@ -2066,50 +2175,269 @@ 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) +static gboolean +add_icon_image (SoupSession *soup_session, + const char *index_uri, + int icons_dfd, + GHashTable *used_icons, + const char *subdir, + const char *id, + const char *icon_data, + 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; + g_autofree char *icon_name = g_strconcat (id, ".png", NULL); + g_autofree char *icon_path = g_build_filename (subdir, icon_name, NULL); + + /* Create the destination directory */ + + if (!glnx_shutil_mkdir_p_at (icons_dfd, subdir, 0755, cancellable, error)) + return FALSE; + + if (g_str_has_prefix (icon_data, "data:")) + { + if (g_str_has_prefix (icon_data, "data:image/png;base64,")) + { + const char *base64_data = icon_data + strlen ("data:image/png;base64,"); + gsize decoded_size; + g_autofree guint8 *decoded = g_base64_decode (base64_data, &decoded_size); + + if (!glnx_file_replace_contents_at (icons_dfd, icon_path, + decoded, decoded_size, + 0 /* flags */, cancellable, error)) + return FALSE; + + g_hash_table_replace (used_icons, g_steal_pointer (&icon_path), GUINT_TO_POINTER (1)); + + return TRUE; + } + else + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + "Data URI for icon has an unsupported type"); + return FALSE; + } + } + else + { + g_autoptr(SoupURI) base_uri = soup_uri_new (index_uri); + g_autoptr(SoupURI) icon_uri = soup_uri_new_with_base (base_uri, icon_data); + g_autofree char *icon_uri_s = soup_uri_to_string (icon_uri, FALSE); + + if (!flatpak_cache_http_uri (soup_session, icon_uri_s, + 0 /* flags */, + icons_dfd, icon_path, + NULL, NULL, + cancellable, error)) + return FALSE; + + g_hash_table_replace (used_icons, g_steal_pointer (&icon_path), GUINT_TO_POINTER (1)); + + return TRUE; + } +} - FlatpakOciIndexResponse *response; +static void +add_image_to_appstream (SoupSession *soup_session, + const char *index_uri, + FlatpakXml *appstream_root, + int icons_dfd, + GHashTable *used_icons, + FlatpakOciIndexRepository *repository, + FlatpakOciIndexImage *image, + GCancellable *cancellable) +{ + g_autoptr(GInputStream) in = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(FlatpakXml) xml_root = NULL; + g_auto(GStrv) ref_parts = NULL; + const char *ref; + const char *id = NULL; + FlatpakXml *source_components; + FlatpakXml *dest_components; + FlatpakXml *component; + FlatpakXml *prev_component; + const char *appdata; 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, '/'); + static struct + { + const char *annotation; + const char *subdir; + } icon_sizes[] = { + { "org.freedesktop.appstream.icon-64", "64x64" }, + { "org.freedesktop.appstream.icon-128", "128x128" }, + }; - if (!g_str_has_suffix (uri, "/index/")) - g_string_append (index_uri, "index/"); + ref = g_hash_table_lookup (image->annotations, "org.flatpak.ref"); + if (!ref) + return; - 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; + ref_parts = g_strsplit (ref, "/", -1); + if (g_strv_length (ref_parts) != 4 || strcmp (ref_parts[0], "app") != 0) + return; - json = flatpak_json_from_bytes (res, FLATPAK_TYPE_OCI_INDEX_RESPONSE, error); - if (json == NULL) + id = ref_parts[1]; + + appdata = g_hash_table_lookup (image->annotations, "org.freedesktop.appstream.appdata"); + if (!appdata) + return; + + in = g_memory_input_stream_new_from_data (appdata, -1, NULL); + + xml_root = flatpak_xml_parse (in, FALSE, cancellable, &error); + if (xml_root == NULL) + { + g_print ("%s: Failed to parse appdata annotation: %s\n", + repository->name, + error->message); + return; + } + + if (xml_root->first_child == NULL || + xml_root->first_child->next_sibling != NULL || + g_strcmp0 (xml_root->first_child->element_name, "components") != 0) + { + return; + } + + source_components = xml_root->first_child; + dest_components = appstream_root->first_child; + + component = source_components->first_child; + prev_component = NULL; + while (component != NULL) + { + FlatpakXml *next = component->next_sibling; + + if (g_strcmp0 (component->element_name, "component") == 0) + { + flatpak_xml_add (dest_components, + flatpak_xml_unlink (component, prev_component)); + } + else + { + prev_component = component; + } + + component = next; + } + + for (i = 0; i < G_N_ELEMENTS (icon_sizes); i++) + { + const char *icon_data = g_hash_table_lookup (image->annotations, + icon_sizes[i].annotation); + if (icon_data) + { + if (!add_icon_image (soup_session, + index_uri, + icons_dfd, + used_icons, + icon_sizes[i].subdir, id, icon_data, + cancellable, &error)) + { + g_print ("%s: Failed to add %s icon: %s\n", + repository->name, + icon_sizes[i].subdir, + error->message); + g_clear_error (&error); + } + } + } +} + +static gboolean +clean_unused_icons_recurse (int icons_dfd, + const char *dirpath, + GHashTable *used_icons, + gboolean *any_found_parent, + GCancellable *cancellable, + GError **error) +{ + GLnxDirFdIterator iter = { 0, }; + gboolean any_found = FALSE; + + if (!glnx_dirfd_iterator_init_at (icons_dfd, + dirpath ? dirpath : ".", + FALSE, &iter, error)) return FALSE; - response = (FlatpakOciIndexResponse *)json; + while (TRUE) + { + struct dirent *out_dent; + g_autofree char *subpath = NULL; + + if (!glnx_dirfd_iterator_next_dent (&iter, &out_dent, cancellable, error)) + return FALSE; + + if (out_dent == NULL) + break; + + if (dirpath) + subpath = g_build_filename (dirpath, out_dent->d_name, NULL); + else + subpath = g_strdup (out_dent->d_name); + + if (out_dent->d_type == DT_DIR) + clean_unused_icons_recurse (icons_dfd, subpath, used_icons, &any_found, cancellable, error); + else if (g_hash_table_lookup (used_icons, subpath) == NULL) + { + if (!glnx_unlinkat (icons_dfd, subpath, 0, error)) + return FALSE; + } + else + any_found = TRUE; + } + + if (any_found) + { + if (any_found_parent) + *any_found_parent = TRUE; + } + else + { + if (dirpath) /* Don't remove the toplevel icons/ directory */ + if (!glnx_unlinkat (icons_dfd, dirpath, AT_REMOVEDIR, error)) + return FALSE; + } + + return TRUE; +} + +static gboolean +clean_unused_icons (int icons_dfd, + GHashTable *used_icons, + GCancellable *cancellable, + GError **error) +{ + return clean_unused_icons_recurse (icons_dfd, NULL, used_icons, NULL, cancellable, error); +} + +GBytes * +flatpak_oci_index_make_appstream (SoupSession *soup_session, + GFile *index, + const char *index_uri, + const char *arch, + int icons_dfd, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(FlatpakOciIndexResponse) response = NULL; + g_autoptr(FlatpakXml) appstream_root = NULL; + g_autoptr(GBytes) bytes = NULL; + g_autoptr(GHashTable) used_icons = NULL; + int i; + + const char *oci_arch = flatpak_arch_to_oci_arch (arch); + + response = load_oci_index (index, cancellable, error); + if (!response) + return NULL; + + used_icons = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, NULL); + + appstream_root = flatpak_appstream_xml_new (); for (i = 0; response->results != NULL && response->results[i] != NULL; i++) { @@ -2117,14 +2445,15 @@ 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; - } + { + FlatpakOciIndexImage *image = r->images[j]; + if (g_strcmp0 (image->architecture, oci_arch) == 0) + add_image_to_appstream (soup_session, + index_uri, + appstream_root, icons_dfd, used_icons, + r, image, + cancellable); + } for (j = 0; r->lists != NULL && r->lists[j] != NULL; j++) { @@ -2132,16 +2461,24 @@ 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; - } + { + FlatpakOciIndexImage *image = list->images[k]; + if (g_strcmp0 (image->architecture, oci_arch) == 0) + add_image_to_appstream (soup_session, + index_uri, + appstream_root, icons_dfd, used_icons, + r, image, + cancellable); + } } } - return flatpak_fail (error, "No matching image for %s\n", ref); + if (!flatpak_appstream_xml_root_to_data (appstream_root, + &bytes, NULL, error)) + return NULL; + + if (!clean_unused_icons (icons_dfd, used_icons, cancellable, error)) + return FALSE; + + return g_steal_pointer (&bytes); } diff -Nru flatpak-0.11.3/common/flatpak-oci-registry.h flatpak-1.0.7/common/flatpak-oci-registry.h --- flatpak-0.11.3/common/flatpak-oci-registry.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-oci-registry.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,149 +0,0 @@ -/* - * Copyright © 2016 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_OCI_REGISTRY_H__ -#define __FLATPAK_OCI_REGISTRY_H__ - -#include "libglnx/libglnx.h" - -#include -#include -#include -#include "flatpak-json-oci.h" -#include "flatpak-utils.h" - -#define FLATPAK_TYPE_OCI_REGISTRY flatpak_oci_registry_get_type () -#define FLATPAK_OCI_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_OCI_REGISTRY, FlatpakOciRegistry)) -#define FLATPAK_IS_OCI_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_OCI_REGISTRY)) - -GType flatpak_oci_registry_get_type (void); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciRegistry, g_object_unref) - -#define FLATPAK_TYPE_OCI_LAYER_WRITER flatpak_oci_layer_writer_get_type () -#define FLATPAK_OCI_LAYER_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_OCI_LAYER_WRITER, FlatpakOciLayerWriter)) -#define FLATPAK_IS_OCI_LAYER_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_OCI_LAYER_WRITER)) - -GType flatpak_oci_layer_writer_get_type (void); - -typedef enum { - FLATPAK_OCI_ERROR_NOT_CHANGED = 0, -} FlatpakOciErrorEnum; - -#define FLATPAK_OCI_ERROR flatpak_oci_error_quark () - -FLATPAK_EXTERN GQuark flatpak_oci_error_quark (void); - -typedef struct FlatpakOciLayerWriter FlatpakOciLayerWriter; - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciLayerWriter, g_object_unref) - -FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, - gboolean for_write, - int tmp_dfd, - GCancellable *cancellable, - GError **error); -const char * flatpak_oci_registry_get_uri (FlatpakOciRegistry *self); -FlatpakOciIndex * flatpak_oci_registry_load_index (FlatpakOciRegistry *self, - const char *etag, - char **etag_out, - GCancellable *cancellable, - GError **error); -gboolean flatpak_oci_registry_save_index (FlatpakOciRegistry *self, - FlatpakOciIndex *index, - 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); -char * flatpak_oci_registry_store_blob (FlatpakOciRegistry *self, - GBytes *data, - GCancellable *cancellable, - 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, - GCancellable *cancellable, - GError **error); -FlatpakOciDescriptor * flatpak_oci_registry_store_json (FlatpakOciRegistry *self, - FlatpakJson *json, - GCancellable *cancellable, - GError **error); -FlatpakOciVersioned * flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, - const char *repository, - const char *digest, - gsize *out_size, - GCancellable *cancellable, - GError **error); -FlatpakOciLayerWriter *flatpak_oci_registry_write_layer (FlatpakOciRegistry *self, - GCancellable *cancellable, - GError **error); - -struct archive *flatpak_oci_layer_writer_get_archive (FlatpakOciLayerWriter *self); -gboolean flatpak_oci_layer_writer_close (FlatpakOciLayerWriter *self, - char **uncompressed_digest_out, - FlatpakOciDescriptor **res_out, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_archive_read_open_fd_with_checksum (struct archive *a, - int fd, - GChecksum *checksum, - GError **error); - -GBytes *flatpak_oci_sign_data (GBytes *data, - const gchar **okey_ids, - const char *homedir, - GError **error); - -FlatpakOciSignature *flatpak_oci_verify_signature (OstreeRepo *repo, - const char *remote_name, - 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 -Nru flatpak-0.11.3/common/flatpak-oci-registry-private.h flatpak-1.0.7/common/flatpak-oci-registry-private.h --- flatpak-0.11.3/common/flatpak-oci-registry-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-oci-registry-private.h 2018-08-09 13:38:21.000000000 +0000 @@ -0,0 +1,154 @@ +/* + * Copyright © 2016 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_OCI_REGISTRY_H__ +#define __FLATPAK_OCI_REGISTRY_H__ + +#include "libglnx/libglnx.h" + +#include +#include +#include +#include "flatpak-json-oci-private.h" +#include "flatpak-utils-private.h" + +#define FLATPAK_TYPE_OCI_REGISTRY flatpak_oci_registry_get_type () +#define FLATPAK_OCI_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_OCI_REGISTRY, FlatpakOciRegistry)) +#define FLATPAK_IS_OCI_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_OCI_REGISTRY)) + +GType flatpak_oci_registry_get_type (void); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciRegistry, g_object_unref) + +#define FLATPAK_TYPE_OCI_LAYER_WRITER flatpak_oci_layer_writer_get_type () +#define FLATPAK_OCI_LAYER_WRITER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_OCI_LAYER_WRITER, FlatpakOciLayerWriter)) +#define FLATPAK_IS_OCI_LAYER_WRITER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_OCI_LAYER_WRITER)) + +GType flatpak_oci_layer_writer_get_type (void); + +typedef enum { + FLATPAK_OCI_ERROR_NOT_CHANGED = 0, +} FlatpakOciErrorEnum; + +#define FLATPAK_OCI_ERROR flatpak_oci_error_quark () + +FLATPAK_EXTERN GQuark flatpak_oci_error_quark (void); + +typedef struct FlatpakOciLayerWriter FlatpakOciLayerWriter; + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakOciLayerWriter, g_object_unref) + +FlatpakOciRegistry * flatpak_oci_registry_new (const char *uri, + gboolean for_write, + int tmp_dfd, + GCancellable * cancellable, + GError **error); +const char * flatpak_oci_registry_get_uri (FlatpakOciRegistry *self); +FlatpakOciIndex * flatpak_oci_registry_load_index (FlatpakOciRegistry *self, + GCancellable *cancellable, + GError **error); +gboolean flatpak_oci_registry_save_index (FlatpakOciRegistry *self, + FlatpakOciIndex *index, + 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); +char * flatpak_oci_registry_store_blob (FlatpakOciRegistry *self, + GBytes *data, + GCancellable *cancellable, + 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, + GCancellable *cancellable, + GError **error); +FlatpakOciDescriptor * flatpak_oci_registry_store_json (FlatpakOciRegistry *self, + FlatpakJson *json, + GCancellable *cancellable, + GError **error); +FlatpakOciVersioned * flatpak_oci_registry_load_versioned (FlatpakOciRegistry *self, + const char *repository, + const char *digest, + gsize *out_size, + GCancellable *cancellable, + GError **error); +FlatpakOciLayerWriter *flatpak_oci_registry_write_layer (FlatpakOciRegistry *self, + GCancellable *cancellable, + GError **error); + +struct archive *flatpak_oci_layer_writer_get_archive (FlatpakOciLayerWriter *self); +gboolean flatpak_oci_layer_writer_close (FlatpakOciLayerWriter *self, + char **uncompressed_digest_out, + FlatpakOciDescriptor **res_out, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_archive_read_open_fd_with_checksum (struct archive *a, + int fd, + GChecksum *checksum, + GError **error); + +GBytes *flatpak_oci_sign_data (GBytes *data, + const gchar **okey_ids, + const char *homedir, + GError **error); + +FlatpakOciSignature *flatpak_oci_verify_signature (OstreeRepo *repo, + const char *remote_name, + GBytes *signature, + GError **error); + +gboolean flatpak_oci_index_ensure_cached (SoupSession *soup_session, + const char *uri, + GFile *index, + char **index_uri_out, + GCancellable *cancellable, + GError **error); + +GVariant *flatpak_oci_index_make_summary (GFile *index, + const char *index_uri, + GCancellable *cancellable, + GError **error); + +GBytes *flatpak_oci_index_make_appstream (SoupSession *soup_session, + GFile *index, + const char *index_uri, + const char *arch, + int icons_dfd, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_OCI_REGISTRY_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-portal-error.h flatpak-1.0.7/common/flatpak-portal-error.h --- flatpak-0.11.3/common/flatpak-portal-error.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-portal-error.h 2018-09-12 08:41:11.000000000 +0000 @@ -22,12 +22,23 @@ #ifndef FLATPAK_PORTAL_ERROR_H #define FLATPAK_PORTAL_ERROR_H +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + #include G_BEGIN_DECLS /** - * XdpErrorEnum: + * FlatpakPortalError: + * @FLATPAK_PORTAL_ERROR_FAILED: General portal failure + * @FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT: An argument was invalid + * @FLATPAK_PORTAL_ERROR_NOT_FOUND: The object was not fount + * @FLATPAK_PORTAL_ERROR_EXISTS: The object already exists + * @FLATPAK_PORTAL_ERROR_NOT_ALLOWED: The call was not allowed + * @FLATPAK_PORTAL_ERROR_CANCELLED: The call was cancelled by the user + * @FLATPAK_PORTAL_ERROR_WINDOW_DESTROYED: The window was destroyed by the user */ typedef enum { FLATPAK_PORTAL_ERROR_FAILED = 0, @@ -37,9 +48,14 @@ FLATPAK_PORTAL_ERROR_NOT_ALLOWED, FLATPAK_PORTAL_ERROR_CANCELLED, FLATPAK_PORTAL_ERROR_WINDOW_DESTROYED, -} FlatpakErrorEnum; +} FlatpakPortalError; +/** + * FLATPAK_PORTAL_ERROR: + * + * The error domain for #FlatpakPortalError errors. + */ #define FLATPAK_PORTAL_ERROR flatpak_portal_error_quark () FLATPAK_EXTERN GQuark flatpak_portal_error_quark (void); diff -Nru flatpak-0.11.3/common/flatpak-ref.c flatpak-1.0.7/common/flatpak-ref.c --- flatpak-0.11.3/common/flatpak-ref.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-ref.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,399 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-ref.h" +#include "flatpak-enum-types.h" + +/** + * SECTION:flatpak-ref + * @Title: FlatpakRef + * @Short_description: Application reference + * + * Currently Flatpak manages two types of binary artifacts: applications, and + * runtimes. Applications contain a program that desktop users can run, while + * runtimes contain only libraries and data. An FlatpakRef object (or short: ref) + * can refer to either of these. + * + * Both applications and runtimes are identified by a 4-tuple of strings: kind, + * name, arch and branch, e.g. app/org.gnome.evince/x86_64/master. The functions + * flatpak_ref_parse() and flatpak_ref_format_ref() can be used to convert + * FlatpakRef objects into this string representation and back. + * + * FlatpakRef objects are immutable and can be passed freely between threads. + * + * To uniquely identify a particular version of an application or runtime, you + * need a commit. + * + * The subclasses #FlatpakInstalledRef and #FlatpakRemoteRef provide more information + * for artifacts that are locally installed or available from a remote repository. + */ +typedef struct _FlatpakRefPrivate FlatpakRefPrivate; + +struct _FlatpakRefPrivate +{ + char *name; + char *arch; + char *branch; + char *commit; + FlatpakRefKind kind; + char *collection_id; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRef, flatpak_ref, G_TYPE_OBJECT) + +enum { + PROP_0, + + PROP_NAME, + PROP_ARCH, + PROP_BRANCH, + PROP_COMMIT, + PROP_KIND, + PROP_COLLECTION_ID, +}; + +static void +flatpak_ref_finalize (GObject *object) +{ + FlatpakRef *self = FLATPAK_REF (object); + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + g_free (priv->name); + g_free (priv->arch); + g_free (priv->branch); + g_free (priv->commit); + + G_OBJECT_CLASS (flatpak_ref_parent_class)->finalize (object); +} + +static void +flatpak_ref_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakRef *self = FLATPAK_REF (object); + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_NAME: + g_clear_pointer (&priv->name, g_free); + priv->name = g_value_dup_string (value); + break; + + case PROP_ARCH: + g_clear_pointer (&priv->arch, g_free); + priv->arch = g_value_dup_string (value); + break; + + case PROP_BRANCH: + g_clear_pointer (&priv->branch, g_free); + priv->branch = g_value_dup_string (value); + break; + + case PROP_COMMIT: + g_clear_pointer (&priv->commit, g_free); + priv->commit = g_value_dup_string (value); + break; + + case PROP_KIND: + priv->kind = g_value_get_enum (value); + break; + + case PROP_COLLECTION_ID: + g_clear_pointer (&priv->collection_id, g_free); + priv->collection_id = g_value_dup_string (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_ref_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakRef *self = FLATPAK_REF (object); + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + + case PROP_ARCH: + g_value_set_string (value, priv->arch); + break; + + case PROP_BRANCH: + g_value_set_string (value, priv->branch); + break; + + case PROP_COMMIT: + g_value_set_string (value, priv->commit); + break; + + case PROP_KIND: + g_value_set_enum (value, priv->kind); + break; + + case PROP_COLLECTION_ID: + g_value_set_string (value, priv->collection_id); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_ref_class_init (FlatpakRefClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_ref_get_property; + object_class->set_property = flatpak_ref_set_property; + object_class->finalize = flatpak_ref_finalize; + + g_object_class_install_property (object_class, + PROP_NAME, + g_param_spec_string ("name", + "Name", + "The name of the application or runtime", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_ARCH, + g_param_spec_string ("arch", + "Architecture", + "The architecture of the application or runtime", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_BRANCH, + g_param_spec_string ("branch", + "Branch", + "The branch of the application or runtime", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_COMMIT, + g_param_spec_string ("commit", + "Commit", + "The commit", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_KIND, + g_param_spec_enum ("kind", + "Kind", + "The kind of artifact", + FLATPAK_TYPE_REF_KIND, + FLATPAK_REF_KIND_APP, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_COLLECTION_ID, + g_param_spec_string ("collection-id", + "Collection ID", + "The collection ID", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); +} + +static void +flatpak_ref_init (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + priv->kind = FLATPAK_REF_KIND_APP; +} + +/** + * flatpak_ref_get_name: + * @self: a #FlatpakRef + * + * Gets the name of the ref. + * + * Returns: (transfer none): the name + */ +const char * +flatpak_ref_get_name (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->name; +} + +/** + * flatpak_ref_get_arch: + * @self: a #FlatpakRef + * + * Gets the arch or the ref. + * + * Returns: (transfer none): the arch + */ +const char * +flatpak_ref_get_arch (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->arch; +} + +/** + * flatpak_ref_get_branch: + * @self: a #FlatpakRef + * + * Gets the branch of the ref. + * + * Returns: (transfer none): the branch + */ +const char * +flatpak_ref_get_branch (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->branch; +} + +/** + * flatpak_ref_get_commit: + * @self: a #FlatpakRef + * + * Gets the commit of the ref. + * + * Returns: (transfer none): the commit + */ +const char * +flatpak_ref_get_commit (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->commit; +} + +/** + * flatpak_ref_get_kind: + * @self: a #FlatpakRef + * + * Gets the kind of artifact that this ref refers to. + * + * Returns: the kind of artifact + */ +FlatpakRefKind +flatpak_ref_get_kind (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->kind; +} + +/** + * flatpak_ref_format_ref: + * @self: a #FlatpakRef + * + * Convert an FlatpakRef object into a string representation that + * can be parsed by flatpak_ref_parse(). + * + * Returns: (transfer full): string representation + */ +char * +flatpak_ref_format_ref (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + if (priv->kind == FLATPAK_REF_KIND_APP) + return flatpak_build_app_ref (priv->name, + priv->branch, + priv->arch); + else + return flatpak_build_runtime_ref (priv->name, + priv->branch, + priv->arch); +} + +/** + * flatpak_ref_parse: + * @ref: A string ref name, such as "app/org.test.App/86_64/master" + * @error: return location for a #GError + * + * Tries to parse a full ref name and return a #FlatpakRef (without a + * commit set) or fail if the ref is invalid somehow. + * + * Returns: (transfer full): an #FlatpakRef, or %NULL + */ +FlatpakRef * +flatpak_ref_parse (const char *ref, GError **error) +{ + g_auto(GStrv) parts = NULL; + + parts = flatpak_decompose_ref (ref, error); + if (parts == NULL) + return NULL; + + FlatpakRefKind kind; + if (g_strcmp0 (parts[0], "app") == 0) + { + kind = FLATPAK_REF_KIND_APP; + } + else if (g_strcmp0 (parts[0], "runtime") == 0) + { + kind = FLATPAK_REF_KIND_RUNTIME; + } + else + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + "Invalid kind: %s", parts[0]); + return NULL; + } + + return FLATPAK_REF (g_object_new (FLATPAK_TYPE_REF, + "kind", kind, + "name", parts[1], + "arch", parts[2], + "branch", parts[3], + NULL)); +} + +/** + * flatpak_ref_get_collection_id: + * @self: a #FlatpakRef + * + * Gets the collection ID of the ref. + * + * Returns: (transfer none): the collection ID + */ +const char * +flatpak_ref_get_collection_id (FlatpakRef *self) +{ + FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); + + return priv->collection_id; +} diff -Nru flatpak-0.11.3/common/flatpak-ref.h flatpak-1.0.7/common/flatpak-ref.h --- flatpak-0.11.3/common/flatpak-ref.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-ref.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,75 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_REF_H__ +#define __FLATPAK_REF_H__ + +typedef struct _FlatpakRef FlatpakRef; + +#include + +#define FLATPAK_TYPE_REF flatpak_ref_get_type () +#define FLATPAK_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REF, FlatpakRef)) +#define FLATPAK_IS_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REF)) + +FLATPAK_EXTERN GType flatpak_ref_get_type (void); + +struct _FlatpakRef +{ + GObject parent; +}; + +typedef struct +{ + GObjectClass parent_class; +} FlatpakRefClass; + + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRef, g_object_unref) +#endif + +/** + * FlatpakRefKind: + * @FLATPAK_REF_KIND_APP: An application + * @FLATPAK_REF_KIND_RUNTIME: A runtime that applications can use. + * + * The kind of artifact that a FlatpakRef refers to. + */ +typedef enum { + FLATPAK_REF_KIND_APP, + FLATPAK_REF_KIND_RUNTIME, +} FlatpakRefKind; + +FLATPAK_EXTERN const char * flatpak_ref_get_name (FlatpakRef *self); +FLATPAK_EXTERN const char * flatpak_ref_get_arch (FlatpakRef *self); +FLATPAK_EXTERN const char * flatpak_ref_get_branch (FlatpakRef *self); +FLATPAK_EXTERN const char * flatpak_ref_get_commit (FlatpakRef *self); +FLATPAK_EXTERN FlatpakRefKind flatpak_ref_get_kind (FlatpakRef *self); +FLATPAK_EXTERN char * flatpak_ref_format_ref (FlatpakRef *self); +FLATPAK_EXTERN FlatpakRef * flatpak_ref_parse (const char *ref, + GError **error); +FLATPAK_EXTERN const char * flatpak_ref_get_collection_id (FlatpakRef *self); + +#endif /* __FLATPAK_REF_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-related-ref.c flatpak-1.0.7/common/flatpak-related-ref.c --- flatpak-0.11.3/common/flatpak-related-ref.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-related-ref.c 2018-09-12 08:41:11.000000000 +0000 @@ -0,0 +1,305 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-related-ref.h" +#include "flatpak-related-ref-private.h" +#include "flatpak-enum-types.h" + +/** + * SECTION:flatpak-related-ref + * @Title: FlatpakRelatedRef + * @Short_description: Related application reference + * + * A FlatpakRelatedRef provides information about an ref that is related + * to another ref. For instance, the local extension ref of an app. + * + * Since: 0.6.7 + */ + +typedef struct _FlatpakRelatedRefPrivate FlatpakRelatedRefPrivate; + +struct _FlatpakRelatedRefPrivate +{ + char **subpaths; + gboolean download; + gboolean delete; + gboolean autoprune; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRelatedRef, flatpak_related_ref, FLATPAK_TYPE_REF) + +enum { + PROP_0, + + PROP_SUBPATHS, + PROP_SHOULD_DOWNLOAD, + PROP_SHOULD_DELETE, + PROP_SHOULD_AUTOPRUNE, +}; + +static void +flatpak_related_ref_finalize (GObject *object) +{ + FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + g_strfreev (priv->subpaths); + + G_OBJECT_CLASS (flatpak_related_ref_parent_class)->finalize (object); +} + +static void +flatpak_related_ref_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_SHOULD_DOWNLOAD: + priv->download = g_value_get_boolean (value); + break; + + case PROP_SHOULD_DELETE: + priv->delete = g_value_get_boolean (value); + break; + + case PROP_SHOULD_AUTOPRUNE: + priv->autoprune = g_value_get_boolean (value); + break; + + case PROP_SUBPATHS: + g_clear_pointer (&priv->subpaths, g_strfreev); + priv->subpaths = g_strdupv (g_value_get_boxed (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_related_ref_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_SHOULD_DOWNLOAD: + g_value_set_boolean (value, priv->download); + break; + + case PROP_SHOULD_DELETE: + g_value_set_boolean (value, priv->delete); + break; + + case PROP_SHOULD_AUTOPRUNE: + g_value_set_boolean (value, priv->autoprune); + break; + + case PROP_SUBPATHS: + g_value_set_boxed (value, priv->subpaths); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_related_ref_class_init (FlatpakRelatedRefClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_related_ref_get_property; + object_class->set_property = flatpak_related_ref_set_property; + object_class->finalize = flatpak_related_ref_finalize; + + g_object_class_install_property (object_class, + PROP_SHOULD_DOWNLOAD, + g_param_spec_boolean ("should-download", + "Should download", + "Whether to auto-download the ref with the main ref", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_SHOULD_DELETE, + g_param_spec_boolean ("should-delete", + "Should delete", + "Whether to auto-delete the ref with the main ref", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_SHOULD_AUTOPRUNE, + g_param_spec_boolean ("should-autoprune", + "Should autoprune", + "Whether to delete when pruning unused refs", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_SUBPATHS, + g_param_spec_boxed ("subpaths", + "Subpaths", + "The subpaths for a partially installed ref", + G_TYPE_STRV, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); +} + +static void +flatpak_related_ref_init (FlatpakRelatedRef *self) +{ +} + +/** + * flatpak_related_ref_should_download: + * @self: a #FlatpakRelatedRef + * + * Returns whether to auto-download the ref with the main ref. + * + * Returns: %TRUE if the ref should be downloaded with the main ref. + * + * Since: 0.6.7 + */ +gboolean +flatpak_related_ref_should_download (FlatpakRelatedRef *self) +{ + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + return priv->download; +} + +/** + * flatpak_related_ref_should_delete: + * @self: a #FlatpakRelatedRef + * + * Returns whether to auto-delete the ref with the main ref. + * + * Returns: %TRUE if the ref should be deleted with the main ref. + * + * Since: 0.6.7 + */ +gboolean +flatpak_related_ref_should_delete (FlatpakRelatedRef *self) +{ + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + return priv->delete; +} + +/** + * flatpak_related_ref_should_autoprune: + * @self: a #FlatpakRelatedRef + * + * Returns whether to delete when pruning unused refs. + * + * Returns: %TRUE if the ref should be considered unused when pruning. + * + * Since: 0.11.8 + */ +gboolean +flatpak_related_ref_should_autoprune (FlatpakRelatedRef *self) +{ + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + return priv->autoprune; +} + +/** + * flatpak_related_ref_get_subpaths: + * @self: a #FlatpakRelatedRef + * + * Returns the subpaths that should be installed/updated for the ref. + * This returns %NULL if all files should be installed. + * + * Returns: (transfer none): A strv, or %NULL + * + * Since: 0.6.7 + */ +const char * const * +flatpak_related_ref_get_subpaths (FlatpakRelatedRef *self) +{ + FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); + + return (const char * const *) priv->subpaths; +} + +/** + * flatpak_related_ref_new: + * @collection_id: (nullable): the collection ID + * @full_ref: a full ref to refer to + * @commit: (nullable): a commit ID to refer to + * @subpaths: (nullable): a nul-terminated array of subpaths + * @download: whether to auto-download the ref with the main ref + * @delete: whether to auto-delete the ref with the main ref + * + * Creates a new FlatpakRelatedRef object. + * + * Returns: a new ref + */ +FlatpakRelatedRef * +flatpak_related_ref_new (const char *collection_id, + const char *full_ref, + const char *commit, + char **subpaths, + gboolean download, + gboolean delete) +{ + FlatpakRefKind kind = FLATPAK_REF_KIND_APP; + FlatpakRelatedRef *ref; + + g_auto(GStrv) parts = NULL; + + parts = g_strsplit (full_ref, "/", -1); + + if (strcmp (parts[0], "app") != 0) + kind = FLATPAK_REF_KIND_RUNTIME; + + /* Canonicalize the "no subpaths" case */ + if (subpaths && *subpaths == NULL) + subpaths = NULL; + + ref = g_object_new (FLATPAK_TYPE_RELATED_REF, + "kind", kind, + "name", parts[1], + "arch", parts[2], + "branch", parts[3], + "commit", commit, + "subpaths", subpaths, + "should-download", download, + "should-delete", delete, + "collection-id", collection_id, + NULL); + + return ref; +} diff -Nru flatpak-0.11.3/common/flatpak-related-ref.h flatpak-1.0.7/common/flatpak-related-ref.h --- flatpak-0.11.3/common/flatpak-related-ref.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-related-ref.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,58 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_RELATED_REF_H__ +#define __FLATPAK_RELATED_REF_H__ + +typedef struct _FlatpakRelatedRef FlatpakRelatedRef; + +#include +#include + +#define FLATPAK_TYPE_RELATED_REF flatpak_related_ref_get_type () +#define FLATPAK_RELATED_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_RELATED_REF, FlatpakRelatedRef)) +#define FLATPAK_IS_RELATED_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_RELATED_REF)) + +FLATPAK_EXTERN GType flatpak_related_ref_get_type (void); + +struct _FlatpakRelatedRef +{ + FlatpakRef parent; +}; + +typedef struct +{ + FlatpakRefClass parent_class; +} FlatpakRelatedRefClass; + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRelatedRef, g_object_unref) +#endif + +FLATPAK_EXTERN const char * const *flatpak_related_ref_get_subpaths (FlatpakRelatedRef * self); +FLATPAK_EXTERN gboolean flatpak_related_ref_should_download (FlatpakRelatedRef *self); +FLATPAK_EXTERN gboolean flatpak_related_ref_should_delete (FlatpakRelatedRef *self); +FLATPAK_EXTERN gboolean flatpak_related_ref_should_autoprune (FlatpakRelatedRef *self); + +#endif /* __FLATPAK_RELATED_REF_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-related-ref-private.h flatpak-1.0.7/common/flatpak-related-ref-private.h --- flatpak-0.11.3/common/flatpak-related-ref-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-related-ref-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,38 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_RELATED_REF_PRIVATE_H__ +#define __FLATPAK_RELATED_REF_PRIVATE_H__ + +#include +#include + +FlatpakRelatedRef *flatpak_related_ref_new (const char *collection_id, + const char *full_ref, + const char *commit, + char **subpaths, + gboolean download, + gboolean delete); + +#endif /* __FLATPAK_RELATED_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-remote.c flatpak-1.0.7/common/flatpak-remote.c --- flatpak-0.11.3/common/flatpak-remote.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,914 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-remote-private.h" +#include "flatpak-remote-ref-private.h" +#include "flatpak-enum-types.h" + +#include +#include + +#include + +/** + * SECTION:flatpak-remote + * @Short_description: Remote repository + * @Title: FlatpakRemote + * + * A #FlatpakRemote object provides information about a remote + * repository (or short: remote) that has been configured. + * + * At its most basic level, a remote has a name and the URL for + * the repository. In addition, they provide some additional + * information that can be useful when presenting repositories + * in a UI, such as a title, a priority or a "don't enumerate" + * flags. + * + * To obtain FlatpakRemote objects for the configured remotes + * on a system, use flatpak_installation_list_remotes() or + * flatpak_installation_get_remote_by_name(). + */ + +typedef struct _FlatpakRemotePrivate FlatpakRemotePrivate; + +struct _FlatpakRemotePrivate +{ + char *name; + FlatpakDir *dir; + + char *local_url; + char *local_collection_id; + char *local_title; + char *local_default_branch; + gboolean local_gpg_verify; + gboolean local_noenumerate; + gboolean local_nodeps; + gboolean local_disabled; + int local_prio; + FlatpakRemoteType type; + + guint local_url_set : 1; + guint local_collection_id_set : 1; + guint local_title_set : 1; + guint local_default_branch_set : 1; + guint local_gpg_verify_set : 1; + guint local_noenumerate_set : 1; + guint local_nodeps_set : 1; + guint local_disabled_set : 1; + guint local_prio_set : 1; + + GBytes *local_gpg_key; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRemote, flatpak_remote, G_TYPE_OBJECT) + +enum { + PROP_0, + + PROP_NAME, + PROP_TYPE, +}; + +static void +flatpak_remote_finalize (GObject *object) +{ + FlatpakRemote *self = FLATPAK_REMOTE (object); + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + g_free (priv->name); + if (priv->dir) + g_object_unref (priv->dir); + if (priv->local_gpg_key) + g_bytes_unref (priv->local_gpg_key); + + g_free (priv->local_url); + g_free (priv->local_collection_id); + g_free (priv->local_title); + g_free (priv->local_default_branch); + + G_OBJECT_CLASS (flatpak_remote_parent_class)->finalize (object); +} + +static void +flatpak_remote_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakRemote *self = FLATPAK_REMOTE (object); + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + switch (prop_id) + { + case PROP_NAME: + g_clear_pointer (&priv->name, g_free); + priv->name = g_value_dup_string (value); + break; + + case PROP_TYPE: + priv->type = g_value_get_enum (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_remote_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakRemote *self = FLATPAK_REMOTE (object); + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + switch (prop_id) + { + case PROP_NAME: + g_value_set_string (value, priv->name); + break; + + case PROP_TYPE: + g_value_set_enum (value, priv->type); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_remote_class_init (FlatpakRemoteClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_remote_get_property; + object_class->set_property = flatpak_remote_set_property; + object_class->finalize = flatpak_remote_finalize; + + /** + * FlatpakRemote:name: + * + * Name of the remote, as used in configuration files and when interfacing + * with OSTree. This is typically human readable, but could be generated, and + * must conform to ostree_validate_remote_name(). It should typically not be + * presented in the UI. + */ + g_object_class_install_property (object_class, + PROP_NAME, + g_param_spec_string ("name", + "Name", + "The name of the remote", + NULL, + G_PARAM_READWRITE)); + + /** + * FlatpakRemote:type: + * + * The type of the remote: whether it comes from static configuration files + * (@FLATPAK_REMOTE_TYPE_STATIC) or has been dynamically found from the local + * network or a mounted USB drive (@FLATPAK_REMOTE_TYPE_LAN, + * @FLATPAK_REMOTE_TYPE_USB). Dynamic remotes may be added and removed over + * time. + * + * Since: 0.9.8 + */ + g_object_class_install_property (object_class, + PROP_TYPE, + g_param_spec_enum ("type", + "Type", + "The type of the remote", + FLATPAK_TYPE_REMOTE_TYPE, + FLATPAK_REMOTE_TYPE_STATIC, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); +} + +static void +flatpak_remote_init (FlatpakRemote *self) +{ +} + +/** + * flatpak_remote_get_name: + * @self: a #FlatpakRemote + * + * Returns the name of the remote repository. + * + * Returns: (transfer none): the name + */ +const char * +flatpak_remote_get_name (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + return priv->name; +} + +/** + * flatpak_remote_get_appstream_dir: + * @self: a #FlatpakRemote + * @arch: (nullable): which architecture to fetch (default: current architecture) + * + * Returns the directory where this remote will store locally cached + * appstream information for the specified @arch. + * + * Returns: (transfer full): a #GFile + **/ +GFile * +flatpak_remote_get_appstream_dir (FlatpakRemote *self, + const char *arch) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + g_autofree char *subdir = NULL; + + if (priv->dir == NULL) + return NULL; + + if (arch == NULL) + arch = flatpak_get_arch (); + + if (flatpak_dir_get_remote_oci (priv->dir, priv->name)) + subdir = g_strdup_printf ("appstream/%s/%s", priv->name, arch); + else + subdir = g_strdup_printf ("appstream/%s/%s/active", priv->name, arch); + + return g_file_resolve_relative_path (flatpak_dir_get_path (priv->dir), + subdir); +} + +/** + * flatpak_remote_get_appstream_timestamp: + * @self: a #FlatpakRemote + * @arch: (nullable): which architecture to fetch (default: current architecture) + * + * Returns the timestamp file that will be updated whenever the appstream information + * has been updated (or tried to update) for the specified @arch. + * + * Returns: (transfer full): a #GFile + **/ +GFile * +flatpak_remote_get_appstream_timestamp (FlatpakRemote *self, + const char *arch) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + g_autofree char *subdir = NULL; + + if (priv->dir == NULL) + return NULL; + + if (arch == NULL) + arch = flatpak_get_arch (); + + subdir = g_strdup_printf ("appstream/%s/%s/.timestamp", priv->name, arch); + return g_file_resolve_relative_path (flatpak_dir_get_path (priv->dir), + subdir); +} + +/** + * flatpak_remote_get_url: + * @self: a #FlatpakRemote + * + * Returns the repository URL of this remote. + * + * Returns: (transfer full): the URL + */ +char * +flatpak_remote_get_url (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + char *url; + + if (priv->local_url_set) + return g_strdup (priv->local_url); + + if (priv->dir) + { + OstreeRepo *repo = flatpak_dir_get_repo (priv->dir); + if (ostree_repo_remote_get_url (repo, priv->name, &url, NULL)) + return url; + } + + return NULL; +} + +/** + * flatpak_remote_set_url: + * @self: a #FlatpakRemote + * @url: The new url + * + * Sets the repository URL of this remote. + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_url (FlatpakRemote *self, + const char *url) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + g_free (priv->local_url); + priv->local_url = g_strdup (url); + priv->local_url_set = TRUE; +} + +/** + * flatpak_remote_get_collection_id: + * @self: a #FlatpakRemote + * + * Returns the repository collection ID of this remote, if set. + * + * Returns: (transfer full) (nullable): the collection ID, or %NULL if unset + */ +char * +flatpak_remote_get_collection_id (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_collection_id_set) + return g_strdup (priv->local_collection_id); + + if (priv->dir) + return flatpak_dir_get_remote_collection_id (priv->dir, priv->name); + + return NULL; +} + +/** + * flatpak_remote_set_collection_id: + * @self: a #FlatpakRemote + * @collection_id: (nullable): The new collection ID, or %NULL to unset + * + * Sets the repository collection ID of this remote. + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_collection_id (FlatpakRemote *self, + const char *collection_id) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (collection_id != NULL && *collection_id == '\0') + collection_id = NULL; + + g_free (priv->local_collection_id); + priv->local_collection_id = g_strdup (collection_id); + priv->local_collection_id_set = TRUE; +} + +/** + * flatpak_remote_get_title: + * @self: a #FlatpakRemote + * + * Returns the title of the remote. + * + * Returns: (transfer full): the title + */ +char * +flatpak_remote_get_title (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_title_set) + return g_strdup (priv->local_title); + + if (priv->dir) + return flatpak_dir_get_remote_title (priv->dir, priv->name); + + return NULL; +} + +/** + * flatpak_remote_set_title: + * @self: a #FlatpakRemote + * @title: The new title + * + * Sets the repository title of this remote. + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_title (FlatpakRemote *self, + const char *title) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + g_free (priv->local_title); + priv->local_title = g_strdup (title); + priv->local_title_set = TRUE; +} + +/** + * flatpak_remote_get_default_branch: + * @self: a #FlatpakRemote + * + * Returns the default branch configured for the remote. + * + * Returns: (transfer full): the default branch, or %NULL + * + * Since: 0.6.12 + */ +char * +flatpak_remote_get_default_branch (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_default_branch_set) + return g_strdup (priv->local_default_branch); + + if (priv->dir) + return flatpak_dir_get_remote_default_branch (priv->dir, priv->name); + + return NULL; +} + +/** + * flatpak_remote_set_default_branch: + * @self: a #FlatpakRemote + * @default_branch: The new default_branch + * + * Sets the default branch configured for this remote. + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + * + * Since: 0.6.12 + */ +void +flatpak_remote_set_default_branch (FlatpakRemote *self, + const char *default_branch) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + g_free (priv->local_default_branch); + priv->local_default_branch = g_strdup (default_branch); + priv->local_default_branch_set = TRUE; +} + +/** + * flatpak_remote_get_noenumerate: + * @self: a #FlatpakRemote + * + * Returns whether this remote should be used to list applications. + * + * Returns: whether the remote is marked as "don't enumerate" + */ +gboolean +flatpak_remote_get_noenumerate (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_noenumerate_set) + return priv->local_noenumerate; + + if (priv->dir) + return flatpak_dir_get_remote_noenumerate (priv->dir, priv->name); + + return FALSE; +} + +/** + * flatpak_remote_set_noenumerate: + * @self: a #FlatpakRemote + * @noenumerate: a bool + * + * Sets the noenumeration config of this remote. See flatpak_remote_get_noenumerate(). + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_noenumerate (FlatpakRemote *self, + gboolean noenumerate) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + priv->local_noenumerate = noenumerate; + priv->local_noenumerate_set = TRUE; +} + +/** + * flatpak_remote_get_nodeps: + * @self: a #FlatpakRemote + * + * Returns whether this remote should be used to find dependencies. + * + * Returns: whether the remote is marked as "don't use for dependencies" + */ +gboolean +flatpak_remote_get_nodeps (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_nodeps_set) + return priv->local_nodeps; + + if (priv->dir) + return flatpak_dir_get_remote_nodeps (priv->dir, priv->name); + + return FALSE; +} + +/** + * flatpak_remote_set_nodeps: + * @self: a #FlatpakRemote + * @nodeps: a bool + * + * Sets the nodeps config of this remote. See flatpak_remote_get_nodeps(). + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_nodeps (FlatpakRemote *self, + gboolean nodeps) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + priv->local_nodeps = nodeps; + priv->local_nodeps_set = TRUE; +} + +/** + * flatpak_remote_get_disabled: + * @self: a #FlatpakRemote + * + * Returns whether this remote is disabled. + * + * Returns: whether the remote is marked as disabled + */ +gboolean +flatpak_remote_get_disabled (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_disabled_set) + return priv->local_disabled; + + if (priv->dir) + return flatpak_dir_get_remote_disabled (priv->dir, priv->name); + + return FALSE; +} +/** + * flatpak_remote_set_disabled: + * @self: a #FlatpakRemote + * @disabled: a bool + * + * Sets the disabled config of this remote. See flatpak_remote_get_disabled(). + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_disabled (FlatpakRemote *self, + gboolean disabled) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + priv->local_disabled = disabled; + priv->local_disabled_set = TRUE; +} + +/** + * flatpak_remote_get_prio: + * @self: a #FlatpakRemote + * + * Returns the priority for the remote. + * + * Returns: the priority + */ +int +flatpak_remote_get_prio (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_prio_set) + return priv->local_prio; + + if (priv->dir) + return flatpak_dir_get_remote_prio (priv->dir, priv->name); + + return 1; +} + +/** + * flatpak_remote_set_prio: + * @self: a #FlatpakRemote + * @prio: a bool + * + * Sets the prio config of this remote. See flatpak_remote_get_prio(). + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_prio (FlatpakRemote *self, + int prio) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + priv->local_prio = prio; + priv->local_prio_set = TRUE; +} + +/** + * flatpak_remote_get_gpg_verify: + * @self: a #FlatpakRemote + * + * Returns whether GPG verification is enabled for the remote. + * + * Returns: whether GPG verification is enabled + */ +gboolean +flatpak_remote_get_gpg_verify (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + gboolean res; + + if (priv->local_gpg_verify_set) + return priv->local_gpg_verify; + + if (priv->dir) + { + OstreeRepo *repo = flatpak_dir_get_repo (priv->dir); + if (ostree_repo_remote_get_gpg_verify (repo, priv->name, &res, NULL)) + return res; + } + + return FALSE; +} + +/** + * flatpak_remote_set_gpg_verify: + * @self: a #FlatpakRemote + * @gpg_verify: a bool + * + * Sets the gpg_verify config of this remote. See flatpak_remote_get_gpg_verify(). + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_gpg_verify (FlatpakRemote *self, + gboolean gpg_verify) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + priv->local_gpg_verify = gpg_verify; + priv->local_gpg_verify_set = TRUE; +} + +/** + * flatpak_remote_set_gpg_key: + * @self: a #FlatpakRemote + * @gpg_key: a #GBytes with gpg binary key data + * + * Sets the trusted gpg key for this remote. + * + * Note: This is a local modification of this object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + */ +void +flatpak_remote_set_gpg_key (FlatpakRemote *self, + GBytes *gpg_key) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + if (priv->local_gpg_key != NULL) + g_bytes_unref (priv->local_gpg_key); + priv->local_gpg_key = g_bytes_ref (gpg_key); +} + +FlatpakRemote * +flatpak_remote_new_with_dir (const char *name, + FlatpakDir *dir) +{ + FlatpakRemotePrivate *priv; + FlatpakRemote *self = g_object_new (FLATPAK_TYPE_REMOTE, + "name", name, + NULL); + + priv = flatpak_remote_get_instance_private (self); + if (dir) + priv->dir = g_object_ref (dir); + + return self; +} + +static FlatpakRemoteType +repo_finder_to_remote_type (OstreeRepoFinder *repo_finder) +{ + if (OSTREE_IS_REPO_FINDER_AVAHI (repo_finder)) + return FLATPAK_REMOTE_TYPE_LAN; + else if (OSTREE_IS_REPO_FINDER_MOUNT (repo_finder)) + return FLATPAK_REMOTE_TYPE_USB; + else + return FLATPAK_REMOTE_TYPE_STATIC; +} + +FlatpakRemote * +flatpak_remote_new_from_ostree (OstreeRemote *remote, + OstreeRepoFinder *repo_finder, + FlatpakDir *dir) +{ + g_autofree gchar *url = NULL; + FlatpakRemotePrivate *priv; + FlatpakRemote *self = g_object_new (FLATPAK_TYPE_REMOTE, + "name", ostree_remote_get_name (remote), + "type", repo_finder_to_remote_type (repo_finder), + NULL); + + priv = flatpak_remote_get_instance_private (self); + if (dir) + priv->dir = g_object_ref (dir); + + url = ostree_remote_get_url (remote); + if (url != NULL) + flatpak_remote_set_url (self, url); + + return self; +} + +/** + * flatpak_remote_new: + * @name: a name + * + * Returns a new remote object which can be used to configure a new remote. + * + * Note: This is a local configuration object, you must commit changes + * using flatpak_installation_modify_remote() for the changes to take + * effect. + * + * Returns: (transfer full): a new #FlatpakRemote + **/ +FlatpakRemote * +flatpak_remote_new (const char *name) +{ + return flatpak_remote_new_with_dir (name, NULL); +} + +/* copied from GLib */ +static gboolean +g_key_file_is_group_name (const gchar *name) +{ + gchar *p, *q; + + if (name == NULL) + return FALSE; + + p = q = (gchar *) name; + while (*q && *q != ']' && *q != '[' && !g_ascii_iscntrl (*q)) + q = g_utf8_find_next_char (q, NULL); + + if (*q != '\0' || q == p) + return FALSE; + + return TRUE; +} + +gboolean +flatpak_remote_commit (FlatpakRemote *self, + FlatpakDir *dir, + GCancellable *cancellable, + 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); + + if (!g_key_file_is_group_name (group)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Bad remote name: %s"), priv->name); + + url = flatpak_remote_get_url (self); + if (url == NULL || *url == 0) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No url specified")); + + if (priv->type != FLATPAK_REMOTE_TYPE_STATIC) + return flatpak_fail (error, "Dynamic remote cannot be committed"); + + 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); + + if (priv->local_collection_id_set) + { + if (priv->local_collection_id != NULL) + { + g_key_file_set_string (config, group, "collection-id", priv->local_collection_id); + + /* When a collection ID is set, flatpak uses signed per-repo and + * per-commit metadata instead of summary signatures. */ + g_key_file_set_boolean (config, group, "gpg-verify-summary", FALSE); + } + else + { + g_autoptr(GError) local_error = NULL; + gboolean gpg_verify_value; + + g_key_file_remove_key (config, group, "collection-id", NULL); + + /* Without a collection ID gpg-verify-summary should go back to + * matching gpg-verify. */ + gpg_verify_value = g_key_file_get_boolean (config, group, "gpg-verify", &local_error); + if (local_error == NULL) + g_key_file_set_boolean (config, group, "gpg-verify-summary", gpg_verify_value); + } + } + + if (priv->local_title_set) + g_key_file_set_string (config, group, "xa.title", priv->local_title); + + if (priv->local_default_branch_set) + g_key_file_set_string (config, group, "xa.default-branch", priv->local_default_branch); + + if (priv->local_gpg_verify_set) + { + g_key_file_set_boolean (config, group, "gpg-verify", priv->local_gpg_verify); + + if (!priv->local_collection_id_set || priv->local_collection_id == NULL) + g_key_file_set_boolean (config, group, "gpg-verify-summary", priv->local_gpg_verify); + } + + if (priv->local_noenumerate_set) + g_key_file_set_boolean (config, group, "xa.noenumerate", priv->local_noenumerate); + + if (priv->local_disabled_set) + g_key_file_set_boolean (config, group, "xa.disable", priv->local_disabled); + + if (priv->local_nodeps_set) + g_key_file_set_boolean (config, group, "xa.nodeps", priv->local_nodeps); + + if (priv->local_prio_set) + { + g_autofree char *prio_as_string = g_strdup_printf ("%d", priv->local_prio); + g_key_file_set_string (config, group, "xa.prio", prio_as_string); + } + + return flatpak_dir_modify_remote (dir, priv->name, config, priv->local_gpg_key, cancellable, error); +} + +/** + * flatpak_remote_get_remote_type: + * @self: a #FlatpakRemote + * + * Get the value of #FlatpakRemote:type. + * + * Returns: the type of remote this is + * Since: 0.9.8 + */ +FlatpakRemoteType +flatpak_remote_get_remote_type (FlatpakRemote *self) +{ + FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); + + g_return_val_if_fail (FLATPAK_IS_REMOTE (self), FLATPAK_REMOTE_TYPE_STATIC); + + return priv->type; +} diff -Nru flatpak-0.11.3/common/flatpak-remote.h flatpak-1.0.7/common/flatpak-remote.h --- flatpak-0.11.3/common/flatpak-remote.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,107 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_REMOTE_H__ +#define __FLATPAK_REMOTE_H__ + +/** + * FlatpakRemoteType: + * @FLATPAK_REMOTE_TYPE_STATIC: Statically configured remote + * @FLATPAK_REMOTE_TYPE_USB: Dynamically detected local pathname remote + * @FLATPAK_REMOTE_TYPE_LAN: Dynamically detected network remote + * + * Different types of @FlatpakRemote. + */ +typedef enum { + FLATPAK_REMOTE_TYPE_STATIC, + FLATPAK_REMOTE_TYPE_USB, + FLATPAK_REMOTE_TYPE_LAN, +} FlatpakRemoteType; + +typedef struct _FlatpakRemote FlatpakRemote; + +#include +#include + +#define FLATPAK_TYPE_REMOTE flatpak_remote_get_type () +#define FLATPAK_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REMOTE, FlatpakRemote)) +#define FLATPAK_IS_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REMOTE)) + +FLATPAK_EXTERN GType flatpak_remote_get_type (void); + +struct _FlatpakRemote +{ + GObject parent; +}; + +typedef struct +{ + GObjectClass parent_class; +} FlatpakRemoteClass; + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRemote, g_object_unref) +#endif + +FLATPAK_EXTERN FlatpakRemote * flatpak_remote_new (const char *name); + +FLATPAK_EXTERN const char * flatpak_remote_get_name (FlatpakRemote *self); +FLATPAK_EXTERN GFile * flatpak_remote_get_appstream_dir (FlatpakRemote *self, + const char *arch); +FLATPAK_EXTERN GFile * flatpak_remote_get_appstream_timestamp (FlatpakRemote *self, + const char *arch); +FLATPAK_EXTERN char * flatpak_remote_get_url (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_url (FlatpakRemote *self, + const char *url); +FLATPAK_EXTERN char * flatpak_remote_get_collection_id (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_collection_id (FlatpakRemote *self, + const char *collection_id); +FLATPAK_EXTERN char * flatpak_remote_get_title (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_title (FlatpakRemote *self, + const char *title); +FLATPAK_EXTERN char * flatpak_remote_get_default_branch (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_default_branch (FlatpakRemote *self, + const char *default_branch); +FLATPAK_EXTERN gboolean flatpak_remote_get_gpg_verify (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_gpg_verify (FlatpakRemote *self, + gboolean gpg_verify); +FLATPAK_EXTERN void flatpak_remote_set_gpg_key (FlatpakRemote *self, + GBytes *gpg_key); +FLATPAK_EXTERN gboolean flatpak_remote_get_noenumerate (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_noenumerate (FlatpakRemote *self, + gboolean noenumerate); +FLATPAK_EXTERN gboolean flatpak_remote_get_nodeps (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_nodeps (FlatpakRemote *self, + gboolean nodeps); +FLATPAK_EXTERN gboolean flatpak_remote_get_disabled (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_disabled (FlatpakRemote *self, + gboolean disabled); +FLATPAK_EXTERN int flatpak_remote_get_prio (FlatpakRemote *self); +FLATPAK_EXTERN void flatpak_remote_set_prio (FlatpakRemote *self, + int prio); + +FLATPAK_EXTERN FlatpakRemoteType flatpak_remote_get_remote_type (FlatpakRemote *self); + + +#endif /* __FLATPAK_REMOTE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-remote-private.h flatpak-1.0.7/common/flatpak-remote-private.h --- flatpak-0.11.3/common/flatpak-remote-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_REMOTE_PRIVATE_H__ +#define __FLATPAK_REMOTE_PRIVATE_H__ + +#include +#include +#include + +FlatpakRemote *flatpak_remote_new_with_dir (const char *name, + FlatpakDir *dir); + +FlatpakRemote *flatpak_remote_new_from_ostree (OstreeRemote *remote, + OstreeRepoFinder *repo_finder, + FlatpakDir *dir); + +gboolean flatpak_remote_commit (FlatpakRemote *self, + FlatpakDir *dir, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_REMOTE_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-remote-ref.c flatpak-1.0.7/common/flatpak-remote-ref.c --- flatpak-0.11.3/common/flatpak-remote-ref.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote-ref.c 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,382 @@ +/* + * 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 "flatpak-utils-private.h" +#include "flatpak-remote-ref-private.h" +#include "flatpak-remote-ref.h" +#include "flatpak-enum-types.h" + +/** + * SECTION:flatpak-remote-ref + * @Title: FlatpakRemoteRef + * @Short_description: Remote application reference + * + * A FlatpakRemoteRef provides information about an application or runtime + * (in short: ref) that is available from a remote repository. + */ +typedef struct _FlatpakRemoteRefPrivate FlatpakRemoteRefPrivate; + +struct _FlatpakRemoteRefPrivate +{ + char *remote_name; + guint64 installed_size; + guint64 download_size; + GBytes *metadata; + char *eol; + char *eol_rebase; + +}; + +G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRemoteRef, flatpak_remote_ref, FLATPAK_TYPE_REF) + +enum { + PROP_0, + + PROP_REMOTE_NAME, + PROP_INSTALLED_SIZE, + PROP_DOWNLOAD_SIZE, + PROP_METADATA, + PROP_EOL, + PROP_EOL_REBASE, +}; + +static void +flatpak_remote_ref_finalize (GObject *object) +{ + FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + g_free (priv->remote_name); + g_free (priv->eol); + g_free (priv->eol_rebase); + g_clear_pointer (&priv->metadata, g_bytes_unref); + + G_OBJECT_CLASS (flatpak_remote_ref_parent_class)->finalize (object); +} + +static void +flatpak_remote_ref_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_REMOTE_NAME: + g_clear_pointer (&priv->remote_name, g_free); + priv->remote_name = g_value_dup_string (value); + break; + + case PROP_INSTALLED_SIZE: + priv->installed_size = g_value_get_uint64 (value); + break; + + case PROP_DOWNLOAD_SIZE: + priv->download_size = g_value_get_uint64 (value); + break; + + case PROP_METADATA: + g_clear_pointer (&priv->metadata, g_bytes_unref); + priv->metadata = g_value_get_boxed (value) ? g_bytes_ref (g_value_get_boxed (value)) : NULL; + break; + + case PROP_EOL: + g_clear_pointer (&priv->eol, g_free); + priv->eol = g_value_dup_string (value); + break; + + case PROP_EOL_REBASE: + g_clear_pointer (&priv->eol_rebase, g_free); + priv->eol_rebase = g_value_dup_string (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_remote_ref_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + switch (prop_id) + { + case PROP_REMOTE_NAME: + g_value_set_string (value, priv->remote_name); + break; + + case PROP_INSTALLED_SIZE: + g_value_set_uint64 (value, priv->installed_size); + break; + + case PROP_DOWNLOAD_SIZE: + g_value_set_uint64 (value, priv->installed_size); + break; + + case PROP_METADATA: + g_value_set_boxed (value, priv->metadata); + break; + + case PROP_EOL: + g_value_set_string (value, priv->eol); + break; + + case PROP_EOL_REBASE: + g_value_set_string (value, priv->eol_rebase); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +flatpak_remote_ref_class_init (FlatpakRemoteRefClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->get_property = flatpak_remote_ref_get_property; + object_class->set_property = flatpak_remote_ref_set_property; + object_class->finalize = flatpak_remote_ref_finalize; + + g_object_class_install_property (object_class, + PROP_REMOTE_NAME, + g_param_spec_string ("remote-name", + "Remote Name", + "The name of the remote", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_INSTALLED_SIZE, + g_param_spec_uint64 ("installed-size", + "Installed Size", + "The installed size of the application", + 0, G_MAXUINT64, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_DOWNLOAD_SIZE, + g_param_spec_uint64 ("download-size", + "Download Size", + "The download size of the application", + 0, G_MAXUINT64, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_METADATA, + g_param_spec_boxed ("metadata", + "Metadata", + "The metadata info for the application", + G_TYPE_BYTES, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_EOL, + g_param_spec_string ("end-of-life", + "End of life", + "The reason for the ref to be end of life", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, + PROP_EOL_REBASE, + g_param_spec_string ("end-of-life-rebase", + "End of life rebase", + "The new ref for the end of lifeed ref", + NULL, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); +} + +static void +flatpak_remote_ref_init (FlatpakRemoteRef *self) +{ +} + +/** + * flatpak_remote_ref_get_remote_name: + * @self: a #FlatpakRemoteRef + * + * Gets the remote name of the ref. + * + * Returns: (transfer none): the remote name + */ +const char * +flatpak_remote_ref_get_remote_name (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->remote_name; +} + +/** + * flatpak_remote_ref_get_installed_size: + * @self: a #FlatpakRemoteRef + * + * Returns the installed size of the ref. + * + * Returns: the installed size + */ +guint64 +flatpak_remote_ref_get_installed_size (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->installed_size; +} + +/** + * flatpak_remote_ref_get_download_size: + * @self: a #FlatpakRemoteRef + * + * Returns the download size of the ref. + * + * Returns: the download size + */ +guint64 +flatpak_remote_ref_get_download_size (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->download_size; +} + +/** + * flatpak_remote_ref_get_metadata: + * @self: a #FlatpakRemoteRef + * + * Returns the app metadata from the metadata cach of the ref. + * + * Returns: (transfer none) (nullable): a #GBytes with the metadata file + * contents or %NULL + */ +GBytes * +flatpak_remote_ref_get_metadata (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->metadata; +} + +/** + * flatpak_remote_ref_get_eol: + * @self: a #FlatpakRemoteRef + * + * Returns the end-of-life reason string, or %NULL if the + * ref is not end-of-lifed. + * + * Returns: (transfer none): the end-of-life reason or %NULL + */ +const char * +flatpak_remote_ref_get_eol (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->eol; +} + +/** + * flatpak_remote_ref_get_eol_rebase: + * @self: a #FlatpakRemoteRef + * + * Returns the end-of-life rebased ref, or %NULL if the + * ref is not end-of-lifed. + * + * Returns: (transfer none): the end-of-life rebased ref or %NULL + */ +const char * +flatpak_remote_ref_get_eol_rebase (FlatpakRemoteRef *self) +{ + FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); + + return priv->eol_rebase; +} + +FlatpakRemoteRef * +flatpak_remote_ref_new (FlatpakCollectionRef *coll_ref, + const char *commit, + const char *remote_name, + FlatpakRemoteState *state) +{ + FlatpakRefKind kind = FLATPAK_REF_KIND_APP; + guint64 download_size = 0, installed_size = 0; + const char *metadata = NULL; + + g_autoptr(GBytes) metadata_bytes = NULL; + g_auto(GStrv) parts = NULL; + FlatpakRemoteRef *ref; + g_autoptr(GVariant) sparse = NULL; + const char *full_ref = coll_ref->ref_name; + const char *eol = NULL; + const char *eol_rebase = NULL; + + parts = flatpak_decompose_ref (full_ref, NULL); + if (parts == NULL) + return NULL; + + if (state && + !flatpak_remote_state_lookup_cache (state, full_ref, + &download_size, &installed_size, &metadata, + NULL)) + { + g_debug ("Can't find metadata for ref %s", full_ref); + } + + if (metadata) + metadata_bytes = g_bytes_new (metadata, strlen (metadata)); + + if (state) + sparse = flatpak_remote_state_lookup_sparse_cache (state, full_ref, NULL); + + if (sparse) + { + g_variant_lookup (sparse, "eol", "&s", &eol); + g_variant_lookup (sparse, "eolr", "&s", &eol_rebase); + } + + if (strcmp (parts[0], "app") != 0) + kind = FLATPAK_REF_KIND_RUNTIME; + + ref = g_object_new (FLATPAK_TYPE_REMOTE_REF, + "kind", kind, + "name", parts[1], + "arch", parts[2], + "branch", parts[3], + "collection-id", coll_ref->collection_id, + "commit", commit, + "remote-name", remote_name, + "installed-size", installed_size, + "download-size", download_size, + "metadata", metadata_bytes, + "end-of-life", eol, + "end-of-life-rebase", eol_rebase, + NULL); + + return ref; +} diff -Nru flatpak-0.11.3/common/flatpak-remote-ref.h flatpak-1.0.7/common/flatpak-remote-ref.h --- flatpak-0.11.3/common/flatpak-remote-ref.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote-ref.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,60 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_REMOTE_REF_H__ +#define __FLATPAK_REMOTE_REF_H__ + +typedef struct _FlatpakRemoteRef FlatpakRemoteRef; + +#include +#include + +#define FLATPAK_TYPE_REMOTE_REF flatpak_remote_ref_get_type () +#define FLATPAK_REMOTE_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REMOTE_REF, FlatpakRemoteRef)) +#define FLATPAK_IS_REMOTE_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REMOTE_REF)) + +FLATPAK_EXTERN GType flatpak_remote_ref_get_type (void); + +struct _FlatpakRemoteRef +{ + FlatpakRef parent; +}; + +typedef struct +{ + FlatpakRefClass parent_class; +} FlatpakRemoteRefClass; + +FLATPAK_EXTERN const char * flatpak_remote_ref_get_remote_name (FlatpakRemoteRef *self); +FLATPAK_EXTERN guint64 flatpak_remote_ref_get_installed_size (FlatpakRemoteRef *self); +FLATPAK_EXTERN guint64 flatpak_remote_ref_get_download_size (FlatpakRemoteRef *self); +FLATPAK_EXTERN GBytes * flatpak_remote_ref_get_metadata (FlatpakRemoteRef *self); +FLATPAK_EXTERN const char * flatpak_remote_ref_get_eol (FlatpakRemoteRef *self); +FLATPAK_EXTERN const char * flatpak_remote_ref_get_eol_rebase (FlatpakRemoteRef *self); + +#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRemoteRef, g_object_unref) +#endif + +#endif /* __FLATPAK_REMOTE_REF_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-remote-ref-private.h flatpak-1.0.7/common/flatpak-remote-ref-private.h --- flatpak-0.11.3/common/flatpak-remote-ref-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-remote-ref-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,36 @@ +/* + * 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_REMOTE_REF_PRIVATE_H__ +#define __FLATPAK_REMOTE_REF_PRIVATE_H__ + +#include +#include + +FlatpakRemoteRef *flatpak_remote_ref_new (FlatpakCollectionRef *coll_ref, + const char *commit, + const char *remote_name, + FlatpakRemoteState *remote_state); + +#endif /* __FLATPAK_REMOTE_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-run.c flatpak-1.0.7/common/flatpak-run.c --- flatpak-0.11.3/common/flatpak-run.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-run.c 2019-02-11 12:42:20.000000000 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -40,33 +41,21 @@ #include #endif -#include +#include #include #include "libglnx/libglnx.h" -#include "flatpak-run.h" +#include "flatpak-run-private.h" #include "flatpak-proxy.h" -#include "flatpak-utils.h" -#include "flatpak-dir.h" -#include "flatpak-systemd-dbus.h" -#include "flatpak-document-dbus.h" -#include "lib/flatpak-error.h" +#include "flatpak-utils-private.h" +#include "flatpak-dir-private.h" +#include "flatpak-systemd-dbus-generated.h" +#include "flatpak-document-dbus-generated.h" +#include "flatpak-error.h" #define DEFAULT_SHELL "/bin/sh" -static gboolean -add_dbus_proxy_args (GPtrArray *argv_array, - GPtrArray *session_dbus_proxy_argv, - gboolean enable_session_logging, - GPtrArray *system_dbus_proxy_argv, - gboolean enable_system_logging, - GPtrArray *a11y_dbus_proxy_argv, - gboolean enable_a11y_logging, - int sync_fds[2], - const char *app_info_path, - GError **error); - static char * extract_unix_path_from_dbus_address (const char *address) { @@ -163,36 +152,8 @@ #endif /* ENABLE_XAUTH */ 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 -add_args_data_fd (GPtrArray *argv_array, - GArray *fd_array, - const char *op, - int fd, - const char *path_optional) -{ - g_autofree char *fd_str = g_strdup_printf ("%d", fd); - if (fd_array) - g_array_append_val (fd_array, fd); - - add_args (argv_array, - op, fd_str, path_optional, - NULL); -} - -static void flatpak_run_add_x11_args (FlatpakBwrap *bwrap, - gboolean allowed) + gboolean allowed) { g_autofree char *x11_socket = NULL; const char *display; @@ -227,7 +188,7 @@ x11_socket = g_strdup_printf ("/tmp/.X11-unix/X%s", d); flatpak_bwrap_add_args (bwrap, - "--bind", x11_socket, "/tmp/.X11-unix/X99", + "--ro-bind", x11_socket, "/tmp/.X11-unix/X99", NULL); flatpak_bwrap_set_env (bwrap, "DISPLAY", ":99.0", TRUE); @@ -246,7 +207,7 @@ g_autofree char *dest = g_strdup_printf ("/run/user/%d/Xauthority", getuid ()); write_xauth (d, output); - flatpak_bwrap_add_args_data_fd (bwrap, "--bind-data", tmp_fd, dest); + flatpak_bwrap_add_args_data_fd (bwrap, "--ro-bind-data", tmp_fd, dest); flatpak_bwrap_set_env (bwrap, "XAUTHORITY", dest, TRUE); } @@ -291,6 +252,32 @@ return res; } +static void +flatpak_run_add_ssh_args (FlatpakBwrap *bwrap) +{ + const char * auth_socket; + g_autofree char * sandbox_auth_socket = NULL; + + auth_socket = g_getenv ("SSH_AUTH_SOCK"); + + if (!auth_socket) + return; /* ssh agent not present */ + + if (!g_file_test (auth_socket, G_FILE_TEST_EXISTS)) + { + /* Let's clean it up, so that the application will not try to connect */ + flatpak_bwrap_unset_env (bwrap, "SSH_AUTH_SOCK"); + return; + } + + sandbox_auth_socket = g_strdup_printf ("/run/user/%d/ssh-auth", getuid ()); + + flatpak_bwrap_add_args (bwrap, + "--bind", auth_socket, sandbox_auth_socket, + NULL); + flatpak_bwrap_set_env (bwrap, "SSH_AUTH_SOCK", sandbox_auth_socket, TRUE); +} + /* Try to find a default server from a pulseaudio confguration file */ static char * flatpak_run_get_pulseaudio_server_user_config (const char *path) @@ -308,7 +295,7 @@ return NULL; } - data_stream = g_data_input_stream_new (G_INPUT_STREAM(input_stream)); + data_stream = g_data_input_stream_new (G_INPUT_STREAM (input_stream)); while (TRUE) { @@ -323,7 +310,7 @@ if (g_str_has_prefix (line, ".include ")) { - g_autofree char *rec_path = g_strdup (line+9); + 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) @@ -343,7 +330,7 @@ if (strcmp ("default-server", tokens[0]) == 0) { g_strstrip (tokens[1]); - g_debug("Found pulseaudio socket from configuration file '%s': %s", path, tokens[1]); + g_debug ("Found pulseaudio socket from configuration file '%s': %s", path, tokens[1]); return g_strdup (tokens[1]); } } @@ -356,7 +343,7 @@ static char * flatpak_run_get_pulseaudio_server (void) { - const char* pulse_clientconfig; + const char * pulse_clientconfig; char *pulse_server; g_autofree char *pulse_user_config = NULL; @@ -368,7 +355,7 @@ 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_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; @@ -391,13 +378,13 @@ const char *server = servers[i]; if (g_str_has_prefix (server, "{")) { - const char* closing = strstr (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 g_strdup (server + 5); } return NULL; @@ -480,15 +467,22 @@ } static gboolean -flatpak_run_add_system_dbus_args (FlatpakContext *context, - FlatpakBwrap *bwrap, - GPtrArray *dbus_proxy_argv, - gboolean unrestricted) +flatpak_run_add_system_dbus_args (FlatpakBwrap *app_bwrap, + FlatpakBwrap *proxy_arg_bwrap, + FlatpakContext *context, + FlatpakRunFlags flags) { + gboolean unrestricted, no_proxy; const char *dbus_address = g_getenv ("DBUS_SYSTEM_BUS_ADDRESS"); g_autofree char *real_dbus_address = NULL; g_autofree char *dbus_system_socket = NULL; + unrestricted = (context->sockets & FLATPAK_CONTEXT_SOCKET_SYSTEM_BUS) != 0; + if (unrestricted) + g_debug ("Allowing system-dbus access"); + + no_proxy = (flags & FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY) != 0; + if (dbus_address != NULL) dbus_system_socket = extract_unix_path_from_dbus_address (dbus_address); else if (g_file_test ("/var/run/dbus/system_bus_socket", G_FILE_TEST_EXISTS)) @@ -496,15 +490,14 @@ if (dbus_system_socket != NULL && unrestricted) { - flatpak_bwrap_add_args (bwrap, + flatpak_bwrap_add_args (app_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); + flatpak_bwrap_set_env (app_bwrap, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); return TRUE; } - else if (dbus_proxy_argv && - flatpak_context_get_needs_system_bus_proxy (context)) + else if (!no_proxy && flatpak_context_get_needs_system_bus_proxy (context)) { g_autofree char *proxy_socket = create_proxy_socket ("system-bus-proxy-XXXXXX"); @@ -516,14 +509,18 @@ else real_dbus_address = g_strdup_printf ("unix:path=%s", dbus_system_socket); - g_ptr_array_add (dbus_proxy_argv, g_strdup (real_dbus_address)); - g_ptr_array_add (dbus_proxy_argv, g_strdup (proxy_socket)); + flatpak_bwrap_add_args (proxy_arg_bwrap, real_dbus_address, proxy_socket, NULL); + if (!unrestricted) + flatpak_context_add_bus_filters (context, NULL, FALSE, proxy_arg_bwrap); - flatpak_bwrap_add_args (bwrap, + if ((flags & FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS) != 0) + flatpak_bwrap_add_args (proxy_arg_bwrap, "--log", NULL); + + flatpak_bwrap_add_args (app_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); + flatpak_bwrap_set_env (app_bwrap, "DBUS_SYSTEM_BUS_ADDRESS", "unix:path=/run/dbus/system_bus_socket", TRUE); return TRUE; } @@ -531,42 +528,65 @@ } static gboolean -flatpak_run_add_session_dbus_args (FlatpakBwrap *bwrap, - GPtrArray *dbus_proxy_argv, - gboolean unrestricted) +flatpak_run_add_session_dbus_args (FlatpakBwrap *app_bwrap, + FlatpakBwrap *proxy_arg_bwrap, + FlatpakContext *context, + FlatpakRunFlags flags, + const char *app_id) { + gboolean unrestricted, no_proxy; const char *dbus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS"); char *dbus_session_socket = NULL; g_autofree char *sandbox_socket_path = g_strdup_printf ("/run/user/%d/bus", getuid ()); g_autofree char *sandbox_dbus_address = g_strdup_printf ("unix:path=/run/user/%d/bus", getuid ()); + unrestricted = (context->sockets & FLATPAK_CONTEXT_SOCKET_SESSION_BUS) != 0; + if (dbus_address == NULL) return FALSE; + if (unrestricted) + g_debug ("Allowing session-dbus access"); + + no_proxy = (flags & FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY) != 0; + dbus_session_socket = extract_unix_path_from_dbus_address (dbus_address); if (dbus_session_socket != NULL && unrestricted) { - flatpak_bwrap_add_args (bwrap, + flatpak_bwrap_add_args (app_bwrap, "--bind", dbus_session_socket, sandbox_socket_path, NULL); - flatpak_bwrap_set_env (bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); + flatpak_bwrap_set_env (app_bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); return TRUE; } - else if (dbus_proxy_argv && dbus_address != NULL) + else if (!no_proxy && dbus_address != NULL) { g_autofree char *proxy_socket = create_proxy_socket ("session-bus-proxy-XXXXXX"); if (proxy_socket == NULL) return FALSE; - g_ptr_array_add (dbus_proxy_argv, g_strdup (dbus_address)); - g_ptr_array_add (dbus_proxy_argv, g_strdup (proxy_socket)); + flatpak_bwrap_add_args (proxy_arg_bwrap, dbus_address, proxy_socket, NULL); - flatpak_bwrap_add_args (bwrap, + if (!unrestricted) + { + flatpak_context_add_bus_filters (context, app_id, TRUE, proxy_arg_bwrap); + + /* Allow calling any interface+method on all portals, but only receive broadcasts under /org/desktop/portal */ + flatpak_bwrap_add_arg (proxy_arg_bwrap, + "--call=org.freedesktop.portal.*=*"); + flatpak_bwrap_add_arg (proxy_arg_bwrap, + "--broadcast=org.freedesktop.portal.*=@/org/freedesktop/portal/*"); + } + + if ((flags & FLATPAK_RUN_FLAG_LOG_SESSION_BUS) != 0) + flatpak_bwrap_add_args (proxy_arg_bwrap, "--log", NULL); + + flatpak_bwrap_add_args (app_bwrap, "--bind", proxy_socket, sandbox_socket_path, NULL); - flatpak_bwrap_set_env (bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); + flatpak_bwrap_set_env (app_bwrap, "DBUS_SESSION_BUS_ADDRESS", sandbox_dbus_address, TRUE); return TRUE; } @@ -574,9 +594,243 @@ return FALSE; } +static gboolean +flatpak_run_add_a11y_dbus_args (FlatpakBwrap *app_bwrap, + FlatpakBwrap *proxy_arg_bwrap, + FlatpakContext *context, + FlatpakRunFlags flags) +{ + g_autoptr(GDBusConnection) session_bus = NULL; + g_autofree char *a11y_address = NULL; + g_autoptr(GError) local_error = NULL; + g_autoptr(GDBusMessage) reply = NULL; + g_autoptr(GDBusMessage) msg = NULL; + g_autofree char *proxy_socket = NULL; + + if ((flags & FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY) != 0) + return FALSE; + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + if (session_bus == NULL) + return FALSE; + + msg = g_dbus_message_new_method_call ("org.a11y.Bus", "/org/a11y/bus", "org.a11y.Bus", "GetAddress"); + g_dbus_message_set_body (msg, g_variant_new ("()")); + reply = + g_dbus_connection_send_message_with_reply_sync (session_bus, msg, + G_DBUS_SEND_MESSAGE_FLAGS_NONE, + 30000, + NULL, + NULL, + NULL); + if (reply) + { + if (g_dbus_message_to_gerror (reply, &local_error)) + { + if (!g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_message ("Can't find a11y bus: %s", local_error->message); + } + else + { + g_variant_get (g_dbus_message_get_body (reply), + "(s)", &a11y_address); + } + } + + if (!a11y_address) + return FALSE; + + proxy_socket = create_proxy_socket ("a11y-bus-proxy-XXXXXX"); + if (proxy_socket == NULL) + return FALSE; + + g_autofree char *sandbox_socket_path = g_strdup_printf ("/run/user/%d/at-spi-bus", getuid ()); + g_autofree char *sandbox_dbus_address = g_strdup_printf ("unix:path=/run/user/%d/at-spi-bus", getuid ()); + + flatpak_bwrap_add_args (proxy_arg_bwrap, + a11y_address, + proxy_socket, "--filter", "--sloppy-names", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.Socket.Embed@/org/a11y/atspi/accessible/root", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.Socket.Unembed@/org/a11y/atspi/accessible/root", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.Registry.GetRegisteredEvents@/org/a11y/atspi/registry", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.GetKeystrokeListeners@/org/a11y/atspi/registry/deviceeventcontroller", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.GetDeviceEventListeners@/org/a11y/atspi/registry/deviceeventcontroller", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.NotifyListenersSync@/org/a11y/atspi/registry/deviceeventcontroller", + "--call=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.NotifyListenersAsync@/org/a11y/atspi/registry/deviceeventcontroller", + NULL); + + if ((flags & FLATPAK_RUN_FLAG_LOG_A11Y_BUS) != 0) + flatpak_bwrap_add_args (proxy_arg_bwrap, "--log", NULL); + + flatpak_bwrap_add_args (app_bwrap, + "--bind", proxy_socket, sandbox_socket_path, + NULL); + flatpak_bwrap_set_env (app_bwrap, "AT_SPI_BUS_ADDRESS", sandbox_dbus_address, TRUE); + + return TRUE; +} + +/* This wraps the argv in a bwrap call, primary to allow the + command to be run with a proper /.flatpak-info with data + taken from app_info_path */ +static gboolean +add_bwrap_wrapper (FlatpakBwrap *bwrap, + const char *app_info_path, + GError **error) +{ + glnx_autofd int app_info_fd = -1; + + g_auto(GLnxDirFdIterator) dir_iter = { 0 }; + struct dirent *dent; + g_autofree char *user_runtime_dir = realpath (g_get_user_runtime_dir (), NULL); + g_autofree char *proxy_socket_dir = g_build_filename (user_runtime_dir, ".dbus-proxy/", NULL); + + app_info_fd = open (app_info_path, O_RDONLY | O_CLOEXEC); + if (app_info_fd == -1) + return glnx_throw_errno_prefix (error, _("Failed to open app info file")); + + if (!glnx_dirfd_iterator_init_at (AT_FDCWD, "/", FALSE, &dir_iter, error)) + return FALSE; + + flatpak_bwrap_add_arg (bwrap, flatpak_get_bwrap ()); + + while (TRUE) + { + glnx_autofd int o_path_fd = -1; + struct statfs stfs; + + if (!glnx_dirfd_iterator_next_dent_ensure_dtype (&dir_iter, &dent, NULL, error)) + return FALSE; + + if (dent == NULL) + break; + + if (strcmp (dent->d_name, ".flatpak-info") == 0) + continue; + + /* O_PATH + fstatfs is the magic that we need to statfs without automounting the target */ + o_path_fd = openat (dir_iter.fd, dent->d_name, O_PATH | O_NOFOLLOW | O_CLOEXEC); + if (o_path_fd == -1 || fstatfs (o_path_fd, &stfs) != 0 || stfs.f_type == AUTOFS_SUPER_MAGIC) + continue; /* AUTOFS mounts are risky and can cause us to block (see issue #1633), so ignore it. Its unlikely the proxy needs such a directory. */ + + if (dent->d_type == DT_DIR) + { + if (strcmp (dent->d_name, "tmp") == 0 || + strcmp (dent->d_name, "var") == 0 || + strcmp (dent->d_name, "run") == 0) + flatpak_bwrap_add_arg (bwrap, "--bind"); + else + flatpak_bwrap_add_arg (bwrap, "--ro-bind"); + + flatpak_bwrap_add_arg_printf (bwrap, "/%s", dent->d_name); + flatpak_bwrap_add_arg_printf (bwrap, "/%s", dent->d_name); + } + else if (dent->d_type == DT_LNK) + { + ssize_t symlink_size; + char path_buffer[PATH_MAX + 1]; + + symlink_size = readlinkat (dir_iter.fd, dent->d_name, path_buffer, sizeof (path_buffer) - 1); + if (symlink_size < 0) + { + glnx_set_error_from_errno (error); + return FALSE; + } + path_buffer[symlink_size] = 0; + + flatpak_bwrap_add_args (bwrap, "--symlink", path_buffer, NULL); + flatpak_bwrap_add_arg_printf (bwrap, "/%s", dent->d_name); + } + } + + flatpak_bwrap_add_args (bwrap, "--bind", proxy_socket_dir, proxy_socket_dir, NULL); + + /* This is a file rather than a bind mount, because it will then + not be unmounted from the namespace when the namespace dies. */ + flatpak_bwrap_add_args_data_fd (bwrap, "--file", glnx_steal_fd (&app_info_fd), "/.flatpak-info"); + + if (!flatpak_bwrap_bundle_args (bwrap, 1, -1, FALSE, error)) + return FALSE; + + return TRUE; +} + +static gboolean +start_dbus_proxy (FlatpakBwrap *app_bwrap, + FlatpakBwrap *proxy_arg_bwrap, + const char *app_info_path, + GError **error) +{ + char x = 'x'; + const char *proxy; + g_autofree char *commandline = NULL; + + g_autoptr(FlatpakBwrap) proxy_bwrap = NULL; + int sync_fds[2] = {-1, -1}; + int proxy_start_index; + g_auto(GStrv) minimal_envp = NULL; + + minimal_envp = flatpak_run_get_minimal_env (FALSE, FALSE); + proxy_bwrap = flatpak_bwrap_new (NULL); + + if (!add_bwrap_wrapper (proxy_bwrap, app_info_path, error)) + return FALSE; + + proxy = g_getenv ("FLATPAK_DBUSPROXY"); + if (proxy == NULL) + proxy = DBUSPROXY; + + flatpak_bwrap_add_arg (proxy_bwrap, proxy); + + proxy_start_index = proxy_bwrap->argv->len; + + if (pipe2 (sync_fds, O_CLOEXEC) < 0) + { + g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), + _("Unable to create sync pipe")); + return FALSE; + } + + /* read end goes to app */ + flatpak_bwrap_add_args_data_fd (app_bwrap, "--sync-fd", sync_fds[0], NULL); + + /* write end goes to proxy */ + flatpak_bwrap_add_fd (proxy_bwrap, sync_fds[1]); + flatpak_bwrap_add_arg_printf (proxy_bwrap, "--fd=%d", sync_fds[1]); + + /* Note: This steals the fds from proxy_arg_bwrap */ + flatpak_bwrap_append_bwrap (proxy_bwrap, proxy_arg_bwrap); + + if (!flatpak_bwrap_bundle_args (proxy_bwrap, proxy_start_index, -1, TRUE, error)) + return FALSE; + + flatpak_bwrap_finish (proxy_bwrap); + + commandline = flatpak_quote_argv ((const char **) proxy_bwrap->argv->pdata, -1); + g_debug ("Running '%s'", commandline); + + if (!g_spawn_async (NULL, + (char **) proxy_bwrap->argv->pdata, + NULL, + G_SPAWN_SEARCH_PATH, + flatpak_bwrap_child_setup_cb, proxy_bwrap->fds, + NULL, error)) + return FALSE; + + /* Sync with proxy, i.e. wait until its listening on the sockets */ + if (read (sync_fds[0], &x, 1) != 1) + { + g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), + _("Failed to sync with dbus proxy")); + return FALSE; + } + + return TRUE; +} + static int -flatpak_extension_compare_by_path (gconstpointer _a, - gconstpointer _b) +flatpak_extension_compare_by_path (gconstpointer _a, + gconstpointer _b) { const FlatpakExtension *a = _a; const FlatpakExtension *b = _b; @@ -585,7 +839,7 @@ } gboolean -flatpak_run_add_extension_args (FlatpakBwrap *bwrap, +flatpak_run_add_extension_args (FlatpakBwrap *bwrap, GKeyFile *metakey, const char *full_ref, gboolean use_ld_so_cache, @@ -606,7 +860,7 @@ parts = g_strsplit (full_ref, "/", 0); if (g_strv_length (parts) != 4) - return flatpak_fail (error, "Failed to determine parts from ref: %s", full_ref); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Failed to determine parts from ref: %s"), full_ref); is_app = strcmp (parts[0], "app") == 0; @@ -739,7 +993,7 @@ } } - flatpak_bwrap_set_env (bwrap, "LD_LIBRARY_PATH", ld_library_path->str , TRUE); + flatpak_bwrap_set_env (bwrap, "LD_LIBRARY_PATH", ld_library_path->str, TRUE); } if (extensions_out) @@ -749,33 +1003,23 @@ } gboolean -flatpak_run_add_environment_args (FlatpakBwrap *bwrap, - const char *app_info_path, - FlatpakRunFlags flags, - const char *app_id, - FlatpakContext *context, - GFile *app_id_dir, +flatpak_run_add_environment_args (FlatpakBwrap *bwrap, + const char *app_info_path, + FlatpakRunFlags flags, + const char *app_id, + FlatpakContext *context, + GFile *app_id_dir, FlatpakExports **exports_out, - GCancellable *cancellable, - GError **error) + GCancellable *cancellable, + GError **error) { - gboolean unrestricted_session_bus; - gboolean unrestricted_system_bus; g_autoptr(GError) my_error = NULL; 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}; + g_autoptr(FlatpakBwrap) proxy_arg_bwrap = flatpak_bwrap_new (flatpak_bwrap_empty_env); 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); - if ((flags & FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY) == 0) - system_bus_proxy_argv = g_ptr_array_new_with_free_func (g_free); - - if ((context->shares & FLATPAK_CONTEXT_SHARED_IPC) == 0) + if ((context->shares & FLATPAK_CONTEXT_SHARED_IPC) == 0) { g_debug ("Disallowing ipc access"); flatpak_bwrap_add_args (bwrap, "--unshare-ipc", NULL); @@ -792,6 +1036,23 @@ flatpak_bwrap_add_args (bwrap, "--dev-bind", "/dev", "/dev", NULL); + /* Don't expose the host /dev/shm, just the device nodes */ + if (g_file_test ("/dev/shm", G_FILE_TEST_IS_DIR)) + flatpak_bwrap_add_args (bwrap, + "--tmpfs", "/dev/shm", + NULL); + else if (g_file_test ("/dev/shm", G_FILE_TEST_IS_SYMLINK)) + { + g_autofree char *link = flatpak_readlink ("/dev/shm", NULL); + /* On debian (with sysv init) the host /dev/shm is a symlink to /run/shm, so we can't + mount on top of it. */ + if (g_strcmp0 (link, "/run/shm") == 0) + flatpak_bwrap_add_args (bwrap, + "--dir", "/run/shm", + NULL); + else + g_warning ("Unexpected /dev/shm symlink %s", link); + } } else { @@ -814,7 +1075,7 @@ "/dev/nvidia-modeset", }; - for (i = 0; i < G_N_ELEMENTS(dri_devices); i++) + for (i = 0; i < G_N_ELEMENTS (dri_devices); i++) { if (g_file_test (dri_devices[i], G_FILE_TEST_EXISTS)) flatpak_bwrap_add_args (bwrap, "--dev-bind", dri_devices[i], dri_devices[i], NULL); @@ -844,101 +1105,20 @@ flatpak_run_add_x11_args (bwrap, allow_x11); + if (context->sockets & FLATPAK_CONTEXT_SOCKET_SSH_AUTH) + { + flatpak_run_add_ssh_args (bwrap); + } + if (context->sockets & FLATPAK_CONTEXT_SOCKET_PULSEAUDIO) { g_debug ("Allowing pulseaudio access"); 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 (bwrap, session_bus_proxy_argv, unrestricted_session_bus) && - !unrestricted_session_bus && session_bus_proxy_argv) - 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, bwrap, system_bus_proxy_argv, - unrestricted_system_bus) && - !unrestricted_system_bus && system_bus_proxy_argv) - flatpak_context_add_bus_filters (context, app_id, FALSE, system_bus_proxy_argv); - - if ((flags & FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY) == 0) - { - g_autoptr(GDBusConnection) session_bus = NULL; - g_autofree char *a11y_address = NULL; - - session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); - if (session_bus) - { - g_autoptr(GError) local_error = NULL; - g_autoptr(GDBusMessage) reply = NULL; - g_autoptr(GDBusMessage) msg = - g_dbus_message_new_method_call ("org.a11y.Bus", - "/org/a11y/bus", - "org.a11y.Bus", - "GetAddress"); - g_dbus_message_set_body (msg, g_variant_new ("()")); - reply = - g_dbus_connection_send_message_with_reply_sync (session_bus, msg, - G_DBUS_SEND_MESSAGE_FLAGS_NONE, - 30000, - NULL, - NULL, - NULL); - if (reply) - { - if (g_dbus_message_to_gerror (reply, &local_error)) - { - if (!g_error_matches (local_error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) - g_message ("Can't find a11y bus: %s", local_error->message); - } - else - { - g_variant_get (g_dbus_message_get_body (reply), - "(s)", &a11y_address); - } - } - } - - if (a11y_address) - { - g_autofree char *proxy_socket = create_proxy_socket ("a11y-bus-proxy-XXXXXX"); - if (proxy_socket) - { - g_autofree char *sandbox_socket_path = g_strdup_printf ("/run/user/%d/at-spi-bus", getuid ()); - g_autofree char *sandbox_dbus_address = g_strdup_printf ("unix:path=/run/user/%d/at-spi-bus", getuid ()); - - a11y_bus_proxy_argv = g_ptr_array_new_with_free_func (g_free); - - g_ptr_array_add (a11y_bus_proxy_argv, g_strdup (a11y_address)); - g_ptr_array_add (a11y_bus_proxy_argv, g_strdup (proxy_socket)); - g_ptr_array_add (a11y_bus_proxy_argv, g_strdup ("--filter")); - g_ptr_array_add (a11y_bus_proxy_argv, g_strdup ("--sloppy-names")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.Socket.Embed@/org/a11y/atspi/accessible/root")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.Socket.Unembed@/org/a11y/atspi/accessible/root")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.Registry.GetRegisteredEvents@/org/a11y/atspi/registry")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.GetKeystrokeListeners@/org/a11y/atspi/registry/deviceeventcontroller")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.GetDeviceEventListeners@/org/a11y/atspi/registry/deviceeventcontroller")); - g_ptr_array_add (a11y_bus_proxy_argv, - g_strdup ("--filter=org.a11y.atspi.Registry=org.a11y.atspi.DeviceEventController.NotifyListenersSync@/org/a11y/atspi/registry/deviceeventcontroller")); - 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")); - - 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); - } - } - } + flatpak_run_add_session_dbus_args (bwrap, proxy_arg_bwrap, context, flags, app_id); + flatpak_run_add_system_dbus_args (bwrap, proxy_arg_bwrap, context, flags); + flatpak_run_add_a11y_dbus_args (bwrap, proxy_arg_bwrap, context, flags); if (g_environ_getenv (bwrap->envp, "LD_LIBRARY_PATH") != NULL) { @@ -959,23 +1139,18 @@ g_clear_error (&my_error); } - 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, - sync_fds, app_info_path, error)) + if (!flatpak_bwrap_is_empty (proxy_arg_bwrap) && + !start_dbus_proxy (bwrap, proxy_arg_bwrap, app_info_path, error)) return FALSE; - if (sync_fds[1] != -1) - close (sync_fds[1]); - if (exports_out) *exports_out = g_steal_pointer (&exports); return TRUE; } -typedef struct { +typedef struct +{ const char *env; const char *val; } ExportData; @@ -1013,9 +1188,9 @@ }; static void -add_exports (GPtrArray *env_array, +add_exports (GPtrArray *env_array, const ExportData *exports, - gsize n_exports) + gsize n_exports) { int i; @@ -1096,9 +1271,9 @@ } static char ** -apply_exports (char **envp, +apply_exports (char **envp, const ExportData *exports, - gsize n_exports) + gsize n_exports) { int i; @@ -1126,7 +1301,7 @@ void flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, - GFile *app_dir) + GFile *app_dir) { g_autoptr(GFile) app_dir_data = NULL; g_autoptr(GFile) app_dir_config = NULL; @@ -1229,22 +1404,20 @@ GVariant *properties = NULL; GVariant *aux = NULL; guint32 pid; - GMainContext *main_context = NULL; GMainLoop *main_loop = NULL; struct JobData data; gboolean res = FALSE; + g_autoptr(GMainContextPopDefault) main_context = NULL; path = g_strdup_printf ("/run/user/%d/systemd/private", getuid ()); if (!g_file_test (path, G_FILE_TEST_EXISTS)) - return flatpak_fail (error, - "No systemd user session available, cgroups not available"); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, + _("No systemd user session available, cgroups not available")); - main_context = g_main_context_new (); + main_context = flatpak_main_context_new_default (); main_loop = g_main_loop_new (main_context, FALSE); - g_main_context_push_thread_default (main_context); - address = g_strconcat ("unix:path=", path, NULL); conn = g_dbus_connection_new_for_address_sync (address, @@ -1296,11 +1469,6 @@ res = TRUE; out: - if (main_context) - { - g_main_context_pop_thread_default (main_context); - g_main_context_unref (main_context); - } if (main_loop) g_main_loop_unref (main_loop); if (manager) @@ -1396,14 +1564,6 @@ } } -static void -add_default_permissions (FlatpakContext *app_context) -{ - flatpak_context_set_session_bus_policy (app_context, - "org.freedesktop.portal.*", - FLATPAK_POLICY_TALK); -} - FlatpakContext * flatpak_app_compute_permissions (GKeyFile *app_metadata, GKeyFile *runtime_metadata, @@ -1413,11 +1573,14 @@ app_context = flatpak_context_new (); - add_default_permissions (app_context); + if (runtime_metadata != NULL) + { + if (!flatpak_context_load_metadata (app_context, runtime_metadata, error)) + return NULL; - if (runtime_metadata != NULL && - !flatpak_context_load_metadata (app_context, runtime_metadata, error)) - return NULL; + /* Don't inherit any permissions from the runtime, only things like env vars. */ + flatpak_context_reset_permissions (app_context); + } if (app_metadata != NULL && !flatpak_context_load_metadata (app_context, app_metadata, error)) @@ -1426,6 +1589,103 @@ return g_steal_pointer (&app_context); } +static void +flatpak_run_gc_ids (void) +{ + g_autofree char *base_dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak", NULL); + + g_auto(GLnxDirFdIterator) iter = { 0 }; + struct dirent *dent; + + /* Clean up unused instances */ + if (!glnx_dirfd_iterator_init_at (AT_FDCWD, base_dir, FALSE, &iter, NULL)) + return; + + while (TRUE) + { + if (!glnx_dirfd_iterator_next_dent_ensure_dtype (&iter, &dent, NULL, NULL)) + break; + + if (dent == NULL) + break; + + if (dent->d_type == DT_DIR) + { + g_autofree char *ref_file = g_strconcat (dent->d_name, "/.ref", NULL); + struct stat statbuf; + struct flock l = { + .l_type = F_WRLCK, + .l_whence = SEEK_SET, + .l_start = 0, + .l_len = 0 + }; + glnx_autofd int lock_fd = openat (iter.fd, ref_file, O_RDWR | O_CLOEXEC); + if (lock_fd != -1 && + fstat (lock_fd, &statbuf) == 0 && + /* Only gc if created at least 3 secs ago, to work around race mentioned in flatpak_run_allocate_id() */ + statbuf.st_mtime + 3 < time (NULL) && + fcntl (lock_fd, F_GETLK, &l) == 0 && + l.l_type == F_UNLCK) + { + /* The instance is not used, remove it */ + g_debug ("Cleaning up unused container id %s", dent->d_name); + glnx_shutil_rm_rf_at (iter.fd, dent->d_name, NULL, NULL); + } + } + } +} + +static char * +flatpak_run_allocate_id (int *lock_fd_out) +{ + g_autofree char *base_dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak", NULL); + int count; + + g_mkdir_with_parents (base_dir, 0755); + + flatpak_run_gc_ids (); + + for (count = 0; count < 1000; count++) + { + g_autofree char *instance_id = NULL; + g_autofree char *instance_dir = NULL; + + instance_id = g_strdup_printf ("%u", g_random_int ()); + + instance_dir = g_build_filename (base_dir, instance_id, NULL); + + /* We use an atomic mkdir to ensure the instance id is unique */ + if (mkdir (instance_dir, 0755) == 0) + { + g_autofree char *lock_file = g_build_filename (instance_dir, ".ref", NULL); + glnx_autofd int lock_fd = -1; + struct flock l = { + .l_type = F_RDLCK, + .l_whence = SEEK_SET, + .l_start = 0, + .l_len = 0 + }; + + /* Then we take a file lock inside the dir, hold that during + * setup and in bwrap. Anyone trying to clean up unused + * directories need to first verify that there is a .ref + * file and take a write lock on .ref to ensure its not in + * use. */ + lock_fd = open (lock_file, O_RDWR | O_CREAT | O_CLOEXEC, 0644); + /* There is a tiny race here between the open creating the file and the lock suceeding. + We work around that by only gc:ing "old" .ref files */ + if (lock_fd != -1 && fcntl (lock_fd, F_SETLK, &l) == 0) + { + *lock_fd_out = glnx_steal_fd (&lock_fd); + g_debug ("Allocated instance id %s", instance_id); + return g_steal_pointer (&instance_id); + } + } + } + + return NULL; +} + gboolean flatpak_run_add_app_info_args (FlatpakBwrap *bwrap, GFile *app_files, @@ -1437,27 +1697,49 @@ const char *app_id, const char *app_branch, const char *runtime_ref, + GFile *app_id_dir, FlatpakContext *final_app_context, + FlatpakContext *cmdline_context, + gboolean sandbox, + gboolean build, char **app_info_path_out, + char **instance_id_host_dir_out, GError **error) { - g_autofree char *tmp_path = NULL; - int fd, fd2; + g_autofree char *info_path = NULL; + g_autofree char *bwrapinfo_path = NULL; + int fd, fd2, fd3; + g_autoptr(GKeyFile) keyfile = NULL; g_autofree char *runtime_path = NULL; g_autofree char *old_dest = g_strdup_printf ("/run/user/%d/flatpak-info", getuid ()); + g_auto(GStrv) runtime_ref_parts = g_strsplit (runtime_ref, "/", 0); const char *group; + g_autofree char *instance_id = NULL; + glnx_autofd int lock_fd = -1; + g_autofree char *instance_id_host_dir = NULL; + g_autofree char *instance_id_sandbox_dir = NULL; + g_autofree char *instance_id_lock_file = NULL; + + instance_id = flatpak_run_allocate_id (&lock_fd); + if (instance_id == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Unable to allocate instance id")); + + instance_id_host_dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak", instance_id, NULL); + instance_id_sandbox_dir = g_strdup_printf ("/run/user/%d/.flatpak/%s", getuid (), instance_id); + instance_id_lock_file = g_build_filename (instance_id_sandbox_dir, ".ref", NULL); - fd = g_file_open_tmp ("flatpak-context-XXXXXX", &tmp_path, NULL); - if (fd < 0) - { - int errsv = errno; - g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv), - _("Failed to open flatpak-info temp file: %s"), g_strerror (errsv)); - return FALSE; - } + flatpak_bwrap_add_args (bwrap, + "--ro-bind", + instance_id_host_dir, + instance_id_sandbox_dir, + "--lock-file", + instance_id_lock_file, + NULL); + /* Keep the .ref lock held until we've started bwrap to avoid races */ + flatpak_bwrap_add_noinherit_fd (bwrap, glnx_steal_fd (&lock_fd)); - close (fd); + info_path = g_build_filename (instance_id_host_dir, "info", NULL); keyfile = g_key_file_new (); @@ -1470,6 +1752,15 @@ g_key_file_set_string (keyfile, group, FLATPAK_METADATA_KEY_RUNTIME, runtime_ref); + g_key_file_set_string (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_INSTANCE_ID, instance_id); + if (app_id_dir) + { + g_autofree char *instance_path = g_file_get_path (app_id_dir); + g_key_file_set_string (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_INSTANCE_PATH, instance_path); + } + if (app_files) { g_autofree char *app_path = g_file_get_path (app_files); @@ -1494,6 +1785,8 @@ if (app_branch != NULL) g_key_file_set_string (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_BRANCH, app_branch); + g_key_file_set_string (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_ARCH, runtime_ref_parts[2]); g_key_file_set_string (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_FLATPAK_VERSION, PACKAGE_VERSION); @@ -1506,9 +1799,29 @@ g_key_file_set_boolean (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, FLATPAK_METADATA_KEY_SYSTEM_BUS_PROXY, TRUE); + if (sandbox) + g_key_file_set_boolean (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_SANDBOX, TRUE); + if (build) + g_key_file_set_boolean (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_BUILD, TRUE); + + if (cmdline_context) + { + g_autoptr(GPtrArray) cmdline_args = g_ptr_array_new_with_free_func (g_free); + flatpak_context_to_args (cmdline_context, cmdline_args); + if (cmdline_args->len > 0) + { + g_key_file_set_string_list (keyfile, FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_EXTRA_ARGS, + (const char * const *) cmdline_args->pdata, + cmdline_args->len); + } + } + flatpak_context_save_metadata (final_app_context, TRUE, keyfile); - if (!g_key_file_save_to_file (keyfile, tmp_path, error)) + if (!g_key_file_save_to_file (keyfile, info_path, error)) return FALSE; /* We want to create a file on /.flatpak-info that the app cannot modify, which @@ -1520,29 +1833,27 @@ .flatpak-info will be empty. We fix this by first creating a real file with the real info in, then bind-mounting on top of that, the same info. This way even if the bind-mount is unmounted we can find the real data. - */ + */ - fd = open (tmp_path, O_RDONLY); + fd = open (info_path, O_RDONLY); if (fd == -1) { int errsv = errno; g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv), - _("Failed to open temp file: %s"), g_strerror (errsv)); + _("Failed to open flatpak-info file: %s"), g_strerror (errsv)); return FALSE; } - fd2 = open (tmp_path, O_RDONLY); + fd2 = open (info_path, O_RDONLY); if (fd2 == -1) { close (fd); int errsv = errno; g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv), - _("Failed to open temp file: %s"), g_strerror (errsv)); + _("Failed to open flatpak-info file: %s"), g_strerror (errsv)); return FALSE; } - unlink (tmp_path); - flatpak_bwrap_add_args_data_fd (bwrap, "--file", fd, "/.flatpak-info"); flatpak_bwrap_add_args_data_fd (bwrap, @@ -1551,18 +1862,37 @@ "--symlink", "../../../.flatpak-info", old_dest, NULL); - if (app_info_path_out != NULL) + bwrapinfo_path = g_build_filename (instance_id_host_dir, "bwrapinfo.json", NULL); + fd3 = open (bwrapinfo_path, O_RDWR | O_CREAT, 0644); + if (fd3 == -1) + { + close (fd); + close (fd2); + int errsv = errno; + g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv), + _("Failed to open bwrapinfo.json file: %s"), g_strerror (errsv)); + return FALSE; + } + + flatpak_bwrap_add_args_data_fd (bwrap, "--info-fd", fd3, NULL); + + if (app_info_path_out != NULL) *app_info_path_out = g_strdup_printf ("/proc/self/fd/%d", fd); + if (instance_id_host_dir_out != NULL) + *instance_id_host_dir_out = g_steal_pointer (&instance_id_host_dir); + return TRUE; } static void -add_monitor_path_args (gboolean use_session_helper, +add_monitor_path_args (gboolean use_session_helper, FlatpakBwrap *bwrap) { g_autoptr(AutoFlatpakSessionHelper) session_helper = NULL; g_autofree char *monitor_path = NULL; + g_autofree char *pkcs11_socket_path = NULL; + g_autoptr(GVariant) session_data = NULL; if (use_session_helper) { @@ -1575,17 +1905,37 @@ } if (session_helper && - flatpak_session_helper_call_request_monitor_sync (session_helper, - &monitor_path, + flatpak_session_helper_call_request_session_sync (session_helper, + &session_data, NULL, 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); + if (g_variant_lookup (session_data, "path", "s", &monitor_path)) + 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", + "--symlink", "/run/host/monitor/timezone", "/etc/timezone", + NULL); + + if (g_variant_lookup (session_data, "pkcs11-socket", "s", &pkcs11_socket_path)) + { + g_autofree char *sandbox_pkcs11_socket_path = g_strdup_printf ("/run/user/%d/p11-kit/pkcs11", getuid ()); + const char *trusted_module_contents = + "# This overrides the runtime p11-kit-trusted module with a client one talking to the trust module on the host\n" + "module: p11-kit-client.so\n"; + + if (flatpak_bwrap_add_args_data (bwrap, "p11-kit-trust.module", + trusted_module_contents, -1, + "/etc/pkcs11/modules/p11-kit-trust.module", NULL)) + { + flatpak_bwrap_add_args (bwrap, + "--ro-bind", pkcs11_socket_path, sandbox_pkcs11_socket_path, + NULL); + flatpak_bwrap_unset_env (bwrap, "P11_KIT_SERVER_ADDRESS"); + } + } } else { @@ -1598,6 +1948,8 @@ char localtime[PATH_MAX + 1]; ssize_t symlink_size; gboolean is_reachable = FALSE; + g_autofree char *timezone = flatpak_get_timezone (); + g_autofree char *timezone_content = g_strdup_printf ("%s\n", timezone); symlink_size = readlink ("/etc/localtime", localtime, sizeof (localtime) - 1); if (symlink_size > 0) @@ -1628,6 +1980,10 @@ "--ro-bind", "/etc/localtime", "/etc/localtime", NULL); } + + flatpak_bwrap_add_args_data (bwrap, "timezone", + timezone_content, -1, "/etc/timezone", + NULL); } if (g_file_test ("/etc/resolv.conf", G_FILE_TEST_EXISTS)) @@ -1647,8 +2003,8 @@ static void add_document_portal_args (FlatpakBwrap *bwrap, - const char *app_id, - char **out_mount_path) + const char *app_id, + char **out_mount_path) { g_autoptr(GDBusConnection) session_bus = NULL; g_autofree char *doc_mount_path = NULL; @@ -1698,255 +2054,6 @@ *out_mount_path = g_steal_pointer (&doc_mount_path); } -static gchar * -join_args (GPtrArray *argv_array, gsize *len_out) -{ - gchar *string; - gchar *ptr; - gint i; - gsize len = 0; - - for (i = 0; i < argv_array->len && argv_array->pdata[i] != NULL; i++) - len += strlen (argv_array->pdata[i]) + 1; - - string = g_new (gchar, len); - *string = 0; - ptr = string; - for (i = 0; i < argv_array->len && argv_array->pdata[i] != NULL; i++) - ptr = g_stpcpy (ptr, argv_array->pdata[i]) + 1; - - *len_out = len; - return string; -} - -typedef struct { - int sync_fd; - int app_info_fd; - int bwrap_args_fd; -} DbusProxySpawnData; - -static void -dbus_spawn_child_setup (gpointer user_data) -{ - DbusProxySpawnData *data = user_data; - - /* Unset CLOEXEC */ - fcntl (data->sync_fd, F_SETFD, 0); - fcntl (data->app_info_fd, F_SETFD, 0); - fcntl (data->bwrap_args_fd, F_SETFD, 0); -} - -/* This wraps the argv in a bwrap call, primary to allow the - command to be run with a proper /.flatpak-info with data - taken from app_info_fd */ -static gboolean -prepend_bwrap_argv_wrapper (GPtrArray *argv, - int app_info_fd, - int *bwrap_fd_out, - GError **error) -{ - int i = 0; - g_auto(GLnxDirFdIterator) dir_iter = { 0 }; - struct dirent *dent; - g_autoptr(GPtrArray) bwrap_args = g_ptr_array_new_with_free_func (g_free); - gsize bwrap_args_len; - g_auto(GLnxTmpfile) args_tmpf = { 0, }; - g_autofree char *bwrap_args_data = NULL; - g_autofree char *proxy_socket_dir = g_build_filename (g_get_user_runtime_dir (), ".dbus-proxy/", NULL); - - if (!glnx_dirfd_iterator_init_at (AT_FDCWD, "/", FALSE, &dir_iter, error)) - return FALSE; - - while (TRUE) - { - if (!glnx_dirfd_iterator_next_dent_ensure_dtype (&dir_iter, &dent, NULL, error)) - return FALSE; - - if (dent == NULL) - break; - - if (strcmp (dent->d_name, ".flatpak-info") == 0) - continue; - - if (dent->d_type == DT_DIR) - { - if (strcmp (dent->d_name, "tmp") == 0 || - strcmp (dent->d_name, "var") == 0 || - strcmp (dent->d_name, "run") == 0) - g_ptr_array_add (bwrap_args, g_strdup ("--bind")); - else - g_ptr_array_add (bwrap_args, g_strdup ("--ro-bind")); - g_ptr_array_add (bwrap_args, g_strconcat ("/", dent->d_name, NULL)); - g_ptr_array_add (bwrap_args, g_strconcat ("/", dent->d_name, NULL)); - } - else if (dent->d_type == DT_LNK) - { - ssize_t symlink_size; - char path_buffer[PATH_MAX + 1]; - - symlink_size = readlinkat (dir_iter.fd, dent->d_name, path_buffer, sizeof (path_buffer) - 1); - if (symlink_size < 0) - { - glnx_set_error_from_errno (error); - return FALSE; - } - path_buffer[symlink_size] = 0; - - g_ptr_array_add (bwrap_args, g_strdup ("--symlink")); - g_ptr_array_add (bwrap_args, g_strdup (path_buffer)); - g_ptr_array_add (bwrap_args, g_strconcat ("/", dent->d_name, NULL)); - } - } - - g_ptr_array_add (bwrap_args, g_strdup ("--bind")); - g_ptr_array_add (bwrap_args, g_strdup (proxy_socket_dir)); - g_ptr_array_add (bwrap_args, g_strdup (proxy_socket_dir)); - - /* This is a file rather than a bind mount, because it will then - not be unmounted from the namespace when the namespace dies. */ - g_ptr_array_add (bwrap_args, g_strdup ("--file")); - g_ptr_array_add (bwrap_args, g_strdup_printf ("%d", app_info_fd)); - g_ptr_array_add (bwrap_args, g_strdup ("/.flatpak-info")); - g_ptr_array_add (bwrap_args, NULL); - - { - g_autofree char *commandline = flatpak_quote_argv ((const char **) bwrap_args->pdata); - flatpak_debug2 ("bwrap args '%s'", commandline); - } - - bwrap_args_data = join_args (bwrap_args, &bwrap_args_len); - 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 ())); - g_ptr_array_insert (argv, i++, g_strdup ("--args")); - g_ptr_array_insert (argv, i++, g_strdup_printf ("%d", args_tmpf.fd)); - - *bwrap_fd_out = glnx_steal_fd (&args_tmpf.fd); - return TRUE; -} - -static gboolean -has_args (GPtrArray *args) -{ - return args != NULL && args->len > 0; -} - -static void -append_proxy_args (GPtrArray *dbus_proxy_argv, - GPtrArray *args, - gboolean enable_logging) -{ - if (has_args (args)) - { - int i; - - for (i = 0; i < args->len; i++) - g_ptr_array_add (dbus_proxy_argv, g_strdup (args->pdata[i])); - - if (enable_logging) - g_ptr_array_add (dbus_proxy_argv, g_strdup ("--log")); - } -} - -static gboolean -add_dbus_proxy_args (GPtrArray *argv_array, - GPtrArray *session_dbus_proxy_argv, - gboolean enable_session_logging, - GPtrArray *system_dbus_proxy_argv, - gboolean enable_system_logging, - GPtrArray *a11y_dbus_proxy_argv, - gboolean enable_a11y_logging, - int sync_fds[2], - const char *app_info_path, - GError **error) -{ - char x = 'x'; - const char *proxy; - g_autofree char *commandline = NULL; - DbusProxySpawnData spawn_data; - glnx_autofd int app_info_fd = -1; - glnx_autofd int bwrap_args_fd = -1; - g_autoptr(GPtrArray) dbus_proxy_argv = NULL; - - if (!has_args (session_dbus_proxy_argv) && - !has_args (system_dbus_proxy_argv) && - !has_args (a11y_dbus_proxy_argv)) - return TRUE; - - if (sync_fds[0] == -1) - { - access ("sync_fds", 0); - if (pipe (sync_fds) < 0) - { - g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), - _("Unable to create sync pipe")); - return FALSE; - } - - add_args_data_fd (argv_array, NULL, - "--sync-fd", sync_fds[0], NULL); - } - - proxy = g_getenv ("FLATPAK_DBUSPROXY"); - if (proxy == NULL) - proxy = DBUSPROXY; - - dbus_proxy_argv = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (dbus_proxy_argv, g_strdup (proxy)); - g_ptr_array_add (dbus_proxy_argv, g_strdup_printf ("--fd=%d", sync_fds[1])); - - append_proxy_args (dbus_proxy_argv, session_dbus_proxy_argv, enable_session_logging); - append_proxy_args (dbus_proxy_argv, system_dbus_proxy_argv, enable_system_logging); - append_proxy_args (dbus_proxy_argv, a11y_dbus_proxy_argv, enable_a11y_logging); - - g_ptr_array_add (dbus_proxy_argv, NULL); /* NULL terminate */ - - app_info_fd = open (app_info_path, O_RDONLY); - if (app_info_fd == -1) - { - int errsv = errno; - g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errsv), - _("Failed to open app info file: %s"), g_strerror (errsv)); - return FALSE; - } - - if (!prepend_bwrap_argv_wrapper (dbus_proxy_argv, app_info_fd, &bwrap_args_fd, error)) - return FALSE; - - commandline = flatpak_quote_argv ((const char **) dbus_proxy_argv->pdata); - flatpak_debug2 ("Running '%s'", commandline); - - spawn_data.sync_fd = sync_fds[1]; - spawn_data.app_info_fd = app_info_fd; - spawn_data.bwrap_args_fd = bwrap_args_fd; - if (!g_spawn_async (NULL, - (char **) dbus_proxy_argv->pdata, - NULL, - G_SPAWN_SEARCH_PATH, - dbus_spawn_child_setup, - &spawn_data, - NULL, error)) - { - close (sync_fds[0]); - close (sync_fds[1]); - return FALSE; - } - - /* Sync with proxy, i.e. wait until its listening on the sockets */ - if (read (sync_fds[0], &x, 1) != 1) - { - g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), - _("Failed to sync with dbus proxy")); - - close (sync_fds[0]); - close (sync_fds[1]); - return FALSE; - } - - return TRUE; -} - #ifdef ENABLE_SECCOMP static const uint32_t seccomp_x86_64_extra_arches[] = { SCMP_ARCH_X86, 0, }; @@ -1964,13 +2071,15 @@ } static gboolean -setup_seccomp (FlatpakBwrap *bwrap, - const char *arch, - gulong allowed_personality, - gboolean multiarch, - gboolean devel, - GError **error) +setup_seccomp (FlatpakBwrap *bwrap, + const char *arch, + gulong allowed_personality, + FlatpakRunFlags run_flags, + GError **error) { + gboolean multiarch = (run_flags & FLATPAK_RUN_FLAG_MULTIARCH) != 0; + gboolean devel = (run_flags & FLATPAK_RUN_FLAG_DEVEL) != 0; + __attribute__((cleanup (cleanup_seccomp))) scmp_filter_ctx seccomp = NULL; /**** BEGIN NOTE ON CODE SHARING @@ -2038,7 +2147,7 @@ {SCMP_SYS (clone), &SCMP_A0 (SCMP_CMP_MASKED_EQ, CLONE_NEWUSER, CLONE_NEWUSER)}, /* Don't allow faking input to the controlling tty (CVE-2017-5226) */ - {SCMP_SYS (ioctl), &SCMP_A1(SCMP_CMP_EQ, (int)TIOCSTI)}, + {SCMP_SYS (ioctl), &SCMP_A1 (SCMP_CMP_EQ, (int) TIOCSTI)}, }; struct @@ -2051,31 +2160,31 @@ */ {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 (personality), &SCMP_A0 (SCMP_CMP_NE, allowed_personality)}, {SCMP_SYS (ptrace)} }; /* Blacklist all but unix, inet, inet6 and netlink */ - int socket_family_blacklist[] = { - AF_AX25, - AF_IPX, - AF_APPLETALK, - AF_NETROM, - AF_BRIDGE, - AF_ATMPVC, - AF_X25, - AF_ROSE, - AF_DECnet, - AF_NETBEUI, - AF_SECURITY, - AF_KEY, - AF_NETLINK + 1, /* Last gets CMP_GE, so order is important */ + struct + { + int family; + FlatpakRunFlags flags_mask; + } socket_family_whitelist[] = { + /* NOTE: Keep in numerical order */ + { AF_UNSPEC, 0 }, + { AF_LOCAL, 0 }, + { AF_INET, 0 }, + { AF_INET6, 0 }, + { AF_NETLINK, 0 }, + { AF_CAN, FLATPAK_RUN_FLAG_CANBUS }, + { AF_BLUETOOTH, FLATPAK_RUN_FLAG_BLUETOOTH }, }; + int last_allowed_family; int i, r; g_auto(GLnxTmpfile) seccomp_tmpf = { 0, }; seccomp = seccomp_init (SCMP_ACT_ALLOW); if (!seccomp) - return flatpak_fail (error, "Initialize seccomp failed"); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Initialize seccomp failed")); if (arch != NULL) { @@ -2114,7 +2223,7 @@ couldn't continue running. */ r = seccomp_arch_add (seccomp, arch_id); if (r < 0 && r != -EEXIST) - return flatpak_fail (error, "Failed to add architecture to seccomp filter"); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Failed to add architecture to seccomp filter")); if (multiarch && extra_arches != NULL) { @@ -2123,7 +2232,7 @@ { r = seccomp_arch_add (seccomp, extra_arches[i]); if (r < 0 && r != -EEXIST) - return flatpak_fail (error, "Failed to add multiarch architecture to seccomp filter"); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Failed to add multiarch architecture to seccomp filter")); } } } @@ -2142,7 +2251,7 @@ else r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 0); if (r < 0 && r == -EFAULT /* unknown syscall */) - return flatpak_fail (error, "Failed to block syscall %d", scall); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Failed to block syscall %d"), scall); } if (!devel) @@ -2156,27 +2265,38 @@ r = seccomp_rule_add (seccomp, SCMP_ACT_ERRNO (EPERM), scall, 0); if (r < 0 && r == -EFAULT /* unknown syscall */) - return flatpak_fail (error, "Failed to block syscall %d", scall); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Failed to block syscall %d"), scall); } } /* Socket filtering doesn't work on e.g. i386, so ignore failures here * However, we need to user seccomp_rule_add_exact to avoid libseccomp doing * something else: https://github.com/seccomp/libseccomp/issues/8 */ - for (i = 0; i < G_N_ELEMENTS (socket_family_blacklist); i++) + last_allowed_family = -1; + for (i = 0; i < G_N_ELEMENTS (socket_family_whitelist); i++) { - int family = socket_family_blacklist[i]; - if (i == G_N_ELEMENTS (socket_family_blacklist) - 1) - seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_GE, family)); - else - seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_EQ, family)); + int family = socket_family_whitelist[i].family; + int disallowed; + + if (socket_family_whitelist[i].flags_mask != 0 && + (socket_family_whitelist[i].flags_mask & run_flags) != socket_family_whitelist[i].flags_mask) + continue; + + for (disallowed = last_allowed_family + 1; disallowed < family; disallowed++) + { + /* Blacklist the in-between valid families */ + seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_EQ, disallowed)); + } + last_allowed_family = family; } + /* Blacklist the rest */ + seccomp_rule_add_exact (seccomp, SCMP_ACT_ERRNO (EAFNOSUPPORT), SCMP_SYS (socket), 1, SCMP_A0 (SCMP_CMP_GE, last_allowed_family + 1)); if (!glnx_open_anonymous_tmpfile (O_RDWR | O_CLOEXEC, &seccomp_tmpf, error)) return FALSE; if (seccomp_export_bpf (seccomp, seccomp_tmpf.fd) != 0) - return flatpak_fail (error, "Failed to export bpf"); + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Failed to export bpf")); lseek (seccomp_tmpf.fd, 0, SEEK_SET); @@ -2189,7 +2309,7 @@ static void flatpak_run_setup_usr_links (FlatpakBwrap *bwrap, - GFile *runtime_files) + GFile *runtime_files) { const char *usr_links[] = {"lib", "lib32", "lib64", "bin", "sbin"}; int i; @@ -2220,18 +2340,26 @@ FlatpakRunFlags flags, GError **error) { - g_autofree char *run_dir = g_strdup_printf ("/run/user/%d", getuid ()); + g_autofree char *run_dir = NULL; g_autofree char *passwd_contents = NULL; g_autofree char *group_contents = NULL; - struct group *g = getgrgid (getgid ()); + const char *pkcs11_conf_contents = NULL; + struct group *g; gulong pers; + gid_t gid = getgid (); g_autoptr(GFile) etc = NULL; + g = getgrgid (gid); + if (g == NULL) + return flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Invalid group: %d"), gid); + + run_dir = g_strdup_printf ("/run/user/%d", getuid ()); + passwd_contents = g_strdup_printf ("%s:x:%d:%d:%s:%s:%s\n" "nfsnobody:x:65534:65534:Unmapped user:/:/sbin/nologin\n", g_get_user_name (), - getuid (), getgid (), + getuid (), gid, g_get_real_name (), g_get_home_dir (), DEFAULT_SHELL); @@ -2239,11 +2367,19 @@ group_contents = g_strdup_printf ("%s:x:%d:%s\n" "nfsnobody:x:65534:\n", g->gr_name, - getgid (), g_get_user_name ()); + gid, g_get_user_name ()); + + pkcs11_conf_contents = + "# Disable user pkcs11 config, because the host modules don't work in the runtime\n" + "user-config: none\n"; + + if ((flags & FLATPAK_RUN_FLAG_NO_PROC) == 0) + flatpak_bwrap_add_args (bwrap, + "--proc", "/proc", + NULL); flatpak_bwrap_add_args (bwrap, "--unshare-pid", - "--proc", "/proc", "--dir", "/tmp", "--dir", "/var/tmp", "--dir", "/run/host", @@ -2255,6 +2391,8 @@ "--ro-bind", "/sys/class", "/sys/class", "--ro-bind", "/sys/dev", "/sys/dev", "--ro-bind", "/sys/devices", "/sys/devices", + /* glib uses this like /etc/timezone */ + "--symlink", "/etc/timezone", "/var/db/zoneinfo", NULL); if (flags & FLATPAK_RUN_FLAG_DIE_WITH_PARENT) @@ -2274,6 +2412,9 @@ if (!flatpak_bwrap_add_args_data (bwrap, "group", group_contents, -1, "/etc/group", error)) return FALSE; + if (!flatpak_bwrap_add_args_data (bwrap, "pkcs11.conf", pkcs11_conf_contents, -1, "/etc/pkcs11/pkcs11.conf", error)) + return FALSE; + if (g_file_test ("/etc/machine-id", G_FILE_TEST_EXISTS)) 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)) @@ -2307,7 +2448,9 @@ strcmp (dent->d_name, "resolv.conf") == 0 || strcmp (dent->d_name, "host.conf") == 0 || strcmp (dent->d_name, "hosts") == 0 || - strcmp (dent->d_name, "localtime") == 0) + strcmp (dent->d_name, "localtime") == 0 || + strcmp (dent->d_name, "timezone") == 0 || + strcmp (dent->d_name, "pkcs11") == 0) continue; src = g_build_filename (flatpak_file_get_path_cached (etc), dent->d_name, NULL); @@ -2325,7 +2468,7 @@ } else { - flatpak_bwrap_add_args (bwrap, "--bind", src, dest, NULL); + flatpak_bwrap_add_args (bwrap, "--ro-bind", src, dest, NULL); } } } @@ -2361,12 +2504,7 @@ personality (pers); #ifdef ENABLE_SECCOMP - if (!setup_seccomp (bwrap, - arch, - pers, - (flags & FLATPAK_RUN_FLAG_MULTIARCH) != 0, - (flags & FLATPAK_RUN_FLAG_DEVEL) != 0, - error)) + if (!setup_seccomp (bwrap, arch, pers, flags, error)) return FALSE; #endif @@ -2376,40 +2514,16 @@ return TRUE; } -/* Unset FD_CLOEXEC on the array of fds passed in @user_data */ -static void -child_setup (gpointer user_data) -{ - GArray *fd_array = user_data; - int i; - - /* If no fd_array was specified, don't care. */ - if (fd_array == NULL) - return; - - /* Otherwise, mark not - close-on-exec all the fds in the array */ - for (i = 0; i < fd_array->len; i++) - { - int fd = g_array_index (fd_array, int, i); - - /* We also seek all fds to the start, because this lets - us use the same fd_array multiple times */ - if (lseek (fd, 0, SEEK_SET) < 0) - g_printerr ("lseek error in child setup"); - - fcntl (fd, F_SETFD, 0); - } -} - static gboolean -forward_file (XdpDbusDocuments *documents, - const char *app_id, - const char *file, - char **out_doc_id, - GError **error) +forward_file (XdpDbusDocuments *documents, + const char *app_id, + const char *file, + char **out_doc_id, + GError **error) { int fd, fd_id; g_autofree char *doc_id = NULL; + g_autoptr(GUnixFDList) fd_list = NULL; const char *perms[] = { "read", "write", NULL }; @@ -2430,7 +2544,11 @@ NULL, NULL, error)) - return FALSE; + { + if (error) + g_dbus_error_strip_remote_error (*error); + return FALSE; + } if (!xdp_dbus_documents_call_grant_permissions_sync (documents, doc_id, @@ -2438,7 +2556,11 @@ perms, NULL, error)) - return FALSE; + { + if (error) + g_dbus_error_strip_remote_error (*error); + return FALSE; + } *out_doc_id = g_steal_pointer (&doc_id); @@ -2446,14 +2568,14 @@ } static gboolean -add_rest_args (const char *app_id, +add_rest_args (FlatpakBwrap *bwrap, + const char *app_id, FlatpakExports *exports, - gboolean file_forwarding, - const char *doc_mount_path, - GPtrArray *argv_array, - char *args[], - int n_args, - GError **error) + gboolean file_forwarding, + const char *doc_mount_path, + char *args[], + int n_args, + GError **error) { g_autoptr(XdpDbusDocuments) documents = NULL; gboolean forwarding = FALSE; @@ -2501,7 +2623,7 @@ { if (g_str_has_prefix (args[i], "file:")) file = g_file_new_for_uri (args[i]); - else if (G_IS_DIR_SEPARATOR(args[i][0])) + else if (G_IS_DIR_SEPARATOR (args[i][0])) file = g_file_new_for_path (args[i]); } else @@ -2513,7 +2635,7 @@ { g_autofree char *doc_id = NULL; g_autofree char *basename = NULL; - char *doc_path; + g_autofree char *doc_path = NULL; if (!forward_file (documents, app_id, flatpak_file_get_path_cached (file), &doc_id, error)) return FALSE; @@ -2530,10 +2652,10 @@ } g_debug ("Forwarding file '%s' as '%s' to %s", args[i], doc_path, app_id); - g_ptr_array_add (argv_array, doc_path); + flatpak_bwrap_add_arg (bwrap, doc_path); } else - g_ptr_array_add (argv_array, g_strdup (args[i])); + flatpak_bwrap_add_arg (bwrap, args[i]); } return TRUE; @@ -2541,7 +2663,7 @@ FlatpakContext * flatpak_context_load_for_deploy (FlatpakDeploy *deploy, - GError **error) + GError **error) { g_autoptr(FlatpakContext) context = NULL; g_autoptr(FlatpakContext) overrides = NULL; @@ -2559,17 +2681,18 @@ } FlatpakContext * -flatpak_context_load_for_app (const char *app_id, - GError **error) +flatpak_context_load_for_app (const char *app_id, + GError **error) { g_autofree char *app_ref = NULL; + g_autoptr(FlatpakDeploy) app_deploy = NULL; app_ref = flatpak_find_current_ref (app_id, NULL, error); if (app_ref == NULL) return NULL; - app_deploy = flatpak_find_deploy_for_ref (app_ref, NULL, error); + app_deploy = flatpak_find_deploy_for_ref (app_ref, NULL, NULL, error); if (app_deploy == NULL) return NULL; @@ -2577,26 +2700,26 @@ } static char * -calculate_ld_cache_checksum (GVariant *app_deploy_data, - GVariant *runtime_deploy_data, +calculate_ld_cache_checksum (GVariant *app_deploy_data, + GVariant *runtime_deploy_data, const char *app_extensions, const char *runtime_extensions) { g_autoptr(GChecksum) ld_so_checksum = g_checksum_new (G_CHECKSUM_SHA256); if (app_deploy_data) - g_checksum_update (ld_so_checksum, (guchar *)flatpak_deploy_data_get_commit (app_deploy_data), -1); - g_checksum_update (ld_so_checksum, (guchar *)flatpak_deploy_data_get_commit (runtime_deploy_data), -1); + g_checksum_update (ld_so_checksum, (guchar *) flatpak_deploy_data_get_commit (app_deploy_data), -1); + g_checksum_update (ld_so_checksum, (guchar *) flatpak_deploy_data_get_commit (runtime_deploy_data), -1); if (app_extensions) - g_checksum_update (ld_so_checksum, (guchar *)app_extensions, -1); + g_checksum_update (ld_so_checksum, (guchar *) app_extensions, -1); if (runtime_extensions) - g_checksum_update (ld_so_checksum, (guchar *)runtime_extensions, -1); + g_checksum_update (ld_so_checksum, (guchar *) runtime_extensions, -1); return g_strdup (g_checksum_get_string (ld_so_checksum)); } static gboolean -add_ld_so_conf (FlatpakBwrap *bwrap, - GError **error) +add_ld_so_conf (FlatpakBwrap *bwrap, + GError **error) { const char *contents = "include /run/flatpak/ld.so.conf.d/app-*.conf\n" @@ -2609,14 +2732,14 @@ } static int -regenerate_ld_cache (GPtrArray *base_argv_array, - GArray *base_fd_array, - GFile *app_id_dir, - const char *checksum, - GFile *runtime_files, - gboolean generate_ld_so_conf, - GCancellable *cancellable, - GError **error) +regenerate_ld_cache (GPtrArray *base_argv_array, + GArray *base_fd_array, + GFile *app_id_dir, + const char *checksum, + GFile *runtime_files, + gboolean generate_ld_so_conf, + GCancellable *cancellable, + GError **error) { g_autoptr(FlatpakBwrap) bwrap = NULL; g_autoptr(GArray) combined_fd_array = NULL; @@ -2648,7 +2771,6 @@ minimal_envp = flatpak_run_get_minimal_env (FALSE, FALSE); bwrap = flatpak_bwrap_new (minimal_envp); - flatpak_bwrap_add_args (bwrap, flatpak_get_bwrap (), NULL); flatpak_bwrap_append_args (bwrap, base_argv_array); @@ -2673,12 +2795,18 @@ "--proc", "/proc", "--dev", "/dev", "--bind", flatpak_file_get_path_cached (ld_so_dir), "/run/ld-so-cache-dir", + NULL); + + if (!flatpak_bwrap_bundle_args (bwrap, 1, -1, FALSE, error)) + return -1; + + flatpak_bwrap_add_args (bwrap, "ldconfig", "-X", "-C", sandbox_cache_path, NULL); - g_ptr_array_add (bwrap->argv, NULL); + flatpak_bwrap_finish (bwrap); - commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata); - flatpak_debug2 ("Running: '%s'", commandline); + commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata, -1); + g_debug ("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); @@ -2688,23 +2816,23 @@ (char **) bwrap->argv->pdata, bwrap->envp, G_SPAWN_SEARCH_PATH, - child_setup, combined_fd_array, + flatpak_bwrap_child_setup_cb, combined_fd_array, NULL, NULL, &exit_status, error)) return -1; - if (!WIFEXITED(exit_status) || WEXITSTATUS(exit_status) != 0) + if (!WIFEXITED (exit_status) || WEXITSTATUS (exit_status) != 0) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - _("ldconfig failed, exit status %d"), exit_status); + flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, + _("ldconfig failed, exit status %d"), exit_status); return -1; } ld_so_fd = open (flatpak_file_get_path_cached (ld_so_cache), O_RDONLY); if (ld_so_fd < 0) { - flatpak_fail (error, "Can't open generated ld.so.cache"); + flatpak_fail_error (error, FLATPAK_ERROR_SETUP_FAILED, _("Can't open generated ld.so.cache")); return -1; } @@ -2733,6 +2861,7 @@ FlatpakContext *extra_context, const char *custom_runtime, const char *custom_runtime_version, + const char *custom_runtime_commit, FlatpakRunFlags flags, const char *custom_command, char *args[], @@ -2747,26 +2876,24 @@ g_autoptr(GFile) runtime_files = NULL; g_autoptr(GFile) bin_ldconfig = NULL; g_autoptr(GFile) app_id_dir = NULL; + g_autoptr(GFile) real_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(FlatpakBwrap) bwrap = NULL; - g_auto(GLnxTmpfile) arg_tmpf = { 0, }; - g_autoptr(GPtrArray) real_argv_array = NULL; const char *command = "/bin/sh"; g_autoptr(GError) my_error = NULL; g_auto(GStrv) runtime_parts = NULL; int i; g_autofree char *app_info_path = NULL; + g_autofree char *instance_id_host_dir = NULL; g_autoptr(FlatpakContext) app_context = NULL; g_autoptr(FlatpakContext) overrides = NULL; g_autoptr(FlatpakExports) exports = NULL; g_auto(GStrv) app_ref_parts = NULL; g_autofree char *commandline = NULL; - int commandline_2_start; - g_autofree char *commandline2 = NULL; g_autofree char *doc_mount_path = NULL; g_autofree char *app_extensions = NULL; g_autofree char *runtime_extensions = NULL; @@ -2775,6 +2902,8 @@ g_autoptr(GFile) runtime_ld_so_conf = NULL; gboolean generate_ld_so_conf = TRUE; gboolean use_ld_so_cache = TRUE; + gboolean sandboxed = (flags & FLATPAK_RUN_FLAG_SANDBOX) != 0; + struct stat s; app_ref_parts = flatpak_decompose_ref (app_ref, error); @@ -2782,6 +2911,7 @@ return FALSE; bwrap = flatpak_bwrap_new (NULL); + flatpak_bwrap_add_arg (bwrap, flatpak_get_bwrap ()); if (app_deploy == NULL) { @@ -2814,7 +2944,7 @@ runtime_parts = g_strsplit (default_runtime, "/", 0); if (g_strv_length (runtime_parts) != 3) - return flatpak_fail (error, "Wrong number of components in runtime %s", default_runtime); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Wrong number of components in runtime %s"), default_runtime); if (custom_runtime) { @@ -2844,7 +2974,7 @@ if (runtime_ref == NULL) return FALSE; - runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, cancellable, error); + runtime_deploy = flatpak_find_deploy_for_ref (runtime_ref, custom_runtime_commit, cancellable, error); if (runtime_deploy == NULL) return FALSE; @@ -2864,6 +2994,15 @@ flatpak_context_merge (app_context, overrides); } + if (sandboxed) + { + flatpak_context_make_sandboxed (app_context); + flags |= + FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY | + FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY | + FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY; + } + if (extra_context) flatpak_context_merge (app_context, extra_context); @@ -2875,13 +3014,24 @@ if (app_deploy != NULL) { app_files = flatpak_deploy_get_files (app_deploy); - if ((app_id_dir = flatpak_ensure_data_dir (app_ref_parts[1], cancellable, error)) == NULL) + + real_app_id_dir = flatpak_ensure_data_dir (app_ref_parts[1], cancellable, error); + if (real_app_id_dir == NULL) return FALSE; + + if (!sandboxed) + app_id_dir = g_object_ref (real_app_id_dir); } flatpak_run_apply_env_default (bwrap, use_ld_so_cache); flatpak_run_apply_env_vars (bwrap, app_context); + if (real_app_id_dir) + { + g_autoptr(GFile) sandbox_dir = g_file_get_child (real_app_id_dir, "sandbox"); + flatpak_bwrap_set_env (bwrap, "FLATPAK_SANDBOX_DIR", flatpak_file_get_path_cached (sandbox_dir), TRUE); + } + flatpak_bwrap_add_args (bwrap, "--ro-bind", flatpak_file_get_path_cached (runtime_files), "/usr", "--lock-file", "/usr/.ref", @@ -2913,24 +3063,20 @@ if (use_ld_so_cache) { checksum = calculate_ld_cache_checksum (app_deploy_data, runtime_deploy_data, - app_extensions, runtime_extensions); + 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); + 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); + return FALSE; + flatpak_bwrap_add_fd (bwrap, ld_so_fd); } - if (flatpak_context_allows_features (app_context, FLATPAK_CONTEXT_FEATURE_DEVEL)) - flags |= FLATPAK_RUN_FLAG_DEVEL; - - if (flatpak_context_allows_features (app_context, FLATPAK_CONTEXT_FEATURE_MULTIARCH)) - flags |= FLATPAK_RUN_FLAG_MULTIARCH; + flags |= flatpak_context_get_run_flags (app_context); if (!flatpak_run_setup_base_argv (bwrap, runtime_files, app_id_dir, app_ref_parts[2], flags, error)) return FALSE; @@ -2944,17 +3090,22 @@ if (ld_so_fd != -1) { /* Don't add to fd_array, its already there */ - add_args_data_fd (bwrap->argv, NULL, "--ro-bind-data", ld_so_fd, "/etc/ld.so.cache"); + flatpak_bwrap_add_arg (bwrap, "--ro-bind-data"); + flatpak_bwrap_add_arg_printf (bwrap, "%d", ld_so_fd); + flatpak_bwrap_add_arg (bwrap, "/etc/ld.so.cache"); } 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)) + runtime_ref, app_id_dir, app_context, extra_context, + sandboxed, FALSE, + &app_info_path, &instance_id_host_dir, error)) return FALSE; - add_document_portal_args (bwrap, app_ref_parts[1], &doc_mount_path); + if (!sandboxed && !(flags & FLATPAK_RUN_FLAG_NO_DOCUMENTS_PORTAL)) + add_document_portal_args (bwrap, app_ref_parts[1], &doc_mount_path); if (!flatpak_run_add_environment_args (bwrap, app_info_path, flags, app_ref_parts[1], app_context, app_id_dir, &exports, cancellable, error)) @@ -2988,51 +3139,53 @@ command = default_command; } - real_argv_array = g_ptr_array_new_with_free_func (g_free); - g_ptr_array_add (real_argv_array, g_strdup (flatpak_get_bwrap ())); - - { - gsize len; - g_autofree char *args = join_args (bwrap->argv, &len); - - if (!flatpak_buffer_to_sealed_memfd_or_tmpfile (&arg_tmpf, "bwrap-args", args, len, error)) - return FALSE; - - add_args_data_fd (real_argv_array, bwrap->fds, - "--args", glnx_steal_fd (&arg_tmpf.fd), NULL); - } + if (!flatpak_bwrap_bundle_args (bwrap, 1, -1, FALSE, error)) + return FALSE; - commandline_2_start = real_argv_array->len; + flatpak_bwrap_add_arg (bwrap, command); - g_ptr_array_add (real_argv_array, g_strdup (command)); - if (!add_rest_args (app_ref_parts[1], exports, (flags & FLATPAK_RUN_FLAG_FILE_FORWARDING) != 0, + if (!add_rest_args (bwrap, app_ref_parts[1], + exports, (flags & FLATPAK_RUN_FLAG_FILE_FORWARDING) != 0, doc_mount_path, - real_argv_array, args, n_args, error)) + args, n_args, error)) return FALSE; - g_ptr_array_add (real_argv_array, NULL); - g_ptr_array_add (bwrap->argv, NULL); + flatpak_bwrap_finish (bwrap); - 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); + commandline = flatpak_quote_argv ((const char **) bwrap->argv->pdata, -1); + g_debug ("Running '%s'", commandline); if ((flags & FLATPAK_RUN_FLAG_BACKGROUND) != 0) { + GPid child_pid; + char pid_str[64]; + g_autofree char *pid_path = NULL; + if (!g_spawn_async (NULL, - (char **) real_argv_array->pdata, + (char **) bwrap->argv->pdata, bwrap->envp, G_SPAWN_SEARCH_PATH, - child_setup, bwrap->fds, - NULL, + flatpak_bwrap_child_setup_cb, bwrap->fds, + &child_pid, error)) return FALSE; + + g_snprintf (pid_str, sizeof (pid_str), "%d", child_pid); + pid_path = g_build_filename (instance_id_host_dir, "pid", NULL); + g_file_set_contents (pid_path, pid_str, -1, NULL); } else { + char pid_str[64]; + g_autofree char *pid_path = NULL; + + g_snprintf (pid_str, sizeof (pid_str), "%d", getpid ()); + pid_path = g_build_filename (instance_id_host_dir, "pid", NULL); + g_file_set_contents (pid_path, pid_str, -1, NULL); + /* Ensure we unset O_CLOEXEC */ - child_setup (bwrap->fds); - if (execvpe (flatpak_get_bwrap (), (char **) real_argv_array->pdata, bwrap->envp) == -1) + flatpak_bwrap_child_setup_cb (bwrap->fds); + if (execvpe (flatpak_get_bwrap (), (char **) bwrap->argv->pdata, bwrap->envp) == -1) { g_set_error_literal (error, G_IO_ERROR, g_io_error_from_errno (errno), _("Unable to start app")); diff -Nru flatpak-0.11.3/common/flatpak-run.h flatpak-1.0.7/common/flatpak-run.h --- flatpak-0.11.3/common/flatpak-run.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-run.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,181 +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 - */ - -#ifndef __FLATPAK_RUN_H__ -#define __FLATPAK_RUN_H__ - -#include "libglnx/libglnx.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); - -/* See flatpak-metadata(5) */ - -#define FLATPAK_METADATA_GROUP_APPLICATION "Application" -#define FLATPAK_METADATA_GROUP_RUNTIME "Runtime" -#define FLATPAK_METADATA_KEY_COMMAND "command" -#define FLATPAK_METADATA_KEY_NAME "name" -#define FLATPAK_METADATA_KEY_REQUIRED_FLATPAK "required-flatpak" -#define FLATPAK_METADATA_KEY_RUNTIME "runtime" -#define FLATPAK_METADATA_KEY_SDK "sdk" -#define FLATPAK_METADATA_KEY_TAGS "tags" - -#define FLATPAK_METADATA_GROUP_CONTEXT "Context" -#define FLATPAK_METADATA_KEY_SHARED "shared" -#define FLATPAK_METADATA_KEY_SOCKETS "sockets" -#define FLATPAK_METADATA_KEY_FILESYSTEMS "filesystems" -#define FLATPAK_METADATA_KEY_PERSISTENT "persistent" -#define FLATPAK_METADATA_KEY_DEVICES "devices" -#define FLATPAK_METADATA_KEY_FEATURES "features" - -#define FLATPAK_METADATA_GROUP_INSTANCE "Instance" -#define FLATPAK_METADATA_KEY_APP_PATH "app-path" -#define FLATPAK_METADATA_KEY_APP_COMMIT "app-commit" -#define FLATPAK_METADATA_KEY_APP_EXTENSIONS "app-extensions" -#define FLATPAK_METADATA_KEY_BRANCH "branch" -#define FLATPAK_METADATA_KEY_FLATPAK_VERSION "flatpak-version" -#define FLATPAK_METADATA_KEY_RUNTIME_PATH "runtime-path" -#define FLATPAK_METADATA_KEY_RUNTIME_COMMIT "runtime-commit" -#define FLATPAK_METADATA_KEY_RUNTIME_EXTENSIONS "runtime-extensions" -#define FLATPAK_METADATA_KEY_SESSION_BUS_PROXY "session-bus-proxy" -#define FLATPAK_METADATA_KEY_SYSTEM_BUS_PROXY "system-bus-proxy" - -#define FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY "Session Bus Policy" -#define FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY "System Bus Policy" -#define FLATPAK_METADATA_GROUP_PREFIX_POLICY "Policy " -#define FLATPAK_METADATA_GROUP_ENVIRONMENT "Environment" - -#define FLATPAK_METADATA_GROUP_PREFIX_EXTENSION "Extension " -#define FLATPAK_METADATA_KEY_ADD_LD_PATH "add-ld-path" -#define FLATPAK_METADATA_KEY_AUTODELETE "autodelete" -#define FLATPAK_METADATA_KEY_DIRECTORY "directory" -#define FLATPAK_METADATA_KEY_DOWNLOAD_IF "download-if" -#define FLATPAK_METADATA_KEY_ENABLE_IF "enable-if" -#define FLATPAK_METADATA_KEY_MERGE_DIRS "merge-dirs" -#define FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD "no-autodownload" -#define FLATPAK_METADATA_KEY_SUBDIRECTORIES "subdirectories" -#define FLATPAK_METADATA_KEY_SUBDIRECTORY_SUFFIX "subdirectory-suffix" -#define FLATPAK_METADATA_KEY_LOCALE_SUBSET "locale-subset" -#define FLATPAK_METADATA_KEY_VERSION "version" -#define FLATPAK_METADATA_KEY_VERSIONS "versions" - -#ifdef FLATPAK_ENABLE_P2P -#define FLATPAK_METADATA_KEY_COLLECTION_ID "collection-id" -#endif /* FLATPAK_ENABLE_P2P */ - -#define FLATPAK_METADATA_GROUP_EXTRA_DATA "Extra Data" -#define FLATPAK_METADATA_KEY_EXTRA_DATA_CHECKSUM "checksum" -#define FLATPAK_METADATA_KEY_EXTRA_DATA_INSTALLED_SIZE "installed-size" -#define FLATPAK_METADATA_KEY_EXTRA_DATA_NAME "name" -#define FLATPAK_METADATA_KEY_EXTRA_DATA_SIZE "size" -#define FLATPAK_METADATA_KEY_EXTRA_DATA_URI "uri" -#define FLATPAK_METADATA_KEY_NO_RUNTIME "NoRuntime" - -#define FLATPAK_METADATA_GROUP_EXTENSION_OF "ExtensionOf" -#define FLATPAK_METADATA_KEY_PRIORITY "priority" -#define FLATPAK_METADATA_KEY_REF "ref" - - -typedef enum { - FLATPAK_RUN_FLAG_DEVEL = (1 << 0), - FLATPAK_RUN_FLAG_BACKGROUND = (1 << 1), - FLATPAK_RUN_FLAG_LOG_SESSION_BUS = (1 << 2), - FLATPAK_RUN_FLAG_LOG_SYSTEM_BUS = (1 << 3), - FLATPAK_RUN_FLAG_NO_SESSION_HELPER = (1 << 4), - FLATPAK_RUN_FLAG_MULTIARCH = (1 << 5), - FLATPAK_RUN_FLAG_WRITABLE_ETC = (1 << 6), - FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY = (1 << 7), - FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY = (1 << 8), - FLATPAK_RUN_FLAG_SET_PERSONALITY = (1 << 9), - FLATPAK_RUN_FLAG_FILE_FORWARDING = (1 << 10), - FLATPAK_RUN_FLAG_DIE_WITH_PARENT = (1 << 11), - FLATPAK_RUN_FLAG_LOG_A11Y_BUS = (1 << 12), - FLATPAK_RUN_FLAG_NO_A11Y_BUS_PROXY = (1 << 13), -} FlatpakRunFlags; - -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 (FlatpakBwrap *bwrap, - const char *app_info_path, - FlatpakRunFlags flags, - const char *app_id, - FlatpakContext *context, - GFile *app_id_dir, - FlatpakExports **exports_out, - GCancellable *cancellable, - GError **error); -char ** flatpak_run_get_minimal_env (gboolean devel, gboolean use_ld_so_cache); -void flatpak_run_apply_env_default (FlatpakBwrap *bwrap, gboolean use_ld_so_cache); -void flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, - GFile *app_dir); -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 (FlatpakBwrap *bwrap, - GFile *runtime_files, - GFile *app_id_dir, - const char *arch, - FlatpakRunFlags flags, - GError **error); -gboolean flatpak_run_add_app_info_args (FlatpakBwrap *bwrap, - GFile *app_files, - GVariant *app_deploy_data, - const char *app_extensions, - GFile *runtime_files, - GVariant *runtime_deploy_data, - const char *runtime_extensions, - const char *app_id, - const char *app_branch, - const char *runtime_ref, - FlatpakContext *final_app_context, - char **app_info_path_out, - GError **error); - -gboolean flatpak_run_app (const char *app_ref, - FlatpakDeploy *app_deploy, - FlatpakContext *extra_context, - const char *custom_runtime, - const char *custom_runtime_version, - FlatpakRunFlags flags, - const char *custom_command, - char *args[], - int n_args, - GCancellable *cancellable, - GError **error); - - -#endif /* __FLATPAK_RUN_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-run-private.h flatpak-1.0.7/common/flatpak-run-private.h --- flatpak-0.11.3/common/flatpak-run-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-run-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,176 @@ +/* + * 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 + */ + +#ifndef __FLATPAK_RUN_H__ +#define __FLATPAK_RUN_H__ + +#include "libglnx/libglnx.h" +#include "flatpak-common-types-private.h" +#include "flatpak-context-private.h" +#include "flatpak-bwrap-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-exports-private.h" + +gboolean flatpak_run_in_transient_unit (const char *app_id, + GError **error); + +/* See flatpak-metadata(5) */ + +#define FLATPAK_METADATA_GROUP_APPLICATION "Application" +#define FLATPAK_METADATA_GROUP_RUNTIME "Runtime" +#define FLATPAK_METADATA_KEY_COMMAND "command" +#define FLATPAK_METADATA_KEY_NAME "name" +#define FLATPAK_METADATA_KEY_REQUIRED_FLATPAK "required-flatpak" +#define FLATPAK_METADATA_KEY_RUNTIME "runtime" +#define FLATPAK_METADATA_KEY_SDK "sdk" +#define FLATPAK_METADATA_KEY_TAGS "tags" + +#define FLATPAK_METADATA_GROUP_CONTEXT "Context" +#define FLATPAK_METADATA_KEY_SHARED "shared" +#define FLATPAK_METADATA_KEY_SOCKETS "sockets" +#define FLATPAK_METADATA_KEY_FILESYSTEMS "filesystems" +#define FLATPAK_METADATA_KEY_PERSISTENT "persistent" +#define FLATPAK_METADATA_KEY_DEVICES "devices" +#define FLATPAK_METADATA_KEY_FEATURES "features" + +#define FLATPAK_METADATA_GROUP_INSTANCE "Instance" +#define FLATPAK_METADATA_KEY_INSTANCE_PATH "instance-path" +#define FLATPAK_METADATA_KEY_INSTANCE_ID "instance-id" +#define FLATPAK_METADATA_KEY_APP_PATH "app-path" +#define FLATPAK_METADATA_KEY_APP_COMMIT "app-commit" +#define FLATPAK_METADATA_KEY_APP_EXTENSIONS "app-extensions" +#define FLATPAK_METADATA_KEY_ARCH "arch" +#define FLATPAK_METADATA_KEY_BRANCH "branch" +#define FLATPAK_METADATA_KEY_FLATPAK_VERSION "flatpak-version" +#define FLATPAK_METADATA_KEY_RUNTIME_PATH "runtime-path" +#define FLATPAK_METADATA_KEY_RUNTIME_COMMIT "runtime-commit" +#define FLATPAK_METADATA_KEY_RUNTIME_EXTENSIONS "runtime-extensions" +#define FLATPAK_METADATA_KEY_SESSION_BUS_PROXY "session-bus-proxy" +#define FLATPAK_METADATA_KEY_SYSTEM_BUS_PROXY "system-bus-proxy" +#define FLATPAK_METADATA_KEY_EXTRA_ARGS "extra-args" +#define FLATPAK_METADATA_KEY_SANDBOX "sandbox" +#define FLATPAK_METADATA_KEY_BUILD "build" + +#define FLATPAK_METADATA_GROUP_SESSION_BUS_POLICY "Session Bus Policy" +#define FLATPAK_METADATA_GROUP_SYSTEM_BUS_POLICY "System Bus Policy" +#define FLATPAK_METADATA_GROUP_PREFIX_POLICY "Policy " +#define FLATPAK_METADATA_GROUP_ENVIRONMENT "Environment" + +#define FLATPAK_METADATA_GROUP_PREFIX_EXTENSION "Extension " +#define FLATPAK_METADATA_KEY_ADD_LD_PATH "add-ld-path" +#define FLATPAK_METADATA_KEY_AUTODELETE "autodelete" +#define FLATPAK_METADATA_KEY_DIRECTORY "directory" +#define FLATPAK_METADATA_KEY_DOWNLOAD_IF "download-if" +#define FLATPAK_METADATA_KEY_ENABLE_IF "enable-if" +#define FLATPAK_METADATA_KEY_AUTOPRUNE_UNLESS "autoprune-unless" +#define FLATPAK_METADATA_KEY_MERGE_DIRS "merge-dirs" +#define FLATPAK_METADATA_KEY_NO_AUTODOWNLOAD "no-autodownload" +#define FLATPAK_METADATA_KEY_SUBDIRECTORIES "subdirectories" +#define FLATPAK_METADATA_KEY_SUBDIRECTORY_SUFFIX "subdirectory-suffix" +#define FLATPAK_METADATA_KEY_LOCALE_SUBSET "locale-subset" +#define FLATPAK_METADATA_KEY_VERSION "version" +#define FLATPAK_METADATA_KEY_VERSIONS "versions" + +#define FLATPAK_METADATA_KEY_COLLECTION_ID "collection-id" + +#define FLATPAK_METADATA_GROUP_EXTRA_DATA "Extra Data" +#define FLATPAK_METADATA_KEY_EXTRA_DATA_CHECKSUM "checksum" +#define FLATPAK_METADATA_KEY_EXTRA_DATA_INSTALLED_SIZE "installed-size" +#define FLATPAK_METADATA_KEY_EXTRA_DATA_NAME "name" +#define FLATPAK_METADATA_KEY_EXTRA_DATA_SIZE "size" +#define FLATPAK_METADATA_KEY_EXTRA_DATA_URI "uri" +#define FLATPAK_METADATA_KEY_NO_RUNTIME "NoRuntime" + +#define FLATPAK_METADATA_GROUP_EXTENSION_OF "ExtensionOf" +#define FLATPAK_METADATA_KEY_PRIORITY "priority" +#define FLATPAK_METADATA_KEY_REF "ref" +#define FLATPAK_METADATA_KEY_TAG "tag" + +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 (FlatpakBwrap *bwrap, + const char *app_info_path, + FlatpakRunFlags flags, + const char *app_id, + FlatpakContext *context, + GFile *app_id_dir, + FlatpakExports **exports_out, + GCancellable *cancellable, + GError **error); +char ** flatpak_run_get_minimal_env (gboolean devel, + gboolean use_ld_so_cache); +void flatpak_run_apply_env_default (FlatpakBwrap *bwrap, + gboolean use_ld_so_cache); +void flatpak_run_apply_env_appid (FlatpakBwrap *bwrap, + GFile *app_dir); +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 (FlatpakBwrap *bwrap, + GFile *runtime_files, + GFile *app_id_dir, + const char *arch, + FlatpakRunFlags flags, + GError **error); +gboolean flatpak_run_add_app_info_args (FlatpakBwrap *bwrap, + GFile *app_files, + GVariant *app_deploy_data, + const char *app_extensions, + GFile *runtime_files, + GVariant *runtime_deploy_data, + const char *runtime_extensions, + const char *app_id, + const char *app_branch, + const char *runtime_ref, + GFile *app_id_dir, + FlatpakContext *final_app_context, + FlatpakContext *cmdline_context, + gboolean sandbox, + gboolean build, + char **app_info_path_out, + char **host_instance_id_host_dir_out, + GError **error); + +gboolean flatpak_run_app (const char *app_ref, + FlatpakDeploy *app_deploy, + FlatpakContext *extra_context, + const char *custom_runtime, + const char *custom_runtime_version, + const char *custom_runtime_commit, + FlatpakRunFlags flags, + const char *custom_command, + char *args[], + int n_args, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_RUN_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-table-printer.c flatpak-1.0.7/common/flatpak-table-printer.c --- flatpak-0.11.3/common/flatpak-table-printer.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-table-printer.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,241 +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 "flatpak-table-printer.h" -#include "flatpak-utils.h" - -#include -#include -#include -#include - - -typedef struct { - char *text; - int align; -} Cell; - -static void -free_cell (gpointer data) -{ - Cell *cell = data; - - g_free (cell->text); - g_free (cell); -} - -struct FlatpakTablePrinter -{ - GPtrArray *titles; - GPtrArray *rows; - GPtrArray *current; - int n_columns; -}; - -FlatpakTablePrinter * -flatpak_table_printer_new (void) -{ - FlatpakTablePrinter *printer = g_new0 (FlatpakTablePrinter, 1); - - printer->titles = g_ptr_array_new_with_free_func (g_free); - printer->rows = g_ptr_array_new_with_free_func ((GDestroyNotify) g_ptr_array_unref); - printer->current = g_ptr_array_new_with_free_func (free_cell); - - return printer; -} - -void -flatpak_table_printer_free (FlatpakTablePrinter *printer) -{ - g_ptr_array_free (printer->titles, TRUE); - g_ptr_array_free (printer->rows, TRUE); - g_ptr_array_free (printer->current, TRUE); - g_free (printer); -} - -void -flatpak_table_printer_set_column_title (FlatpakTablePrinter *printer, - int column, - const char *text) -{ - g_ptr_array_insert (printer->titles, column, g_strdup (text)); -} - -void -flatpak_table_printer_add_aligned_column (FlatpakTablePrinter *printer, - const char *text, - int align) -{ - Cell *cell = g_new (Cell, 1); - cell->text = text ? g_strdup (text) : g_strdup (""); - cell->align = align; - g_ptr_array_add (printer->current, cell); -} - -static const char * -find_decimal_point (const char *text) -{ - struct lconv *locale_data; - - locale_data = localeconv (); - return strstr (text, locale_data->decimal_point); -} - -void -flatpak_table_printer_add_decimal_column (FlatpakTablePrinter *printer, - const char *text) -{ - const char *decimal; - int align = -1; - - decimal = find_decimal_point (text); - if (decimal) - align = decimal - text; - - flatpak_table_printer_add_aligned_column (printer, text, align); -} - -void -flatpak_table_printer_add_column (FlatpakTablePrinter *printer, - const char *text) -{ - flatpak_table_printer_add_aligned_column (printer, text, -1); -} - -void -flatpak_table_printer_add_column_len (FlatpakTablePrinter *printer, - const char *text, - gsize len) -{ - Cell *cell = g_new (Cell, 1); - cell->text = text ? g_strndup (text, len) : g_strdup (""); - cell->align = -1; - g_ptr_array_add (printer->current, cell); -} - -void -flatpak_table_printer_append_with_comma (FlatpakTablePrinter *printer, - const char *text) -{ - Cell *cell; - char *new; - - g_assert (printer->current->len > 0); - - cell = g_ptr_array_index (printer->current, printer->current->len - 1); - - if (cell->text[0] != 0) - new = g_strconcat (cell->text, ",", text, NULL); - else - new = g_strdup (text); - - g_free (cell->text); - cell->text = new; -} - - -void -flatpak_table_printer_finish_row (FlatpakTablePrinter *printer) -{ - if (printer->current->len == 0) - return; /* Ignore empty rows */ - - printer->n_columns = MAX (printer->n_columns, printer->current->len); - g_ptr_array_add (printer->rows, printer->current); - printer->current = g_ptr_array_new_with_free_func (free_cell); -} - -void -flatpak_table_printer_print (FlatpakTablePrinter *printer) -{ - g_autofree int *widths = NULL; - g_autofree int *lwidths = NULL; - g_autofree int *rwidths = NULL; - int i, j; - - if (printer->current->len != 0) - flatpak_table_printer_finish_row (printer); - - widths = g_new0 (int, printer->n_columns); - lwidths = g_new0 (int, printer->n_columns); - rwidths = g_new0 (int, printer->n_columns); - - for (i = 0; i < printer->titles->len && i < printer->n_columns; i++) - { - char *title = g_ptr_array_index (printer->titles, i); - - if (title) - widths[i] = MAX (widths[i], strlen (title)); - } - - for (i = 0; i < printer->rows->len; i++) - { - GPtrArray *row = g_ptr_array_index (printer->rows, i); - - for (j = 0; j < row->len; j++) - { - Cell *cell = g_ptr_array_index (row, j); - int width; - - width = strlen (cell->text); - widths[j] = MAX (widths[j], width); - if (cell->align >= 0) - { - lwidths[j] = MAX (lwidths[j], cell->align); - rwidths[j] = MAX (rwidths[j], width - cell->align); - } - } - } - - if (flatpak_fancy_output () && printer->titles->len > 0) - { - g_print (FLATPAK_ANSI_BOLD_ON); - for (i = 0; i < printer->titles->len && i < printer->n_columns; i++) - { - char *title = g_ptr_array_index (printer->titles, i); - - g_print ("%s%-*s", (i == 0) ? "" : " ", widths[i], title); - } - g_print (FLATPAK_ANSI_BOLD_OFF); - g_print ("\n"); - } - - for (i = 0; i < printer->rows->len; i++) - { - GPtrArray *row = g_ptr_array_index (printer->rows, i); - - for (j = 0; j < row->len; j++) - { - Cell *cell = g_ptr_array_index (row, j); - 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", cell->text, (j < row->len - 1) ? "\t" : ""); - } - g_print ("\n"); - } -} diff -Nru flatpak-0.11.3/common/flatpak-table-printer.h flatpak-1.0.7/common/flatpak-table-printer.h --- flatpak-0.11.3/common/flatpak-table-printer.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-table-printer.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +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 - */ - -#ifndef __FLATPAK_TABLE_PRINTER_H__ -#define __FLATPAK_TABLE_PRINTER_H__ - -#include - -typedef struct FlatpakTablePrinter FlatpakTablePrinter; - -FlatpakTablePrinter *flatpak_table_printer_new (void); -void flatpak_table_printer_free (FlatpakTablePrinter *printer); -void flatpak_table_printer_set_column_title (FlatpakTablePrinter *printer, - int column, - const char *title); -void flatpak_table_printer_add_column (FlatpakTablePrinter *printer, - const char *text); -void flatpak_table_printer_add_aligned_column (FlatpakTablePrinter *printer, - const char *text, - int align); -void flatpak_table_printer_add_decimal_column (FlatpakTablePrinter *printer, - const char *text); -void flatpak_table_printer_add_column_len (FlatpakTablePrinter *printer, - const char *text, - gsize len); -void flatpak_table_printer_append_with_comma (FlatpakTablePrinter *printer, - const char *text); -void flatpak_table_printer_finish_row (FlatpakTablePrinter *printer); -void flatpak_table_printer_print (FlatpakTablePrinter *printer); - -#endif /* __FLATPAK_TABLE_PRINTER_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-transaction.c flatpak-1.0.7/common/flatpak-transaction.c --- flatpak-0.11.3/common/flatpak-transaction.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-transaction.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,2877 @@ +/* + * Copyright © 2016 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 "flatpak-transaction-private.h" +#include "flatpak-installation-private.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" + +/** + * SECTION:flatpak-transaction + * @Title: FlatpakTransaction + * @Short_description: Transaction information + * + * FlatpakTransaction is an object representing an install/update + * transaction. You create an object like this using flatpak_transaction_new_for_installation() + * and then you add all the operations (installs, updates, etc) you wish to do. Then + * you start the transaction with flatpak_transaction_run() which will resolve all kinds + * of dependencies and report progress and status while downloading and installing these. + * + * A transaction is a blocking operation, and all signals are emitted in the same thread. + * This means you should either handle the signals directly (say, by doing blocking console + * interaction, or by just returning without interaction), or run the operation in a separate + * thread and do your own forwarding to the GUI thread. + * + * Despite the name, a FlatpakTransaction is more like a batch operation than a transaction + * in the database sense. Individual operations are carried out sequentially, and are atomic. + * They become visible to the system as they are completed. When an error occurs, already + * completed operations are not rolled back. + * + * The FlatpakTransaction API is threadsafe in the sense that it is safe to run two + * transactions at the same time, in different threads (or processes). + */ + +/* This is an internal-only element of FlatpakTransactionOperationType */ +#define FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE FLATPAK_TRANSACTION_OPERATION_LAST_TYPE + 1 + +struct _FlatpakTransactionOperation +{ + GObject parent; + + char *remote; + char *ref; + /* NULL means unspecified (normally keep whatever was there before), [] means force everything */ + char **subpaths; + char *commit; + GFile *bundle; + GBytes *external_metadata; + FlatpakTransactionOperationType kind; + gboolean non_fatal; + gboolean failed; + gboolean skip; + + gboolean resolved; + char *resolved_commit; + GBytes *resolved_metadata; + GKeyFile *resolved_metakey; + GBytes *resolved_old_metadata; + GKeyFile *resolved_old_metakey; + int run_after_count; + int run_after_prio; /* Higher => run later (when it becomes runnable). Used to run related ops (runtime extensions) before deps (apps using the runtime) */ + GList *run_before_ops; + FlatpakTransactionOperation *fail_if_op_fails; /* main app/runtime for related extensions, runtime for apps */ +}; + +typedef struct _FlatpakTransactionPrivate FlatpakTransactionPrivate; + +typedef struct _BundleData BundleData; + +struct _BundleData +{ + GFile *file; + GBytes *gpg_data; +}; + +struct _FlatpakTransactionPrivate +{ + GObject parent; + + FlatpakInstallation *installation; + FlatpakDir *dir; + GHashTable *last_op_for_ref; + GHashTable *remote_states; /* (element-type utf8 FlatpakRemoteState) */ + GPtrArray *extra_dependency_dirs; + GList *ops; + GPtrArray *added_origin_remotes; + + GList *flatpakrefs; /* GKeyFiles */ + GList *bundles; /* BundleData */ + + FlatpakTransactionOperation *current_op; + + gboolean no_pull; + gboolean no_deploy; + gboolean disable_static_deltas; + gboolean disable_prune; + gboolean disable_deps; + gboolean disable_related; + gboolean reinstall; + gboolean force_uninstall; + char *default_arch; +}; + +enum { + NEW_OPERATION, + OPERATION_DONE, + OPERATION_ERROR, + CHOOSE_REMOTE_FOR_REF, + END_OF_LIFED, + READY, + ADD_NEW_REMOTE, + LAST_SIGNAL +}; + +enum { + PROP_0, + PROP_INSTALLATION, +}; + +struct _FlatpakTransactionProgress +{ + GObject parent; + + OstreeAsyncProgress *ostree_progress; + char *status; + gboolean estimating; + int progress; + + gboolean done; +}; + +enum { + CHANGED, + LAST_PROGRESS_SIGNAL +}; + +static BundleData * +bundle_data_new (GFile *file, + GBytes *gpg_data) +{ + BundleData *data = g_new0 (BundleData, 1); + + data->file = g_object_ref (file); + if (gpg_data) + data->gpg_data = g_bytes_ref (gpg_data); + + return data; +} + +static void +bundle_data_free (BundleData *data) +{ + g_clear_object (&data->file); + g_clear_object (&data->gpg_data); + g_free (data); +} + +static guint progress_signals[LAST_SIGNAL] = { 0 }; + +/** + * SECTION:flatpak-transaction-progress + * @Title: FlatpakTransactionProgress + * @Short_description: Progress of an operation + * + * FlatpakTransactionProgress is an object that represents the progress + * of a single operation in a transaction. You obtain a FlatpakTransactionProgress + * with the #FlatpakTransaction::new-operation signal. + */ + +G_DEFINE_TYPE (FlatpakTransactionProgress, flatpak_transaction_progress, G_TYPE_OBJECT) + +/** + * flatpak_transaction_progress_set_update_frequency: + * @self: a #FlatpakTransactionProgress + * @update_frequency: the update frequency, in milliseconds + * + * Sets how often progress should be updated. + */ +void +flatpak_transaction_progress_set_update_frequency (FlatpakTransactionProgress *self, + guint update_frequency) +{ + g_object_set_data (G_OBJECT (self->ostree_progress), "update-frequency", GUINT_TO_POINTER (update_frequency)); +} + +/** + * flatpak_transaction_progress_get_status: + * @self: a #FlatpakTransactionProgress + * + * Gets the current status string + * + * Returns: (transfer none): the current status + */ +char * +flatpak_transaction_progress_get_status (FlatpakTransactionProgress *self) +{ + return g_strdup (self->status); +} + +/** + * flatpak_transaction_progress_get_is_estimating: + * @self: a #FlatpakTransactionProgress + * + * Gets whether the progress is currently estimating + * + * Returns: whether we're estimating + */ +gboolean +flatpak_transaction_progress_get_is_estimating (FlatpakTransactionProgress *self) +{ + return self->estimating; +} + +/** + * flatpak_transaction_progress_get_progress: + * @self: a #FlatpakTransactionProgress + * + * Gets the current progress. + * + * Returns: the current progress, as an integer between 0 and 100 + */ +int +flatpak_transaction_progress_get_progress (FlatpakTransactionProgress *self) +{ + return self->progress; +} + +static void +flatpak_transaction_progress_finalize (GObject *object) +{ + FlatpakTransactionProgress *self = (FlatpakTransactionProgress *) object; + + g_free (self->status); + g_object_unref (self->ostree_progress); + + G_OBJECT_CLASS (flatpak_transaction_progress_parent_class)->finalize (object); +} + +static void +flatpak_transaction_progress_class_init (FlatpakTransactionProgressClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = flatpak_transaction_progress_finalize; + + /** + * FlatpakTransactionProgress::changed: + * @object: A #FlatpakTransactionProgress + * + * Emitted when some detail of the progress object changes, you can call the various methods to get the current status. + */ + progress_signals[CHANGED] = + g_signal_new ("changed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 0); +} + +static void +got_progress_cb (const char *status, + guint progress, + gboolean estimating, + gpointer user_data) +{ + FlatpakTransactionProgress *p = user_data; + + g_free (p->status); + p->status = g_strdup (status); + p->progress = progress; + p->estimating = estimating; + + if (!p->done) + g_signal_emit (p, progress_signals[CHANGED], 0); +} + +static void +flatpak_transaction_progress_init (FlatpakTransactionProgress *self) +{ + self->status = g_strdup ("Initializing"); + self->estimating = TRUE; + self->ostree_progress = flatpak_progress_new (got_progress_cb, self); +} + +static void +flatpak_transaction_progress_done (FlatpakTransactionProgress *self) +{ + ostree_async_progress_finish (self->ostree_progress); + self->done = TRUE; +} + +static FlatpakTransactionProgress * +flatpak_transaction_progress_new (void) +{ + return g_object_new (FLATPAK_TYPE_TRANSACTION_PROGRESS, NULL); +} + +static guint signals[LAST_SIGNAL] = { 0 }; + +static void initable_iface_init (GInitableIface *initable_iface); + +G_DEFINE_TYPE_WITH_CODE (FlatpakTransaction, flatpak_transaction, G_TYPE_OBJECT, + G_ADD_PRIVATE (FlatpakTransaction) + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init)) + +static gboolean +transaction_is_local_only (FlatpakTransaction *self, + FlatpakTransactionOperationType kind) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + return priv->no_pull || kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL; +} + +static gboolean +remote_name_is_file (const char *remote_name) +{ + return remote_name != NULL && + g_str_has_prefix (remote_name, "file://"); +} + +/** + * flatpak_transaction_add_dependency_source: + * @self: a #FlatpakTransaction + * @installation: a #FlatpakInstallation + * + * Adds an extra installation as a source for application dependencies. + * This means that applications can be installed in this transaction relying + * on runtimes from this additional installation (wheres it would normally + * install required runtimes that are not installed in the installation + * the transaction works on). + */ +void +flatpak_transaction_add_dependency_source (FlatpakTransaction *self, + FlatpakInstallation *installation) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_ptr_array_add (priv->extra_dependency_dirs, + flatpak_installation_clone_dir_noensure (installation)); +} + +/** + * flatpak_transaction_add_default_dependency_sources: + * @self: a #FlatpakTransaction + * + * Similar to flatpak_transaction_add_dependency_source(), but adds + * all the default installations, which means all the defined system-wide + * (but not per-user) installations. + */ +void +flatpak_transaction_add_default_dependency_sources (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GPtrArray) system_dirs = NULL; + GFile *path = flatpak_dir_get_path (priv->dir); + int i; + + system_dirs = flatpak_dir_get_system_list (NULL, NULL); + if (system_dirs == NULL) + return; + + for (i = 0; i < system_dirs->len; i++) + { + FlatpakDir *system_dir = g_ptr_array_index (system_dirs, i); + GFile *system_path = flatpak_dir_get_path (system_dir); + + if (g_file_equal (path, system_path)) + continue; + + g_ptr_array_add (priv->extra_dependency_dirs, g_object_ref (system_dir)); + } +} + +/* Check if the ref is in the dir, or in the extra dependency source dir, in case its a + * user-dir or another system-wide installation. We want to avoid depending + * on user-installed things when installing to the system dir. + */ +static gboolean +ref_is_installed (FlatpakTransaction *self, + const char *ref, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GFile) deploy_dir = NULL; + FlatpakDir *dir = priv->dir; + int i; + + deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, NULL); + if (deploy_dir != NULL) + return TRUE; + + for (i = 0; i < priv->extra_dependency_dirs->len; i++) + { + FlatpakDir *dependency_dir = g_ptr_array_index (priv->extra_dependency_dirs, i); + + deploy_dir = flatpak_dir_get_if_deployed (dependency_dir, ref, NULL, NULL); + if (deploy_dir != NULL) + return TRUE; + } + + return FALSE; +} + +static gboolean +dir_ref_is_installed (FlatpakDir *dir, const char *ref, char **remote_out, GVariant **deploy_data_out) +{ + g_autoptr(GVariant) deploy_data = NULL; + + deploy_data = flatpak_dir_get_deploy_data (dir, ref, NULL, NULL); + if (deploy_data == NULL) + return FALSE; + + if (remote_out) + *remote_out = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); + + if (deploy_data_out) + *deploy_data_out = g_variant_ref (deploy_data); + + return TRUE; +} + +/** + * SECTION:flatpak-transaction-operation + * @Title: FlatpakTransactionOperation + * @Short_description: Operation in a transaction + * + * FlatpakTransactionOperation is an object that represents a single operation + * in a transaction. You receive a FlatpakTransactionOperation object with the + * #FlatpakTransaction::new-operation signal. + */ + +G_DEFINE_TYPE (FlatpakTransactionOperation, flatpak_transaction_operation, G_TYPE_OBJECT) + +static void +flatpak_transaction_operation_finalize (GObject *object) +{ + FlatpakTransactionOperation *self = (FlatpakTransactionOperation *) object; + + g_free (self->remote); + g_free (self->ref); + g_free (self->commit); + g_strfreev (self->subpaths); + g_clear_object (&self->bundle); + if (self->external_metadata) + g_bytes_unref (self->external_metadata); + g_free (self->resolved_commit); + if (self->resolved_metadata) + g_bytes_unref (self->resolved_metadata); + if (self->resolved_metakey) + g_key_file_unref (self->resolved_metakey); + if (self->resolved_old_metadata) + g_bytes_unref (self->resolved_old_metadata); + if (self->resolved_old_metakey) + g_key_file_unref (self->resolved_old_metakey); + g_list_free (self->run_before_ops); + + G_OBJECT_CLASS (flatpak_transaction_operation_parent_class)->finalize (object); +} + +static void +flatpak_transaction_operation_class_init (FlatpakTransactionOperationClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->finalize = flatpak_transaction_operation_finalize; +} + +static void +flatpak_transaction_operation_init (FlatpakTransactionOperation *self) +{ +} + +static FlatpakTransactionOperation * +flatpak_transaction_operation_new (const char *remote, + const char *ref, + const char **subpaths, + const char *commit, + GFile *bundle, + FlatpakTransactionOperationType kind) +{ + FlatpakTransactionOperation *self; + + self = g_object_new (FLATPAK_TYPE_TRANSACTION_OPERATION, NULL); + + self->remote = g_strdup (remote); + self->ref = g_strdup (ref); + self->subpaths = g_strdupv ((char **) subpaths); + self->commit = g_strdup (commit); + if (bundle) + self->bundle = g_object_ref (bundle); + self->kind = kind; + + return self; +} + +/** + * flatpak_transaction_operation_get_operation_type: + * @self: a #FlatpakTransactionOperation + * + * Gets the type of the operation. + * + * Returns: the type of operation, as #FlatpakTransactionOperationType + */ +FlatpakTransactionOperationType +flatpak_transaction_operation_get_operation_type (FlatpakTransactionOperation *self) +{ + return self->kind; +} + +/** + * flatpak_transaction_operation_get_ref: + * @self: a #FlatpakTransactionOperation + * + * Gets the ref that the operation applies to. + * + * Returns: (transfer none): the ref + */ +const char * +flatpak_transaction_operation_get_ref (FlatpakTransactionOperation *self) +{ + return self->ref; +} + +/** + * flatpak_transaction_operation_get_remote: + * @self: a #FlatpakTransactionOperation + * + * Gets the remote that the operation applies to. + * + * Returns: (transfer none): the remote + */ +const char * +flatpak_transaction_operation_get_remote (FlatpakTransactionOperation *self) +{ + return self->remote; +} + +/** + * flatpak_transaction_operation_type_to_string: + * @kind: a #FlatpakTransactionOperationType + * + * Converts the operation type to a string. + * + * Returns: (transfer none): a string representing @kind + */ +const char * +flatpak_transaction_operation_type_to_string (FlatpakTransactionOperationType kind) +{ + if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL) + return "install"; + if (kind == FLATPAK_TRANSACTION_OPERATION_UPDATE) + return "update"; + if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) + return "install-bundle"; + if (kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + return "uninstall"; + return NULL; +} + +/** + * flatpak_transaction_operation_get_bundle_path: + * @self: a #FlatpakTransactionOperation + * + * Gets the path to the bundle. + * + * Returns: (transfer none): the bundle #GFile or %NULL + */ +GFile * +flatpak_transaction_operation_get_bundle_path (FlatpakTransactionOperation *self) +{ + return self->bundle; +} + +/** + * flatpak_transaction_operation_get_commit: + * @self: a #FlatpakTransactionOperation + * + * Gets the commit ID for the operation. + * + * This information is available when the transaction is resolved, + * i.e. when #FlatpakTransaction::ready is emitted. + * + * Returns: (transfer none): the commit ID + */ +const char * +flatpak_transaction_operation_get_commit (FlatpakTransactionOperation *self) +{ + return self->resolved_commit; +} + +/** + * flatpak_transaction_operation_get_metadata: + * @self: a #FlatpakTransactionOperation + * + * Gets the metadata that will be applicable when the + * operation is done. + * + * This can be compared to the current metadata returned + * by flatpak_transaction_operation_get_old_metadata() + * to find new required permissions and similar changes. + * + * This information is available when the transaction is resolved, + * i.e. when #FlatpakTransaction::ready is emitted. + * + * Returns: (transfer none): the metadata #GKeyFile + */ +GKeyFile * +flatpak_transaction_operation_get_metadata (FlatpakTransactionOperation *self) +{ + return self->resolved_metakey; +} + +/** + * flatpak_transaction_operation_get_old_metadata: + * @self: a #FlatpakTransactionOperation + * + * Gets the metadata current metadata for the ref that @self works on. + * Also see flatpak_transaction_operation_get_metadata(). + * + * This information is available when the transaction is resolved, + * i.e. when #FlatpakTransaction::ready is emitted. + * + * Returns: (transfer none): the old metadata #GKeyFile + */ +GKeyFile * +flatpak_transaction_operation_get_old_metadata (FlatpakTransactionOperation *self) +{ + return self->resolved_old_metakey; +} + +/** + * flatpak_transaction_is_empty: + * @self: a #FlatpakTransaction + * + * Returns whether the transaction contains any operations. + * + * Returns: %TRUE if the transaction is empty + */ +gboolean +flatpak_transaction_is_empty (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + return priv->ops == NULL; +} + +static void +flatpak_transaction_finalize (GObject *object) +{ + FlatpakTransaction *self = (FlatpakTransaction *) object; + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_clear_object (&priv->installation); + + g_list_free_full (priv->flatpakrefs, (GDestroyNotify) g_key_file_unref); + g_list_free_full (priv->bundles, (GDestroyNotify) bundle_data_free); + g_free (priv->default_arch); + g_hash_table_unref (priv->last_op_for_ref); + g_hash_table_unref (priv->remote_states); + g_list_free_full (priv->ops, (GDestroyNotify) g_object_unref); + g_clear_object (&priv->dir); + + g_ptr_array_unref (priv->added_origin_remotes); + + g_ptr_array_free (priv->extra_dependency_dirs, TRUE); + + G_OBJECT_CLASS (flatpak_transaction_parent_class)->finalize (object); +} + +static void +flatpak_transaction_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + FlatpakTransaction *self = FLATPAK_TRANSACTION (object); + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + switch (prop_id) + { + case PROP_INSTALLATION: + g_clear_object (&priv->installation); + priv->installation = g_value_dup_object (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static gboolean +signal_accumulator_false_abort (GSignalInvocationHint *ihint, + GValue *return_accu, + const GValue *handler_return, + gpointer dummy) +{ + gboolean continue_emission; + gboolean signal_continue; + + signal_continue = g_value_get_boolean (handler_return); + g_value_set_boolean (return_accu, signal_continue); + continue_emission = signal_continue; + + return continue_emission; +} + +static void +flatpak_transaction_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + FlatpakTransaction *self = FLATPAK_TRANSACTION (object); + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + switch (prop_id) + { + case PROP_INSTALLATION: + g_value_set_object (value, priv->installation); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static gboolean +flatpak_transaction_ready (FlatpakTransaction *transaction) +{ + return TRUE; +} + +static gboolean +flatpak_transaction_add_new_remote (FlatpakTransaction *transaction, + FlatpakTransactionRemoteReason reason, + const char *from_id, + const char *suggested_remote_name, + const char *url) +{ + return FALSE; +} + +static void +flatpak_transaction_class_init (FlatpakTransactionClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + klass->ready = flatpak_transaction_ready; + klass->add_new_remote = flatpak_transaction_add_new_remote; + object_class->finalize = flatpak_transaction_finalize; + object_class->get_property = flatpak_transaction_get_property; + object_class->set_property = flatpak_transaction_set_property; + + /** + * FlatpakTransaction:installation: + * + * The installation that the transaction operates on. + */ + g_object_class_install_property (object_class, + PROP_INSTALLATION, + g_param_spec_object ("installation", + "Installation", + "The installation instance", + FLATPAK_TYPE_INSTALLATION, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + + /** + * FlatpakTransaction::new-operation: + * @object: A #FlatpakTransaction + * @operation: The new #FlatpakTransactionOperation + * @progress: A #FlatpakTransactionProgress for @operation + * + * The ::new-operation signal gets emitted during the execution of + * the transaction when a new operation is beginning. + */ + signals[NEW_OPERATION] = + g_signal_new ("new-operation", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, new_operation), + NULL, NULL, + NULL, + G_TYPE_NONE, 2, FLATPAK_TYPE_TRANSACTION_OPERATION, FLATPAK_TYPE_TRANSACTION_PROGRESS); + + /** + * FlatpakTransaction::operation-error: + * @object: A #FlatpakTransaction + * @operation: The #FlatpakTransactionOperation which failed + * @error: A #GError + * @details: A #FlatpakTransactionErrorDetails with details about the error + * + * The ::operation-error signal gets emitted when an error occurs during the + * execution of the transaction. + * + * Returns: the %TRUE to contine transaction, %FALSE to stop + */ + signals[OPERATION_ERROR] = + g_signal_new ("operation-error", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, operation_error), + NULL, NULL, + NULL, + G_TYPE_BOOLEAN, 3, FLATPAK_TYPE_TRANSACTION_OPERATION, G_TYPE_ERROR, G_TYPE_INT); + + /** + * FlatpakTransaction::operation-done: + * @object: A #FlatpakTransaction + * @operation: The #FlatpakTransactionOperation which finished + * @commit: The commit + * @result: A #FlatpakTransactionResult giving details about the result + * + * The ::operation-done signal gets emitted during the execution of + * the transaction when an operation is finished. + */ + signals[OPERATION_DONE] = + g_signal_new ("operation-done", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, operation_done), + NULL, NULL, + NULL, + G_TYPE_NONE, 3, FLATPAK_TYPE_TRANSACTION_OPERATION, G_TYPE_STRING, G_TYPE_INT); + + /** + * FlatpakTransaction::choose-remote-for-ref: + * @object: A #FlatpakTransaction + * @for_ref: The ref we are installing + * @runtime_ref: The ref we are looking for + * @remotes: the remotes that has the ref, sorted in prio order + * + * The ::choose-remote-for-ref signal gets emitted when a + * remote needs to be selected during the execution of the transaction. + * + * Returns: the index of the remote to use, or -1 to not pick one (and fail) + */ + signals[CHOOSE_REMOTE_FOR_REF] = + g_signal_new ("choose-remote-for-ref", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, choose_remote_for_ref), + NULL, NULL, + NULL, + G_TYPE_INT, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRV); + + /** + * FlatpakTransaction::end-of-lifed: + * @object: A #FlatpakTransaction + * @ref: The ref we are installing + * @reason: The eol reason, or %NULL + * @rebase: The new name, if rebased, or %NULL + * + * The ::end-of-lifed signal gets emitted when a ref is found to + * be marked as end-of-life during the execution of the transaction. + */ + signals[END_OF_LIFED] = + g_signal_new ("end-of-lifed", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, end_of_lifed), + NULL, NULL, + NULL, + G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + + /** + * FlatpakTransaction::ready: + * @object: A #FlatpakTransaction + * + * The ::ready signal is emitted when all the refs involved in the operation + * have been resolved to commits. At this point flatpak_transaction_get_operations() + * will return all the operations that will be executed as part of the + * transaction. + * + * Returns: %TRUE to carry on with the transaction, %FALSE to abort + */ + signals[READY] = + g_signal_new ("ready", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, ready), + signal_accumulator_false_abort, NULL, + NULL, + G_TYPE_BOOLEAN, 0); + + /** + * FlatpakTransaction::add-new-remote: + * @object: A #FlatpakTransaction + * @reason: A #FlatpakTransactionRemoteReason for this suggestion + * @from_id: The id of the app/runtime + * @suggested_remote_name: The suggested remote name + * @url: The repo url + * + * The ::add-new-remote signal gets emitted if, as part of the transaction, + * it is required or recommended that a new remote is added, for the reason + * described in @reason. + * + * Returns: %TRUE to add the remote + */ + signals[ADD_NEW_REMOTE] = + g_signal_new ("add-new-remote", + G_TYPE_FROM_CLASS (object_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (FlatpakTransactionClass, add_new_remote), + g_signal_accumulator_first_wins, NULL, + NULL, + G_TYPE_BOOLEAN, 4, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); +} + +static void +flatpak_transaction_init (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->last_op_for_ref = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + priv->remote_states = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) flatpak_remote_state_unref); + priv->added_origin_remotes = g_ptr_array_new_with_free_func (g_free); + priv->extra_dependency_dirs = g_ptr_array_new_with_free_func (g_object_unref); +} + + +static gboolean +initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransaction *self = FLATPAK_TRANSACTION (initable); + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(FlatpakDir) dir = NULL; + + if (priv->installation == NULL) + return flatpak_fail (error, "No installation specified"); + + dir = flatpak_installation_clone_dir (priv->installation, cancellable, error); + if (dir == NULL) + return FALSE; + + priv->dir = g_steal_pointer (&dir); + + return TRUE; +} + +static void +initable_iface_init (GInitableIface *initable_iface) +{ + initable_iface->init = initable_init; +} + +/** + * flatpak_transaction_new_for_installation: + * @installation: a #FlatpakInstallation + * @cancellable: (nullable): a #GCancellable + * @error: return location for a #GError + * + * Creates a new #FlatpakTransaction object that can be used to do installation + * and updates of multiple refs, as well as their dependencies, in a single + * operation. Set the options you want on the transaction and add the + * refs you want to install/update, then start the transaction with + * flatpak_transaction_run (). + * + * Returns: (transfer full): a #FlatpakTransaction, or %NULL on failure. + */ +FlatpakTransaction * +flatpak_transaction_new_for_installation (FlatpakInstallation *installation, + GCancellable *cancellable, + GError **error) +{ + return g_initable_new (FLATPAK_TYPE_TRANSACTION, + cancellable, error, + "installation", installation, + NULL); +} + +/** + * flatpak_transaction_set_no_pull: + * @self: a #FlatpakTransaction + * @no_pull: whether to avoid pulls + * + * Sets whether the transaction should operate only on locally + * available data. + */ +void +flatpak_transaction_set_no_pull (FlatpakTransaction *self, + gboolean no_pull) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->no_pull = no_pull; +} + +/** + * flatpak_transaction_set_no_deploy: + * @self: a #FlatpakTransaction + * @no_deploy: whether to avoid deploying + * + * Sets whether the transaction should download updates, but + * not deploy them. + */ +void +flatpak_transaction_set_no_deploy (FlatpakTransaction *self, + gboolean no_deploy) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->no_deploy = no_deploy; +} + +/** + * flatpak_transaction_set_disable_static_deltas: + * @self: a #FlatpakTransaction + * @disable_static_deltas: whether to avoid static deltas + * + * Sets whether the transaction should avoid using static + * deltas when pulling. + */ +void +flatpak_transaction_set_disable_static_deltas (FlatpakTransaction *self, + gboolean disable_static_deltas) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->disable_static_deltas = disable_static_deltas; +} + +/** + * flatpak_transaction_set_disable_prune: + * @self: a #FlatpakTransaction + * @disable_prune: whether to avoid pruning + * + * Sets whether the transaction should avoid pruning the local OSTree + * repository after updating. + */ +void +flatpak_transaction_set_disable_prune (FlatpakTransaction *self, + gboolean disable_prune) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->disable_prune = disable_prune; +} + +/** + * flatpak_transaction_set_disable_dependencies: + * @self: a #FlatpakTransaction + * @disable_dependencies: whether to disable runtime dependencies + * + * Sets whether the transaction should ignore runtime dependencies + * when resolving operations for applications. + */ +void +flatpak_transaction_set_disable_dependencies (FlatpakTransaction *self, + gboolean disable_dependencies) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->disable_deps = disable_dependencies; +} + +/** + * flatpak_transaction_set_disable_related: + * @self: a #FlatpakTransaction + * @disable_related: whether to avoid adding related refs + * + * Sets whether the transaction should avoid adding related refs + * when resolving operations. Related refs are extensions that are + * suggested by apps, such as locales. + */ +void +flatpak_transaction_set_disable_related (FlatpakTransaction *self, + gboolean disable_related) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->disable_related = disable_related; +} + +/** + * flatpak_transaction_set_reinstall: + * @self: a #FlatpakTransaction + * @reinstall: whether to reinstall refs + * + * Sets whether the transaction should uninstall first if a + * ref is already installed. + */ +void +flatpak_transaction_set_reinstall (FlatpakTransaction *self, + gboolean reinstall) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->reinstall = reinstall; +} + +/** + * flatpak_transaction_set_force_uninstall: + * @self: a #FlatpakTransaction + * @force_uninstall: whether to force-uninstall refs + * + * Sets whether the transaction should uninstall files even + * if they're used by a running application. + */ +void +flatpak_transaction_set_force_uninstall (FlatpakTransaction *self, + gboolean force_uninstall) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->force_uninstall = force_uninstall; +} + +/** + * flatpak_transaction_set_default_arch: + * @self: a #FlatpakTransaction + * @arch: the arch to make default + * + * Sets the architecture to default to where it is unspecified. + */ +void +flatpak_transaction_set_default_arch (FlatpakTransaction *self, + const char *arch) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_free (priv->default_arch); + priv->default_arch = g_strdup (arch); +} + +static FlatpakTransactionOperation * +flatpak_transaction_get_last_op_for_ref (FlatpakTransaction *self, + const char *ref) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + FlatpakTransactionOperation *op; + + op = g_hash_table_lookup (priv->last_op_for_ref, ref); + + return op; +} + +static char * +subpaths_to_string (const char **subpaths) +{ + GString *s = NULL; + int i; + + if (subpaths == NULL) + return g_strdup ("[$old]"); + + if (*subpaths == 0) + return g_strdup ("[*]"); + + s = g_string_new ("["); + for (i = 0; subpaths[i] != NULL; i++) + { + if (i != 0) + g_string_append (s, ", "); + g_string_append (s, subpaths[i]); + } + g_string_append (s, "]"); + + return g_string_free (s, FALSE); +} + +static const char * +kind_to_str (FlatpakTransactionOperationType kind) +{ + switch ((int) kind) + { + case FLATPAK_TRANSACTION_OPERATION_INSTALL: + return "install"; + + case FLATPAK_TRANSACTION_OPERATION_UPDATE: + return "update"; + + case FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE: + return "install/update"; + + case FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE: + return "install bundle"; + + case FLATPAK_TRANSACTION_OPERATION_UNINSTALL: + return "uninstall"; + + case FLATPAK_TRANSACTION_OPERATION_LAST_TYPE: + default: + return "unknown"; + } +} + +static FlatpakRemoteState * +flatpak_transaction_ensure_remote_state (FlatpakTransaction *self, + FlatpakTransactionOperationType kind, + const char *remote, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + FlatpakRemoteState *state; + + /* We don't cache local-only states, as we might later need the same state with non-local state */ + if (transaction_is_local_only (self, kind)) + return flatpak_dir_get_remote_state_local_only (priv->dir, remote, NULL, error); + + state = g_hash_table_lookup (priv->remote_states, remote); + if (state) + return flatpak_remote_state_ref (state); + + state = flatpak_dir_get_remote_state_optional (priv->dir, remote, NULL, error); + + if (state) + g_hash_table_insert (priv->remote_states, state->remote_name, flatpak_remote_state_ref (state)); + + return state; +} + +static gboolean +kind_compatible (FlatpakTransactionOperationType a, + FlatpakTransactionOperationType b) +{ + if (a == b) + return TRUE; + + if (a == FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE && + (b == FLATPAK_TRANSACTION_OPERATION_INSTALL || + b == FLATPAK_TRANSACTION_OPERATION_UPDATE)) + return TRUE; + + if (b == FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE && + (a == FLATPAK_TRANSACTION_OPERATION_INSTALL || + a == FLATPAK_TRANSACTION_OPERATION_UPDATE)) + return TRUE; + + return FALSE; +} + +static FlatpakTransactionOperation * +flatpak_transaction_add_op (FlatpakTransaction *self, + const char *remote, + const char *ref, + const char **subpaths, + const char *commit, + GFile *bundle, + FlatpakTransactionOperationType kind) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + FlatpakTransactionOperation *op; + g_autofree char *subpaths_str = NULL; + + subpaths_str = subpaths_to_string (subpaths); + g_debug ("Transaction: %s %s:%s%s%s%s", + kind_to_str (kind), remote, ref, + commit != NULL ? "@" : "", + commit != NULL ? commit : "", + subpaths_str); + + op = flatpak_transaction_get_last_op_for_ref (self, ref); + if (op != NULL && kind_compatible (kind, op->kind)) + { + g_auto(GStrv) old_subpaths = NULL; + + old_subpaths = op->subpaths; + op->subpaths = flatpak_subpaths_merge (old_subpaths, (char **) subpaths); + + return op; + } + + op = flatpak_transaction_operation_new (remote, ref, subpaths, commit, bundle, kind); + g_hash_table_insert (priv->last_op_for_ref, g_strdup (ref), op); + + priv->ops = g_list_prepend (priv->ops, op); + + return op; +} + +static void +run_operation_before (FlatpakTransactionOperation *op, + FlatpakTransactionOperation *before_this, + int prio) +{ + if (op == before_this) + return; /* Don't cause unnecessary loops */ + op->run_before_ops = g_list_prepend (op->run_before_ops, before_this); + before_this->run_after_count++; + before_this->run_after_prio = MAX (before_this->run_after_prio, prio); +} + +static gboolean +add_related (FlatpakTransaction *self, + FlatpakTransactionOperation *op, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(GPtrArray) related = NULL; + g_autoptr(GError) local_error = NULL; + int i; + + if (priv->disable_related) + return TRUE; + + state = flatpak_transaction_ensure_remote_state (self, op->kind, op->remote, error); + if (state == NULL) + return FALSE; + + if (op->resolved_metakey == NULL) + { + g_debug ("no resolved metadata for related to %s", op->ref); + return TRUE; + } + + if (transaction_is_local_only (self, op->kind)) + related = flatpak_dir_find_local_related_for_metadata (priv->dir, op->ref, op->remote, op->resolved_metakey, + NULL, &local_error); + else + related = flatpak_dir_find_remote_related_for_metadata (priv->dir, state, op->ref, op->resolved_metakey, + NULL, &local_error); + if (related == NULL) + { + g_message (_("Warning: Problem looking for related refs: %s"), local_error->message); + return TRUE; + } + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + for (i = 0; i < related->len; i++) + { + FlatpakRelated *rel = g_ptr_array_index (related, i); + FlatpakTransactionOperation *related_op; + + if (!rel->delete) + continue; + + related_op = flatpak_transaction_add_op (self, op->remote, rel->ref, + NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_UNINSTALL); + related_op->non_fatal = TRUE; + related_op->fail_if_op_fails = op; + run_operation_before (op, related_op, 1); + } + } + else /* install or update */ + { + for (i = 0; i < related->len; i++) + { + FlatpakRelated *rel = g_ptr_array_index (related, i); + FlatpakTransactionOperation *related_op; + + if (!rel->download) + continue; + + related_op = flatpak_transaction_add_op (self, op->remote, rel->ref, + (const char **) rel->subpaths, + NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE); + related_op->non_fatal = TRUE; + related_op->fail_if_op_fails = op; + run_operation_before (op, related_op, 1); + } + } + + return TRUE; +} + +static char * +find_runtime_remote (FlatpakTransaction *self, + const char *app_ref, + const char *runtime_ref, + FlatpakTransactionOperationType source_kind, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_auto(GStrv) remotes = NULL; + const char *app_pref; + const char *runtime_pref; + int res = -1; + + app_pref = strchr (app_ref, '/') + 1; + runtime_pref = strchr (runtime_ref, '/') + 1; + + if (transaction_is_local_only (self, source_kind)) + remotes = flatpak_dir_search_for_local_dependency (priv->dir, runtime_ref, NULL, NULL); + else + remotes = flatpak_dir_search_for_dependency (priv->dir, runtime_ref, NULL, NULL); + + if (remotes == NULL || *remotes == NULL) + { + flatpak_fail_error (error, FLATPAK_ERROR_RUNTIME_NOT_FOUND, + _("The application %s requires the runtime %s which was not found"), + app_pref, runtime_pref); + return NULL; + } + + /* In the no-puil case, if only one local ref is available, assume that is the one because + the user chose it interactively when pulling */ + if (priv->no_pull && g_strv_length (remotes) == 1) + res = 0; + else + g_signal_emit (self, signals[CHOOSE_REMOTE_FOR_REF], 0, app_ref, runtime_ref, remotes, &res); + + if (res >= 0 && res < g_strv_length (remotes)) + return g_strdup (remotes[res]); + + flatpak_fail_error (error, FLATPAK_ERROR_RUNTIME_NOT_FOUND, + _("The application %s requires the runtime %s which is not installed"), + app_pref, runtime_pref); + return NULL; +} + + +static gboolean +add_deps (FlatpakTransaction *self, + FlatpakTransactionOperation *op, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *runtime_ref = NULL; + g_autofree char *full_runtime_ref = NULL; + g_autofree char *runtime_remote = NULL; + FlatpakTransactionOperation *runtime_op = NULL; + + if (!g_str_has_prefix (op->ref, "app/")) + return TRUE; + + if (op->resolved_metakey) + runtime_ref = g_key_file_get_string (op->resolved_metakey, "Application", "runtime", NULL); + + if (runtime_ref == NULL) + return TRUE; + + full_runtime_ref = g_strconcat ("runtime/", runtime_ref, NULL); + + runtime_op = flatpak_transaction_get_last_op_for_ref (self, full_runtime_ref); + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + /* If the runtime this app uses is already to be uninstalled, then this uninstall must happen before + the runtime is installed */ + if (runtime_op && op->kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + run_operation_before (op, runtime_op, 1); + + return TRUE; + } + + if (priv->disable_deps) + return TRUE; + + if (runtime_op == NULL) + { + g_autoptr(GError) local_error = NULL; + + if (!ref_is_installed (self, full_runtime_ref, &local_error)) + { + if (local_error != NULL) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + + runtime_remote = find_runtime_remote (self, op->ref, full_runtime_ref, op->kind, error); + if (runtime_remote == NULL) + return FALSE; + + runtime_op = flatpak_transaction_add_op (self, runtime_remote, full_runtime_ref, NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE); + } + else + { + /* Update if in same dir */ + if (dir_ref_is_installed (priv->dir, full_runtime_ref, &runtime_remote, NULL)) + { + g_debug ("Updating dependent runtime %s", full_runtime_ref); + runtime_op = flatpak_transaction_add_op (self, runtime_remote, full_runtime_ref, NULL, NULL, NULL, + FLATPAK_TRANSACTION_OPERATION_UPDATE); + runtime_op->non_fatal = TRUE; + } + } + } + + /* Install/Update the runtime before the app */ + if (runtime_op) + { + op->fail_if_op_fails = runtime_op; + run_operation_before (runtime_op, op, 2); + } + + return TRUE; +} + +static gboolean +flatpak_transaction_add_ref (FlatpakTransaction *self, + const char *remote, + const char *ref, + const char **subpaths, + const char *commit, + FlatpakTransactionOperationType kind, + GFile *bundle, + const char *external_metadata, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *origin = NULL; + g_auto(GStrv) parts = NULL; + const char *pref; + g_autofree char *origin_remote = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + FlatpakTransactionOperation *op; + + parts = flatpak_decompose_ref (ref, error); + if (parts == NULL) + return FALSE; + + if (remote_name_is_file (remote)) + { + origin_remote = flatpak_dir_create_origin_remote (priv->dir, + remote, /* uri */ + parts[1], + "Local repo", + ref, + NULL, + NULL, + NULL, error); + if (origin_remote == NULL) + return FALSE; + + g_ptr_array_add (priv->added_origin_remotes, g_strdup (origin_remote)); + + remote = origin_remote; + } + + /* safe because flatpak_decompose_ref() has validated ref */ + pref = strchr (ref, '/') + 1; + + /* install or update */ + if (kind == FLATPAK_TRANSACTION_OPERATION_UPDATE) + { + if (!dir_ref_is_installed (priv->dir, ref, &origin, NULL)) + return flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, + _("%s not installed"), pref); + + if (flatpak_dir_get_remote_disabled (priv->dir, origin)) + { + g_debug (_("Remote %s disabled, ignoring %s update"), origin, pref); + return TRUE; + } + remote = origin; + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL) + { + if (!priv->reinstall && + dir_ref_is_installed (priv->dir, ref, &origin, NULL)) + { + if (g_strcmp0 (remote, origin) == 0) + return flatpak_fail_error (error, FLATPAK_ERROR_ALREADY_INSTALLED, + _("%s is already installed"), pref); + else + return flatpak_fail_error (error, FLATPAK_ERROR_DIFFERENT_REMOTE, + _("%s is already installed from remote %s"), + pref, origin); + } + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + if (!dir_ref_is_installed (priv->dir, ref, &origin, NULL)) + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, + _("%s not installed"), pref); + + remote = origin; + } + + /* This should have been passed in or found out above */ + g_assert (remote != NULL); + + state = flatpak_transaction_ensure_remote_state (self, kind, remote, error); + if (state == NULL) + return FALSE; + + op = flatpak_transaction_add_op (self, remote, ref, subpaths, commit, bundle, kind); + if (external_metadata) + op->external_metadata = g_bytes_new (external_metadata, strlen (external_metadata) + 1); + + return TRUE; +} + +/** + * flatpak_transaction_add_install: + * @self: a #FlatpakTransaction + * @remote: the name of the remote + * @ref: the ref + * @subpaths: (nullable) (array zero-terminated=1): subpaths to install, or the + * empty list or %NULL to pull all subpaths + * @error: return location for a #GError + * + * Adds installing the given ref to this transaction. + * + * The @remote can either be a configured remote of the installation, + * or a file:// uri pointing at a local repository to install from, + * in which case an origin remote is created. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_install (FlatpakTransaction *self, + const char *remote, + const char *ref, + const char **subpaths, + GError **error) +{ + const char *all_paths[] = { NULL }; + + g_return_val_if_fail (ref != NULL, FALSE); + g_return_val_if_fail (remote != NULL, FALSE); + + /* If we install with no special args pull all subpaths */ + if (subpaths == NULL) + subpaths = all_paths; + + return flatpak_transaction_add_ref (self, remote, ref, subpaths, NULL, FLATPAK_TRANSACTION_OPERATION_INSTALL, NULL, NULL, error); +} + +/** + * flatpak_transaction_add_install_bundle: + * @self: a #FlatpakTransaction + * @file: a #GFile that is an flatpak bundle + * @gpg_data: (nullable): GPG key with which to check bundle signatures, or + * %NULL to use the key embedded in the bundle (if any) + * @error: return location for a #GError + * + * Adds installing the given bundle to this transaction. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_install_bundle (FlatpakTransaction *self, + GFile *file, + GBytes *gpg_data, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + priv->bundles = g_list_append (priv->flatpakrefs, bundle_data_new (file, gpg_data)); + + return TRUE; +} + +/** + * flatpak_transaction_add_install_flatpakref: + * @self: a #FlatpakTransaction + * @flatpakref_data: data from a flatpakref file + * @error: return location for a #GError + * + * Adds installing the given flatpakref to this transaction. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_install_flatpakref (FlatpakTransaction *self, + GBytes *flatpakref_data, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GKeyFile) keyfile = g_key_file_new (); + g_autoptr(GError) local_error = NULL; + + g_return_val_if_fail (flatpakref_data != NULL, FALSE); + + if (!g_key_file_load_from_data (keyfile, g_bytes_get_data (flatpakref_data, NULL), + g_bytes_get_size (flatpakref_data), + 0, &local_error)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid .flatpakref: %s"), local_error->message); + + priv->flatpakrefs = g_list_append (priv->flatpakrefs, g_steal_pointer (&keyfile)); + + return TRUE; +} + +/** + * flatpak_transaction_add_update: + * @self: a #FlatpakTransaction + * @ref: the ref + * @subpaths: (nullable) (array zero-terminated=1): subpaths to install; %NULL + * to use the current set, or `{ "", NULL }` to pull all subpaths. + * @commit: (nullable): the commit to update to, or %NULL to use the latest + * @error: return location for a #GError + * + * Adds updating the given ref to this transaction. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_update (FlatpakTransaction *self, + const char *ref, + const char **subpaths, + const char *commit, + GError **error) +{ + const char *all_paths[] = { NULL }; + + g_return_val_if_fail (ref != NULL, FALSE); + + /* If specify an empty subpath, that means all subpaths */ + if (subpaths != NULL && subpaths[0] != NULL && subpaths[0][0] == 0) + subpaths = all_paths; + + return flatpak_transaction_add_ref (self, NULL, ref, subpaths, commit, FLATPAK_TRANSACTION_OPERATION_UPDATE, NULL, NULL, error); +} + +/** + * flatpak_transaction_add_uninstall: + * @self: a #FlatpakTransaction + * @ref: the ref + * @error: return location for a #GError + * + * Adds uninstalling the given ref to this transaction. + * + * Returns: %TRUE on success; %FALSE with @error set on failure. + */ +gboolean +flatpak_transaction_add_uninstall (FlatpakTransaction *self, + const char *ref, + GError **error) +{ + g_return_val_if_fail (ref != NULL, FALSE); + + return flatpak_transaction_add_ref (self, NULL, ref, NULL, NULL, FLATPAK_TRANSACTION_OPERATION_UNINSTALL, NULL, NULL, error); +} + +static gboolean +flatpak_transaction_update_metadata (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_auto(GStrv) remotes = NULL; + int i; + GList *l; + g_autoptr(GHashTable) ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + + /* Collect all dir+remotes used in this transaction */ + + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + g_hash_table_add (ht, g_strdup (op->remote)); + } + remotes = (char **) g_hash_table_get_keys_as_array (ht, NULL); + g_hash_table_steal_all (ht); /* Move ownership to remotes */ + + /* Update metadata for said remotes */ + for (i = 0; remotes[i] != NULL; i++) + { + char *remote = remotes[i]; + g_autoptr(GError) my_error = NULL; + + g_debug ("Updating remote metadata for %s", remote); + if (!flatpak_dir_update_remote_configuration (priv->dir, remote, cancellable, &my_error)) + g_message (_("Error updating remote metadata for '%s': %s"), remote, my_error->message); + } + + /* Reload changed configuration */ + if (!flatpak_dir_recreate_repo (priv->dir, cancellable, error)) + return FALSE; + + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + + /* These are potentially out of date now */ + g_hash_table_remove_all (priv->remote_states); + + return TRUE; +} + +static void +emit_new_op (FlatpakTransaction *self, FlatpakTransactionOperation *op, FlatpakTransactionProgress *progress) +{ + g_signal_emit (self, signals[NEW_OPERATION], 0, op, progress); +} + +static void +emit_op_done (FlatpakTransaction *self, + FlatpakTransactionOperation *op, + FlatpakTransactionResult details) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *commit = NULL; + + if (priv->no_deploy) + commit = flatpak_dir_read_latest (priv->dir, op->remote, op->ref, NULL, NULL, NULL); + else + { + g_autoptr(GVariant) deploy_data = flatpak_dir_get_deploy_data (priv->dir, op->ref, NULL, NULL); + if (deploy_data) + commit = g_strdup (flatpak_deploy_data_get_commit (deploy_data)); + } + + g_signal_emit (self, signals[OPERATION_DONE], 0, op, commit, details); +} + +static GBytes * +load_deployed_metadata (FlatpakTransaction *self, const char *ref) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GFile) deploy_dir = NULL; + g_autoptr(GFile) metadata_file = NULL; + g_autofree char *metadata_contents = NULL; + gsize metadata_contents_length; + + deploy_dir = flatpak_dir_get_if_deployed (priv->dir, ref, NULL, NULL); + if (deploy_dir == NULL) + return NULL; + + metadata_file = g_file_get_child (deploy_dir, "metadata"); + + if (!g_file_load_contents (metadata_file, NULL, &metadata_contents, &metadata_contents_length, NULL, NULL)) + { + g_debug ("No metadata in local deploy of %s", ref); + return NULL; + } + + return g_bytes_new_take (g_steal_pointer (&metadata_contents), metadata_contents_length + 1); +} + +static void +mark_op_resolved (FlatpakTransactionOperation *op, + const char *commit, + GBytes *metadata, + GBytes *old_metadata) +{ + g_debug ("marking op %s:%s resolved to %s", kind_to_str (op->kind), op->ref, commit ? commit : "-"); + + g_assert (op != NULL); + + if (op->kind != FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + g_assert (commit != NULL); + + op->resolved = TRUE; + op->resolved_commit = g_strdup (commit); + if (metadata) + { + g_autoptr(GKeyFile) metakey = g_key_file_new (); + if (g_key_file_load_from_bytes (metakey, metadata, G_KEY_FILE_NONE, NULL)) + { + op->resolved_metadata = g_bytes_ref (metadata); + op->resolved_metakey = g_steal_pointer (&metakey); + } + else + g_message ("Warning: Failed to parse metadata for %s\n", op->ref); + } + if (old_metadata) + { + g_autoptr(GKeyFile) metakey = g_key_file_new (); + if (g_key_file_load_from_bytes (metakey, old_metadata, G_KEY_FILE_NONE, NULL)) + { + op->resolved_old_metadata = g_bytes_ref (old_metadata); + op->resolved_old_metakey = g_steal_pointer (&metakey); + } + else + g_message ("Warning: Failed to parse old metadata for %s\n", op->ref); + } +} + +static gboolean +resolve_p2p_ops (FlatpakTransaction *self, + GList *p2p_ops, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GPtrArray) resolves = g_ptr_array_new_with_free_func ((GDestroyNotify) flatpak_dir_resolve_free); + ; + GList *l; + int i; + + for (l = p2p_ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + FlatpakDirResolve *resolve; + + g_debug ("resolving %s using p2p", op->ref); + + g_assert (op->kind != FLATPAK_TRANSACTION_OPERATION_UNINSTALL); + g_assert (op->kind != FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE); + g_assert (!op->resolved); + + resolve = flatpak_dir_resolve_new (op->remote, op->ref, op->commit); + g_ptr_array_add (resolves, resolve); + } + + g_ptr_array_add (resolves, NULL); + + if (!flatpak_dir_resolve_p2p_refs (priv->dir, (FlatpakDirResolve **) resolves->pdata, + cancellable, error)) + return FALSE; + + for (i = 0, l = p2p_ops; l != NULL; i++, l = l->next) + { + FlatpakTransactionOperation *op = l->data; + FlatpakDirResolve *resolve = g_ptr_array_index (resolves, i); + g_autoptr(GBytes) old_metadata_bytes = NULL; + + old_metadata_bytes = load_deployed_metadata (self, op->ref); + mark_op_resolved (op, resolve->resolved_commit, resolve->resolved_metadata, old_metadata_bytes); + } + + return TRUE; +} + +/* Resolving an operation means figuring out the target commit + checksum and the metadata for that commit, so that we can handle + dependencies from it, and verify versions. */ +static gboolean +resolve_ops (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l; + + g_autoptr(GList) collection_id_ops = NULL; + + + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + g_autoptr(FlatpakRemoteState) state = NULL; + g_autofree char *checksum = NULL; + g_autoptr(GVariant) commit_data = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + g_autoptr(GBytes) metadata_bytes = NULL; + g_autoptr(GBytes) old_metadata_bytes = NULL; + + if (op->resolved) + continue; + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + /* We resolve to the deployed metadata, becasue we need it to uninstall related ops */ + + metadata_bytes = load_deployed_metadata (self, op->ref); + mark_op_resolved (op, NULL, metadata_bytes, NULL); + continue; + } + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) + { + g_assert (op->commit != NULL); + mark_op_resolved (op, op->commit, op->external_metadata, NULL); + continue; + } + + /* op->kind is INSTALL or UPDATE */ + + state = flatpak_transaction_ensure_remote_state (self, op->kind, op->remote, error); + if (state == NULL) + return FALSE; + + /* Should we use local state */ + if (transaction_is_local_only (self, op->kind)) + { + const char *xa_metadata = NULL; + commit_data = flatpak_dir_read_latest_commit (priv->dir, op->remote, op->ref, &checksum, NULL, error); + if (commit_data == NULL) + return FALSE; + + commit_metadata = g_variant_get_child_value (commit_data, 0); + g_variant_lookup (commit_metadata, "xa.metadata", "&s", &xa_metadata); + if (xa_metadata == NULL) + g_message ("Warning: No xa.metadata in local commit %s ref %s", checksum, op->ref); + else + metadata_bytes = g_bytes_new (xa_metadata, strlen (xa_metadata) + 1); + + old_metadata_bytes = load_deployed_metadata (self, op->ref); + mark_op_resolved (op, checksum, metadata_bytes, old_metadata_bytes); + } + else if (state->collection_id == NULL) /* In the non-p2p case we have all the info available in the summary, so use it */ + { + const char *metadata = NULL; + g_autoptr(GError) local_error = NULL; + + if (op->commit != NULL) + checksum = g_strdup (op->commit); + else if (!flatpak_dir_find_latest_rev (priv->dir, state, op->ref, op->commit, &checksum, + NULL, cancellable, &local_error)) + { + /* An unavailable remote summary shouldn't be fatal if we already have the ref */ + commit_data = flatpak_dir_read_latest_commit (priv->dir, op->remote, op->ref, &checksum, NULL, NULL); + if (commit_data == NULL) + { + g_propagate_error (error, g_steal_pointer (&local_error)); + return FALSE; + } + else + { + g_message (_("Warning: Treating remote fetch error as non-fatal since %s is already installed: %s"), + op->ref, local_error->message); + g_clear_error (&local_error); + } + } + + /* TODO: This only gets the metadata for the latest only, we need to handle the case + where the user specified a commit, or p2p doesn't have the latest commit available */ + if (!flatpak_remote_state_lookup_cache (state, op->ref, NULL, NULL, &metadata, &local_error)) + { + g_message (_("Warning: Can't find %s metadata for dependencies: %s"), op->ref, local_error->message); + g_clear_error (&local_error); + } + else + metadata_bytes = g_bytes_new (metadata, strlen (metadata) + 1); + + old_metadata_bytes = load_deployed_metadata (self, op->ref); + mark_op_resolved (op, checksum, metadata_bytes, old_metadata_bytes); + } + else + { + /* This is a (potential) p2p operation, so rather than do these individually we queue them up in an operation later */ + + collection_id_ops = g_list_prepend (collection_id_ops, op); + } + } + + if (collection_id_ops != NULL && + !resolve_p2p_ops (self, collection_id_ops, cancellable, error)) + return FALSE; + + return TRUE; +} + +static int +compare_op_ref (FlatpakTransactionOperation *a, FlatpakTransactionOperation *b) +{ + char *aa = strchr (a->ref, '/'); + char *bb = strchr (b->ref, '/'); + + return g_strcmp0 (aa, bb); +} + +static int +compare_op_prio (FlatpakTransactionOperation *a, FlatpakTransactionOperation *b) +{ + return b->run_after_prio - a->run_after_prio; +} + +static void +sort_ops (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *sorted = NULL; + GList *remaining; + GList *runnable = NULL; + GList *l, *next; + + remaining = priv->ops; + priv->ops = NULL; + + /* First mark runnable all jobs that depend on nothing. + Note that this seesntially reverses the original list, so these + are in the same order as specified */ + for (l = remaining; l != NULL; l = next) + { + FlatpakTransactionOperation *op = l->data; + next = l->next; + + if (op->run_after_count == 0) + { + remaining = g_list_remove_link (remaining, l); + runnable = g_list_concat (l, runnable); + } + } + + /* If no other order, start in alphabetical ref-order */ + runnable = g_list_sort (runnable, (GCompareFunc) compare_op_ref); + + while (runnable) + { + GList *run = runnable; + FlatpakTransactionOperation *run_op = run->data; + + /* Put the first runnable on the sorted list */ + runnable = g_list_remove_link (runnable, run); + sorted = g_list_concat (run, sorted); /* prepends, so reverse at the end */ + + /* Then greedily run ops that become runnable, in run_after_prio order, so that + related ops are run before depdendencies */ + run_op->run_before_ops = g_list_sort (run_op->run_before_ops, (GCompareFunc) compare_op_prio); + for (l = run_op->run_before_ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *after_op = l->data; + after_op->run_after_count--; + if (after_op->run_after_count == 0) + { + GList *after_l = g_list_find (remaining, after_op); + g_assert (after_l != NULL); + remaining = g_list_remove_link (remaining, after_l); + runnable = g_list_concat (after_l, runnable); + } + } + } + + if (remaining != NULL) + { + g_warning ("ops remaining after sort, maybe there is a dependency loop?"); + sorted = g_list_concat (remaining, sorted); + } + + priv->ops = g_list_reverse (sorted); +} + +/** + * flatpak_transaction_get_operations: + * @self: a #FlatpakTransaction + * + * Gets the list of operations. + * + * Returns: (transfer full) (element-type FlatpakTransactionOperation): a #GList of operations + */ +GList * +flatpak_transaction_get_operations (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l; + GList *non_skipped = NULL; + + non_skipped = NULL; + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + if (!op->skip) + non_skipped = g_list_prepend (non_skipped, g_object_ref (op)); + } + return g_list_reverse (non_skipped); +} + +/** + * flatpak_transaction_get_current_operation: + * @self: a #FlatpakTransaction + * + * Gets the current operation. + * + * Returns: (transfer full): the current #FlatpakTransactionOperation + */ +FlatpakTransactionOperation * +flatpak_transaction_get_current_operation (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + return g_object_ref (priv->current_op); +} + +/** + * flatpak_transaction_get_installation: + * @self: a #FlatpakTransactionOperation + * + * Gets the installation this transaction was created for. + * + * Returns: (transfer full): a #FlatpakInstallation + */ +FlatpakInstallation * +flatpak_transaction_get_installation (FlatpakTransaction *self) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + return g_object_ref (priv->installation); +} + + +static GBytes * +download_uri (const char *url, + GError **error) +{ + g_autoptr(SoupSession) session = NULL; + g_autoptr(SoupRequest) req = NULL; + g_autoptr(GInputStream) input = NULL; + g_autoptr(GOutputStream) out = NULL; + + session = flatpak_create_soup_session (PACKAGE_STRING); + + req = soup_session_request (session, url, error); + if (req == NULL) + return NULL; + + input = soup_request_send (req, NULL, error); + if (input == NULL) + return NULL; + + out = g_memory_output_stream_new_resizable (); + if (!g_output_stream_splice (out, + input, + G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET | G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE, + NULL, + error)) + return NULL; + + return g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (out)); +} + +static gboolean +remote_is_already_configured (FlatpakTransaction *self, + const char *url, + const char *collection_id) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *old_remote = NULL; + int i; + + old_remote = flatpak_dir_find_remote_by_uri (priv->dir, url, collection_id); + if (old_remote == NULL) + { + for (i = 0; i < priv->extra_dependency_dirs->len; i++) + { + FlatpakDir *dependency_dir = g_ptr_array_index (priv->extra_dependency_dirs, i); + + old_remote = flatpak_dir_find_remote_by_uri (dependency_dir, url, collection_id); + if (old_remote != NULL) + break; + } + } + + return old_remote != NULL; +} + +static gboolean +handle_suggested_remote_name (FlatpakTransaction *self, GKeyFile *keyfile, GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *suggested_name = NULL; + g_autofree char *name = NULL; + g_autofree char *url = NULL; + g_autofree char *collection_id = NULL; + + g_autoptr(GKeyFile) config = NULL; + g_autoptr(GBytes) gpg_key = NULL; + gboolean res; + + suggested_name = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, + FLATPAK_REF_SUGGEST_REMOTE_NAME_KEY, NULL); + if (suggested_name == NULL) + return TRUE; + + name = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_NAME_KEY, NULL); + if (name == NULL) + return TRUE; + + url = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_URL_KEY, NULL); + if (url == NULL) + return TRUE; + + collection_id = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_DEPLOY_COLLECTION_ID_KEY, NULL); + if (collection_id == NULL || *collection_id == '\0') + collection_id = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_COLLECTION_ID_KEY, NULL); + + if (remote_is_already_configured (self, url, collection_id)) + return TRUE; + + /* The name is already used, ignore */ + if (ostree_repo_remote_get_url (flatpak_dir_get_repo (priv->dir), suggested_name, NULL, NULL)) + return TRUE; + + res = FALSE; + g_signal_emit (self, signals[ADD_NEW_REMOTE], 0, FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO, + name, suggested_name, url, &res); + if (res) + { + config = flatpak_dir_parse_repofile (priv->dir, suggested_name, TRUE, keyfile, &gpg_key, NULL, error); + if (config == NULL) + return FALSE; + + if (!flatpak_dir_modify_remote (priv->dir, suggested_name, config, gpg_key, NULL, error)) + return FALSE; + + if (!flatpak_dir_recreate_repo (priv->dir, NULL, error)) + return FALSE; + + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + } + + return TRUE; +} + +static gboolean +handle_runtime_repo_deps (FlatpakTransaction *self, const char *id, const char *dep_url, GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + + g_autoptr(GBytes) dep_data = NULL; + g_autofree char *runtime_url = NULL; + g_autofree char *new_remote = NULL; + g_autofree char *basename = NULL; + g_autoptr(SoupURI) uri = NULL; + g_auto(GStrv) remotes = NULL; + g_autoptr(GKeyFile) config = NULL; + g_autoptr(GKeyFile) dep_keyfile = g_key_file_new (); + g_autoptr(GBytes) gpg_key = NULL; + g_autofree char *group = NULL; + g_autoptr(GError) local_error = NULL; + g_autofree char *runtime_collection_id = NULL; + char *t; + int i; + gboolean res; + + if (priv->disable_deps) + return TRUE; + + dep_data = download_uri (dep_url, error); + if (dep_data == NULL) + { + g_prefix_error (error, "Can't load dependent file %s", dep_url); + return FALSE; + } + + if (!g_key_file_load_from_data (dep_keyfile, + g_bytes_get_data (dep_data, NULL), + g_bytes_get_size (dep_data), + 0, &local_error)) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid .flatpakrepo: %s"), local_error->message); + + uri = soup_uri_new (dep_url); + basename = g_path_get_basename (soup_uri_get_path (uri)); + /* Strip suffix */ + t = strchr (basename, '.'); + if (t != NULL) + *t = 0; + + /* Find a free remote name */ + remotes = flatpak_dir_list_remotes (priv->dir, NULL, NULL); + i = 0; + do + { + g_clear_pointer (&new_remote, g_free); + + if (i == 0) + new_remote = g_strdup (basename); + else + new_remote = g_strdup_printf ("%s-%d", basename, i); + i++; + } + while (remotes != NULL && g_strv_contains ((const char * const *) remotes, new_remote)); + + config = flatpak_dir_parse_repofile (priv->dir, new_remote, FALSE, dep_keyfile, &gpg_key, NULL, error); + if (config == NULL) + { + g_prefix_error (error, "Can't parse dependent file %s: ", dep_url); + return FALSE; + } + + /* See if it already exists */ + group = g_strdup_printf ("remote \"%s\"", new_remote); + runtime_url = g_key_file_get_string (config, group, "url", NULL); + g_assert (runtime_url != NULL); + runtime_collection_id = g_key_file_get_string (config, group, "collection-id", NULL); + + if (remote_is_already_configured (self, runtime_url, runtime_collection_id)) + return TRUE; + + res = FALSE; + g_signal_emit (self, signals[ADD_NEW_REMOTE], 0, FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS, + id, new_remote, runtime_url, &res); + if (res) + { + if (!flatpak_dir_modify_remote (priv->dir, new_remote, config, gpg_key, NULL, error)) + return FALSE; + + if (!flatpak_dir_recreate_repo (priv->dir, NULL, error)) + return FALSE; + + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + } + + return TRUE; +} + +static gboolean +handle_runtime_repo_deps_from_keyfile (FlatpakTransaction *self, GKeyFile *keyfile, GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *dep_url = NULL; + g_autofree char *name = NULL; + + if (priv->disable_deps) + return TRUE; + + dep_url = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, + FLATPAK_REF_RUNTIME_REPO_KEY, NULL); + if (dep_url == NULL) + return TRUE; + + name = g_key_file_get_string (keyfile, FLATPAK_REF_GROUP, FLATPAK_REF_NAME_KEY, NULL); + if (name == NULL) + return TRUE; + + return handle_runtime_repo_deps (self, name, dep_url, error); +} + +static gboolean +flatpak_transaction_resolve_flatpakrefs (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l; + + for (l = priv->flatpakrefs; l != NULL; l = l->next) + { + GKeyFile *flatpakref = l->data; + g_autofree char *remote = NULL; + g_autofree char *ref = NULL; + + /* Handle this before the runtime deps, because they might be the same */ + if (!handle_suggested_remote_name (self, flatpakref, error)) + return FALSE; + + if (!handle_runtime_repo_deps_from_keyfile (self, flatpakref, error)) + return FALSE; + + if (!flatpak_dir_create_remote_for_ref_file (priv->dir, flatpakref, priv->default_arch, + &remote, NULL, &ref, error)) + return FALSE; + + /* Need to pick up the new config, in case it was applied in the system helper. */ + if (!flatpak_dir_recreate_repo (priv->dir, NULL, error)) + return FALSE; + + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + + if (!flatpak_transaction_add_install (self, remote, ref, NULL, error)) + return FALSE; + } + + return TRUE; +} + +static gboolean +handle_runtime_repo_deps_from_bundle (FlatpakTransaction *self, + GFile *file, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + g_autofree char *dep_url = NULL; + g_autofree char *ref = NULL; + + g_auto(GStrv) ref_parts = NULL; + g_autoptr(GVariant) metadata = NULL; + + if (priv->disable_deps) + return TRUE; + + metadata = flatpak_bundle_load (file, + NULL, + &ref, + NULL, + &dep_url, + NULL, + NULL, + NULL, + NULL, + NULL); + + if (metadata == NULL || dep_url == NULL || ref == NULL) + return TRUE; + + ref_parts = g_strsplit (ref, "/", -1); + + return handle_runtime_repo_deps (self, ref_parts[1], dep_url, error); +} + +static gboolean +flatpak_transaction_resolve_bundles (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l; + + for (l = priv->bundles; l != NULL; l = l->next) + { + BundleData *data = l->data; + g_autofree char *remote = NULL; + g_autofree char *ref = NULL; + g_autofree char *commit = NULL; + g_autofree char *metadata = NULL; + gboolean created_remote; + + if (!handle_runtime_repo_deps_from_bundle (self, data->file, error)) + return FALSE; + + if (!flatpak_dir_ensure_repo (priv->dir, cancellable, error)) + return FALSE; + + remote = flatpak_dir_ensure_bundle_remote (priv->dir, data->file, data->gpg_data, + &ref, &commit, &metadata, &created_remote, + NULL, error); + if (remote == NULL) + return FALSE; + + if (!flatpak_dir_recreate_repo (priv->dir, NULL, error)) + return FALSE; + + flatpak_installation_drop_caches (priv->installation, NULL, NULL); + + if (!flatpak_transaction_add_ref (self, remote, ref, NULL, commit, + FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE, data->file, metadata, error)) + return FALSE; + } + + return TRUE; +} + +/** + * flatpak_transaction_run: + * @self: a #FlatpakTransaction + * @cancellable: (nullable): a #GCancellable + * @error: return location for an error + * + * Executes the transaction. + * + * During the cause of the execution, various signal will get emitted. + * The FlatpakTransaction::choose-remote-for-ref and + * #FlatpakTransaction::add-new-remote signals may get emitted while + * resolving operations. #FlatpakTransaction::ready is emitted when + * the transaction has been fully resolved, and #FlatpakTransaction::new-operation + * and #FlatpakTransaction::operation-done are emitted while the operations + * are carried out. If an error occurs at any point during the execution, + * #FlatpakTransaction::operation-error is emitted. + * + * Note that this call blocks until the transaction is done. + * + * Returns: %TRUE on success, %FALSE if an error occurred + */ +gboolean +flatpak_transaction_run (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error) +{ + FlatpakTransactionPrivate *priv = flatpak_transaction_get_instance_private (self); + GList *l, *next; + gboolean succeeded = TRUE; + gboolean needs_prune = FALSE; + gboolean needs_triggers = FALSE; + + g_autoptr(GMainContextPopDefault) main_context = NULL; + gboolean ready_res = FALSE; + int i; + + priv->current_op = NULL; + + if (!priv->no_pull && + !flatpak_transaction_update_metadata (self, cancellable, error)) + return FALSE; + + /* Work around ostree-pull spinning the default main context for the sync calls */ + main_context = flatpak_main_context_new_default (); + + if (!flatpak_transaction_resolve_flatpakrefs (self, cancellable, error)) + return FALSE; + + if (!flatpak_transaction_resolve_bundles (self, cancellable, error)) + return FALSE; + + /* Resolve initial ops */ + if (!resolve_ops (self, cancellable, error)) + return FALSE; + + /* Add all app -> runtime dependencies */ + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + + if (!add_deps (self, op, error)) + return FALSE; + } + + /* Resolve new ops */ + if (!resolve_ops (self, cancellable, error)) + return FALSE; + + /* Add all related extensions */ + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + + if (!add_related (self, op, error)) + return FALSE; + } + + /* Resolve new ops */ + if (!resolve_ops (self, cancellable, error)) + return FALSE; + + sort_ops (self); + + /* Ensure the operation kind is normalized and not no-op */ + for (l = priv->ops; l != NULL; l = next) + { + FlatpakTransactionOperation *op = l->data; + next = l->next; + + if (op->kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_OR_UPDATE) + { + g_autoptr(GVariant) deploy_data = NULL; + + if (dir_ref_is_installed (priv->dir, op->ref, NULL, &deploy_data)) + { + /* Don't use the remote from related ref on update, always use + the current remote. */ + g_free (op->remote); + op->remote = g_strdup (flatpak_deploy_data_get_origin (deploy_data)); + + op->kind = FLATPAK_TRANSACTION_OPERATION_UPDATE; + } + else + op->kind = FLATPAK_TRANSACTION_OPERATION_INSTALL; + } + + /* Skip no-op updates */ + if (op->kind == FLATPAK_TRANSACTION_OPERATION_UPDATE && + !flatpak_dir_needs_update_for_commit_and_subpaths (priv->dir, op->remote, op->ref, op->resolved_commit, + (const char **) op->subpaths)) + op->skip = TRUE; + } + + + g_signal_emit (self, signals[READY], 0, &ready_res); + if (!ready_res) + return flatpak_fail_error (error, FLATPAK_ERROR_ABORTED, _("Aborted by user")); + + for (l = priv->ops; l != NULL; l = l->next) + { + FlatpakTransactionOperation *op = l->data; + g_autoptr(GError) local_error = NULL; + gboolean res = TRUE; + const char *pref; + FlatpakTransactionOperationType kind; + g_autoptr(FlatpakRemoteState) state = NULL; + + if (op->skip) + continue; + + priv->current_op = op; + + kind = op->kind; + pref = strchr (op->ref, '/') + 1; + + if (op->fail_if_op_fails && (op->fail_if_op_fails->failed) && + /* Allow installing an app if the runtime failed to update (i.e. is installed) because + * the app should still run, and otherwise you could never install the app until the runtime + * remote is fixed. */ + !(op->fail_if_op_fails->kind == FLATPAK_TRANSACTION_OPERATION_UPDATE && g_str_has_prefix (op->ref, "app/"))) + { + flatpak_fail_error (&local_error, FLATPAK_ERROR_SKIPPED, + _("Skipping %s due to previous error"), pref); + res = FALSE; + } + else if ((state = flatpak_transaction_ensure_remote_state (self, op->kind, op->remote, &local_error)) == NULL) + { + res = FALSE; + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL) + { + g_autoptr(FlatpakTransactionProgress) progress = flatpak_transaction_progress_new (); + + emit_new_op (self, op, progress); + + g_assert (op->resolved_commit != NULL); /* We resolved this before */ + + if (op->resolved_metakey && !flatpak_check_required_version (op->ref, op->resolved_metakey, &local_error)) + res = FALSE; + else + res = flatpak_dir_install (priv->dir, + priv->no_pull, + priv->no_deploy, + priv->disable_static_deltas, + priv->reinstall, + state, op->ref, op->resolved_commit, + (const char **) op->subpaths, + progress->ostree_progress, + cancellable, &local_error); + + flatpak_transaction_progress_done (progress); + if (res) + { + emit_op_done (self, op, 0); + + /* Normally we don't need to prune after install, because it makes no old objects + stale. However if we reinstall, that is not true. */ + if (!priv->no_pull && priv->reinstall) + needs_prune = TRUE; + + if (g_str_has_prefix (op->ref, "app")) + needs_triggers = TRUE; + } + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_UPDATE) + { + g_assert (op->resolved_commit != NULL); /* We resolved this before */ + + if (flatpak_dir_needs_update_for_commit_and_subpaths (priv->dir, op->remote, op->ref, op->resolved_commit, + (const char **) op->subpaths)) + { + g_autoptr(FlatpakTransactionProgress) progress = flatpak_transaction_progress_new (); + FlatpakTransactionResult result_details = 0; + + emit_new_op (self, op, progress); + + if (op->resolved_metakey && !flatpak_check_required_version (op->ref, op->resolved_metakey, &local_error)) + res = FALSE; + else + res = flatpak_dir_update (priv->dir, + priv->no_pull, + priv->no_deploy, + priv->disable_static_deltas, + op->commit != NULL, /* Allow downgrade if we specify commit */ + state, op->ref, op->resolved_commit, + NULL, + (const char **) op->subpaths, + progress->ostree_progress, + cancellable, &local_error); + flatpak_transaction_progress_done (progress); + + /* Handle noop-updates */ + if (!res && g_error_matches (local_error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) + { + res = TRUE; + g_clear_error (&local_error); + + result_details |= FLATPAK_TRANSACTION_RESULT_NO_CHANGE; + } + + if (res) + { + emit_op_done (self, op, result_details); + + if (!priv->no_pull) + needs_prune = TRUE; + + if (g_str_has_prefix (op->ref, "app")) + needs_triggers = TRUE; + } + } + else + g_debug ("%s need no update", op->ref); + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE) + { + g_autoptr(FlatpakTransactionProgress) progress = flatpak_transaction_progress_new (); + emit_new_op (self, op, progress); + if (op->resolved_metakey && !flatpak_check_required_version (op->ref, op->resolved_metakey, &local_error)) + res = FALSE; + else + res = flatpak_dir_install_bundle (priv->dir, op->bundle, + op->remote, NULL, + cancellable, &local_error); + flatpak_transaction_progress_done (progress); + + if (res) + { + emit_op_done (self, op, 0); + needs_prune = TRUE; + needs_triggers = TRUE; + } + } + else if (kind == FLATPAK_TRANSACTION_OPERATION_UNINSTALL) + { + g_autoptr(FlatpakTransactionProgress) progress = flatpak_transaction_progress_new (); + FlatpakHelperUninstallFlags flags = 0; + + if (priv->disable_prune) + flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_KEEP_REF; + + if (priv->force_uninstall) + flags |= FLATPAK_HELPER_UNINSTALL_FLAGS_FORCE_REMOVE; + + emit_new_op (self, op, progress); + + res = flatpak_dir_uninstall (priv->dir, op->ref, flags, + cancellable, &local_error); + + flatpak_transaction_progress_done (progress); + + if (res) + { + emit_op_done (self, op, 0); + needs_prune = TRUE; + + if (g_str_has_prefix (op->ref, "app")) + needs_triggers = TRUE; + } + } + else + g_assert_not_reached (); + + if (res) + { + g_autoptr(GVariant) deploy_data = NULL; + deploy_data = flatpak_dir_get_deploy_data (priv->dir, op->ref, NULL, NULL); + + if (deploy_data) + { + const char *eol = flatpak_deploy_data_get_eol (deploy_data); + const char *eol_rebase = flatpak_deploy_data_get_eol_rebase (deploy_data); + + if (eol || eol_rebase) + g_signal_emit (self, signals[END_OF_LIFED], 0, + op->ref, eol, eol_rebase); + } + } + + if (!res) + { + gboolean do_cont = FALSE; + FlatpakTransactionErrorDetails error_details = 0; + + op->failed = TRUE; + + if (op->non_fatal) + error_details |= FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL; + + g_signal_emit (self, signals[OPERATION_ERROR], 0, op, + local_error, error_details, + &do_cont); + + if (!do_cont) + { + if (g_cancellable_set_error_if_cancelled (cancellable, error)) + { + succeeded = FALSE; + break; + } + + flatpak_fail_error (error, FLATPAK_ERROR_ABORTED, _("Aborted due to failure")); + succeeded = FALSE; + break; + } + } + } + priv->current_op = NULL; + + if (needs_triggers) + flatpak_dir_run_triggers (priv->dir, cancellable, NULL); + + if (needs_prune && !priv->disable_prune) + flatpak_dir_prune (priv->dir, cancellable, NULL); + + for (i = 0; i < priv->added_origin_remotes->len; i++) + flatpak_dir_prune_origin_remote (priv->dir, g_ptr_array_index (priv->added_origin_remotes, i)); + + return succeeded; +} diff -Nru flatpak-0.11.3/common/flatpak-transaction.h flatpak-1.0.7/common/flatpak-transaction.h --- flatpak-0.11.3/common/flatpak-transaction.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-transaction.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,231 @@ +/* + * Copyright © 2016 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 + */ + +#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_TRANSACTION_H__ +#define __FLATPAK_TRANSACTION_H__ + +#include +#include + +#define FLATPAK_TYPE_TRANSACTION flatpak_transaction_get_type () +#define FLATPAK_TYPE_TRANSACTION_PROGRESS flatpak_transaction_progress_get_type () +#define FLATPAK_TYPE_TRANSACTION_OPERATION flatpak_transaction_operation_get_type () + +/** + * FlatpakTransactionOperationType + * @FLATPAK_TRANSACTION_OPERATION_INSTALL: Install a ref from a remote + * @FLATPAK_TRANSACTION_OPERATION_UPDATE: Update an installed ref + * @FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE: Install a bundle from a file + * @FLATPAK_TRANSACTION_OPERATION_UNINSTALL: Uninstall a ref + * @FLATPAK_TRANSACTION_OPERATION_LAST_TYPE: The (currently) last operation type + * + * The type of a #FlatpakTransactionOperation. + */ +typedef enum { + FLATPAK_TRANSACTION_OPERATION_INSTALL, + FLATPAK_TRANSACTION_OPERATION_UPDATE, + FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE, + FLATPAK_TRANSACTION_OPERATION_UNINSTALL, + FLATPAK_TRANSACTION_OPERATION_LAST_TYPE +} FlatpakTransactionOperationType; + +/** + * FlatpakTransactionErrorDetails + * @FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL: The operation failure was not fatal + * + * The details for #FlatpakTransaction::operation-error. + */ +typedef enum { + FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL = 1 << 0, +} FlatpakTransactionErrorDetails; + +/** + * FlatpakTransactionResult + * @FLATPAK_TRANSACTION_RESULT_NO_CHANGE: The update caused no changes + * + * The details for #FlatpakTransaction::operation-done. + */ +typedef enum { + FLATPAK_TRANSACTION_RESULT_NO_CHANGE = 1 << 0, +} FlatpakTransactionResult; + +/** + * FlatpakTransactionRemoteReason + * @FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO: The remote specified in the flatpakref has other apps too + * @FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS: The remote has runtimes needed for the app + * + * The reason for #FlatpakTransaction::add-new-remote. + */ +typedef enum { + FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO, + FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS, +} FlatpakTransactionRemoteReason; + +FLATPAK_EXTERN +G_DECLARE_FINAL_TYPE (FlatpakTransactionProgress, flatpak_transaction_progress, FLATPAK, TRANSACTION_PROGRESS, GObject) + +FLATPAK_EXTERN +G_DECLARE_FINAL_TYPE (FlatpakTransactionOperation, flatpak_transaction_operation, FLATPAK, TRANSACTION_OPERATION, GObject) + +FLATPAK_EXTERN +G_DECLARE_DERIVABLE_TYPE (FlatpakTransaction, flatpak_transaction, FLATPAK, TRANSACTION, GObject) + +struct _FlatpakTransactionClass +{ + GObjectClass parent_class; + + void (*new_operation) (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + FlatpakTransactionProgress *progress); + void (*operation_done) (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + const char *commit, + FlatpakTransactionResult details); + gboolean (*operation_error) (FlatpakTransaction *transaction, + FlatpakTransactionOperation *operation, + const GError *error, + FlatpakTransactionErrorDetails detail); + int (*choose_remote_for_ref) (FlatpakTransaction *transaction, + const char *for_ref, + const char *runtime_ref, + const char * const *remotes); + void (*end_of_lifed) (FlatpakTransaction *transaction, + const char *ref, + const char *reason, + const char *rebase); + gboolean (*ready) (FlatpakTransaction *transaction); + + gboolean (*add_new_remote) (FlatpakTransaction *transaction, + FlatpakTransactionRemoteReason reason, + const char *from_id, + const char *remote_name, + const char *url); + gpointer padding[10]; +}; + +FLATPAK_EXTERN +FlatpakTransaction *flatpak_transaction_new_for_installation (FlatpakInstallation *installation, + GCancellable *cancellable, + GError **error); + +FLATPAK_EXTERN +void flatpak_transaction_progress_set_update_frequency (FlatpakTransactionProgress *self, + guint update_frequency); +FLATPAK_EXTERN +char * flatpak_transaction_progress_get_status (FlatpakTransactionProgress *self); +FLATPAK_EXTERN +gboolean flatpak_transaction_progress_get_is_estimating (FlatpakTransactionProgress *self); +FLATPAK_EXTERN +int flatpak_transaction_progress_get_progress (FlatpakTransactionProgress *self); + + +FLATPAK_EXTERN +FlatpakTransactionOperationType flatpak_transaction_operation_get_operation_type (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +const char * flatpak_transaction_operation_get_ref (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +const char * flatpak_transaction_operation_get_remote (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +GFile * flatpak_transaction_operation_get_bundle_path (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +const char * flatpak_transaction_operation_get_commit (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +GKeyFile * flatpak_transaction_operation_get_metadata (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +GKeyFile * flatpak_transaction_operation_get_old_metadata (FlatpakTransactionOperation *self); +FLATPAK_EXTERN +const char * flatpak_transaction_operation_type_to_string (FlatpakTransactionOperationType kind); + +FLATPAK_EXTERN +void flatpak_transaction_set_no_pull (FlatpakTransaction *self, + gboolean no_pull); +FLATPAK_EXTERN +void flatpak_transaction_set_no_deploy (FlatpakTransaction *self, + gboolean no_deploy); +FLATPAK_EXTERN +void flatpak_transaction_set_disable_static_deltas (FlatpakTransaction *self, + gboolean disable_static_deltas); +FLATPAK_EXTERN +void flatpak_transaction_set_disable_prune (FlatpakTransaction *self, + gboolean disable_prune); +FLATPAK_EXTERN +void flatpak_transaction_set_disable_dependencies (FlatpakTransaction *self, + gboolean disable_dependencies); +FLATPAK_EXTERN +void flatpak_transaction_set_disable_related (FlatpakTransaction *self, + gboolean disable_related); +FLATPAK_EXTERN +void flatpak_transaction_set_reinstall (FlatpakTransaction *self, + gboolean reinstall); +FLATPAK_EXTERN +void flatpak_transaction_set_force_uninstall (FlatpakTransaction *self, + gboolean force_uninstall); +FLATPAK_EXTERN +void flatpak_transaction_set_default_arch (FlatpakTransaction *self, + const char *arch); +FLATPAK_EXTERN +void flatpak_transaction_add_dependency_source (FlatpakTransaction *self, + FlatpakInstallation *installation); +FLATPAK_EXTERN +void flatpak_transaction_add_default_dependency_sources (FlatpakTransaction *self); +FLATPAK_EXTERN +gboolean flatpak_transaction_run (FlatpakTransaction *self, + GCancellable *cancellable, + GError **error); +FLATPAK_EXTERN +FlatpakTransactionOperation *flatpak_transaction_get_current_operation (FlatpakTransaction *self); +FLATPAK_EXTERN +FlatpakInstallation *flatpak_transaction_get_installation (FlatpakTransaction *self); +FLATPAK_EXTERN +GList *flatpak_transaction_get_operations (FlatpakTransaction *self); + +FLATPAK_EXTERN +gboolean flatpak_transaction_add_install (FlatpakTransaction *self, + const char *remote, + const char *ref, + const char **subpaths, + GError **error); +FLATPAK_EXTERN +gboolean flatpak_transaction_add_install_bundle (FlatpakTransaction *self, + GFile *file, + GBytes *gpg_data, + GError **error); +FLATPAK_EXTERN +gboolean flatpak_transaction_add_install_flatpakref (FlatpakTransaction *self, + GBytes *flatpakref_data, + GError **error); +FLATPAK_EXTERN +gboolean flatpak_transaction_add_update (FlatpakTransaction *self, + const char *ref, + const char **subpaths, + const char *commit, + GError **error); +FLATPAK_EXTERN +gboolean flatpak_transaction_add_uninstall (FlatpakTransaction *self, + const char *ref, + GError **error); +FLATPAK_EXTERN +gboolean flatpak_transaction_is_empty (FlatpakTransaction *self); + +#endif /* __FLATPAK_TRANSACTION_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-transaction-private.h flatpak-1.0.7/common/flatpak-transaction-private.h --- flatpak-0.11.3/common/flatpak-transaction-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-transaction-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,28 @@ +/* + * Copyright © 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_TRANSACTION_PRIVATE_H__ +#define __FLATPAK_TRANSACTION_PRIVATE_H__ + +#include "flatpak-transaction.h" + +#include "flatpak-dir-private.h" + +#endif /* __FLATPAK_TRANSACTION_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-utils.c flatpak-1.0.7/common/flatpak-utils.c --- flatpak-0.11.3/common/flatpak-utils.c 2018-02-19 13:18:30.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-utils.c 2019-02-11 12:42:20.000000000 +0000 @@ -20,14 +20,14 @@ #include "config.h" -#include "flatpak-utils.h" -#include "lib/flatpak-error.h" -#include "flatpak-dir.h" -#include "flatpak-portal-error.h" -#include "flatpak-oci-registry.h" -#include "flatpak-run.h" +#include "flatpak-utils-private.h" +#include "flatpak-error.h" +#include "flatpak-dir-private.h" +#include "flatpak-oci-registry-private.h" +#include "flatpak-run-private.h" +#include "valgrind-private.h" -#include +#include #include #include @@ -45,7 +45,6 @@ #include #include "libglnx/libglnx.h" -#include #include #include @@ -53,13 +52,29 @@ static const GDBusErrorEntry flatpak_error_entries[] = { {FLATPAK_ERROR_ALREADY_INSTALLED, "org.freedesktop.Flatpak.Error.AlreadyInstalled"}, {FLATPAK_ERROR_NOT_INSTALLED, "org.freedesktop.Flatpak.Error.NotInstalled"}, + {FLATPAK_ERROR_ONLY_PULLED, "org.freedesktop.Flatpak.Error.OnlyPulled"}, /* Since: 1.0 */ + {FLATPAK_ERROR_DIFFERENT_REMOTE, "org.freedesktop.Flatpak.Error.DifferentRemote"}, /* Since: 1.0 */ + {FLATPAK_ERROR_ABORTED, "org.freedesktop.Flatpak.Error.Aborted"}, /* Since: 1.0 */ + {FLATPAK_ERROR_SKIPPED, "org.freedesktop.Flatpak.Error.Skipped"}, /* Since: 1.0 */ + {FLATPAK_ERROR_NEED_NEW_FLATPAK, "org.freedesktop.Flatpak.Error.NeedNewFlatpak"}, /* Since: 1.0 */ + {FLATPAK_ERROR_REMOTE_NOT_FOUND, "org.freedesktop.Flatpak.Error.RemoteNotFound"}, /* Since: 1.0 */ + {FLATPAK_ERROR_RUNTIME_NOT_FOUND, "org.freedesktop.Flatpak.Error.RuntimeNotFound"}, /* Since: 1.0 */ + {FLATPAK_ERROR_DOWNGRADE, "org.freedesktop.Flatpak.Error.Downgrade"}, /* Since: 1.0 */ + {FLATPAK_ERROR_INVALID_REF, "org.freedesktop.Flatpak.Error.InvalidRef"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_INVALID_DATA, "org.freedesktop.Flatpak.Error.InvalidData"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_UNTRUSTED, "org.freedesktop.Flatpak.Error.Untrusted"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_SETUP_FAILED, "org.freedesktop.Flatpak.Error.SetupFailed"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_EXPORT_FAILED, "org.freedesktop.Flatpak.Error.ExportFailed"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_REMOTE_USED, "org.freedesktop.Flatpak.Error.RemoteUsed"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_RUNTIME_USED, "org.freedesktop.Flatpak.Error.RuntimeUsed"}, /* Since: 1.0.3 */ + {FLATPAK_ERROR_INVALID_NAME, "org.freedesktop.Flatpak.Error.InvalidName"}, /* Since: 1.0.3 */ }; typedef struct archive FlatpakAutoArchiveRead; -G_DEFINE_AUTOPTR_CLEANUP_FUNC(FlatpakAutoArchiveRead, archive_read_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakAutoArchiveRead, archive_read_free) static void -propagate_libarchive_error (GError **error, +propagate_libarchive_error (GError **error, struct archive *a) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, @@ -78,6 +93,20 @@ return (GQuark) quark_volatile; } +gboolean +flatpak_fail_error (GError **error, FlatpakError code, const char *fmt, ...) +{ + if (error == NULL) + return FALSE; + + va_list args; + va_start (args, fmt); + GError *new = g_error_new_valist (FLATPAK_ERROR, code, fmt, args); + va_end (args); + g_propagate_error (error, g_steal_pointer (&new)); + return FALSE; +} + void flatpak_debug2 (const char *format, ...) { @@ -86,7 +115,7 @@ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wformat-nonliteral" va_start (var_args, format); - g_logv (G_LOG_DOMAIN"2", + g_logv (G_LOG_DOMAIN "2", G_LOG_LEVEL_DEBUG, format, var_args); va_end (var_args); @@ -95,9 +124,9 @@ } GFile * -flatpak_file_new_tmp_in (GFile *dir, +flatpak_file_new_tmp_in (GFile *dir, const char *template, - GError **error) + GError **error) { glnx_autofd int tmp_fd = -1; g_autofree char *tmpl = g_build_filename (flatpak_file_get_path_cached (dir), template, NULL); @@ -113,13 +142,13 @@ } gboolean -flatpak_write_update_checksum (GOutputStream *out, - gconstpointer data, - gsize len, - gsize *out_bytes_written, - GChecksum *checksum, - GCancellable *cancellable, - GError **error) +flatpak_write_update_checksum (GOutputStream *out, + gconstpointer data, + gsize len, + gsize *out_bytes_written, + GChecksum *checksum, + GCancellable *cancellable, + GError **error) { if (out) { @@ -139,16 +168,16 @@ } gboolean -flatpak_splice_update_checksum (GOutputStream *out, - GInputStream *in, - GChecksum *checksum, +flatpak_splice_update_checksum (GOutputStream *out, + GInputStream *in, + GChecksum *checksum, FlatpakLoadUriProgress progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) + gpointer progress_data, + GCancellable *cancellable, + GError **error) { gsize bytes_read, bytes_written; - char buf[32*1024]; + char buf[32 * 1024]; guint64 downloaded_bytes = 0; gint64 progress_start; @@ -420,53 +449,81 @@ return FALSE; } +static struct +{ + const char *kernel_arch; + const char *compat_arch; +} compat_arches[] = { + { "x86_64", "i386" }, + { "aarch64", "arm" }, +}; + +static const char * +flatpak_get_compat_arch (const char *kernel_arch) +{ + int i; + + /* Also add all other arches that are compatible with the kernel arch */ + for (i = 0; i < G_N_ELEMENTS (compat_arches); i++) + { + if (strcmp (compat_arches[i].kernel_arch, kernel_arch) == 0) + return compat_arches[i].compat_arch; + } + + return NULL; +} + +static const char * +flatpak_get_compat_arch_reverse (const char *compat_arch) +{ + int i; + + /* Also add all other arches that are compatible with the kernel arch */ + for (i = 0; i < G_N_ELEMENTS (compat_arches); i++) + { + if (strcmp (compat_arches[i].compat_arch, compat_arch) == 0) + return compat_arches[i].kernel_arch; + } + + return NULL; +} + /* Get all compatible arches for this host in order of priority */ const char ** flatpak_get_arches (void) { static gsize arches = 0; - static struct { - const char *kernel_arch; - const char *compat_arch; - } compat_arches[] = { - { "x86_64", "i386" }, - { "aarch64", "arm" }, - }; if (g_once_init_enter (&arches)) { gsize new_arches = 0; const char *main_arch = flatpak_get_arch (); const char *kernel_arch = flatpak_get_kernel_arch (); + const char *compat_arch; GPtrArray *array = g_ptr_array_new (); - int i; /* This is the userspace arch, i.e. the one flatpak itself was build for. It's always first. */ - g_ptr_array_add (array, (char *)main_arch); + g_ptr_array_add (array, (char *) main_arch); - /* Also add all other arches that are compatible with the kernel arch */ - for (i = 0; i < G_N_ELEMENTS(compat_arches); i++) - { - if ((strcmp (compat_arches[i].kernel_arch, kernel_arch) == 0) && - /* Don't re-add the main arch */ - (strcmp (compat_arches[i].compat_arch, main_arch) != 0)) - g_ptr_array_add (array, (char *)compat_arches[i].compat_arch); - } + compat_arch = flatpak_get_compat_arch (kernel_arch); + if (g_strcmp0 (compat_arch, main_arch) != 0) + g_ptr_array_add (array, (char *) compat_arch); g_ptr_array_add (array, NULL); - new_arches = (gsize)g_ptr_array_free (array, FALSE); + new_arches = (gsize) g_ptr_array_free (array, FALSE); g_once_init_leave (&arches, new_arches); - } + } - return (const char **)arches; + return (const char **) arches; } const char ** flatpak_get_gl_drivers (void) { static gsize drivers = 0; + if (g_once_init_enter (&drivers)) { gsize new_drivers; @@ -490,18 +547,18 @@ g_ptr_array_add (array, g_strconcat ("nvidia-", nvidia_version, NULL)); } - g_ptr_array_add (array, (char *)"default"); - g_ptr_array_add (array, (char *)"host"); + g_ptr_array_add (array, (char *) "default"); + g_ptr_array_add (array, (char *) "host"); g_ptr_array_add (array, NULL); - new_drivers_c = (char **)g_ptr_array_free (array, FALSE); + new_drivers_c = (char **) g_ptr_array_free (array, FALSE); } - new_drivers = (gsize)new_drivers_c; + new_drivers = (gsize) new_drivers_c; g_once_init_leave (&drivers, new_drivers); } - return (const char **)drivers; + return (const char **) drivers; } static gboolean @@ -524,49 +581,36 @@ { /* The schema may not be installed so check first */ GSettingsSchemaSource *source = g_settings_schema_source_get_default (); - g_autoptr(GSettingsSchema) schema = g_settings_schema_source_lookup (source, - "org.gnome.desktop.interface", FALSE); + g_autoptr(GSettingsSchema) schema = NULL; - if (schema == NULL) + if (source == 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")); + 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) -{ - static gsize in_sandbox = 0; - - if (g_once_init_enter (&in_sandbox)) - { - g_autofree char *path = g_build_filename (g_get_user_runtime_dir (), "flatpak-info", NULL); - gsize new_in_sandbox; - - new_in_sandbox = 2; - if (g_file_test (path, G_FILE_TEST_IS_REGULAR)) - new_in_sandbox = 1; - - g_once_init_leave (&in_sandbox, new_in_sandbox); - } - - return in_sandbox == 1; + return (const char *) gtk_theme; } gboolean flatpak_fancy_output (void) { - return isatty (STDOUT_FILENO); + return isatty (STDOUT_FILENO); } const char * @@ -579,36 +623,6 @@ return HELPER; } -gboolean -flatpak_break_hardlink (GFile *file, GError **error) -{ - g_autofree char *path = g_file_get_path (file); - struct stat st_buf; - - if (stat (path, &st_buf) == 0 && st_buf.st_nlink > 1) - { - g_autoptr(GFile) dir = g_file_get_parent (file); - g_autoptr(GFile) tmp = NULL; - - tmp = flatpak_file_new_tmp_in (dir, ".breaklinkXXXXXX", error); - if (tmp == NULL) - return FALSE; - - if (!g_file_copy (file, tmp, - G_FILE_COPY_OVERWRITE, - NULL, NULL, NULL, error)) - return FALSE; - - if (rename (flatpak_file_get_path_cached (tmp), path) != 0) - { - glnx_set_error_from_errno (error); - return FALSE; - } - } - - return TRUE; -} - /* We only migrate the user dir, because thats what most people used with xdg-app, * and its where all per-user state/config are stored. */ @@ -632,6 +646,46 @@ } } +char * +flatpak_get_timezone (void) +{ + g_autofree gchar *symlink = NULL; + gchar *etc_timezone = NULL; + const gchar *tzdir; + + tzdir = getenv ("TZDIR"); + if (tzdir == NULL) + tzdir = "/usr/share/zoneinfo"; + + symlink = flatpak_resolve_link ("/etc/localtime", NULL); + if (symlink != NULL) + { + /* Resolve relative path */ + g_autofree gchar *canonical = flatpak_canonicalize_filename (symlink); + char *canonical_suffix; + + /* Strip the prefix and slashes if possible. */ + if (g_str_has_prefix (canonical, tzdir)) + { + canonical_suffix = canonical + strlen (tzdir); + while (*canonical_suffix == '/') + canonical_suffix++; + + return g_strdup (canonical_suffix); + } + } + + if (g_file_get_contents ("/etc/timezeone", &etc_timezone, + NULL, NULL)) + { + g_strchomp (etc_timezone); + return etc_timezone; + } + + /* Final fall-back is UTC */ + return g_strdup ("UTC"); + } + static gboolean is_valid_initial_name_character (gint c, gboolean allow_dash) { @@ -649,7 +703,8 @@ (c >= '0' && c <= '9'); } -/** flatpak_is_valid_name: +/** + * flatpak_is_valid_name: * @string: The string to check * @error: Return location for an error * @@ -677,7 +732,7 @@ */ gboolean flatpak_is_valid_name (const char *string, - GError **error) + GError **error) { guint len; gboolean ret; @@ -694,15 +749,15 @@ len = strlen (string); if (G_UNLIKELY (len == 0)) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't be empty"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't be empty")); goto out; } if (G_UNLIKELY (len > 255)) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't be longer than 255 characters"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't be longer than 255 characters")); goto out; } @@ -714,14 +769,14 @@ s = string; if (G_UNLIKELY (*s == '.')) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't start with a period"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't start with a period")); goto out; } else if (G_UNLIKELY (!is_valid_initial_name_character (*s, last_element))) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't start with %c", *s); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't start with %c"), *s); goto out; } @@ -736,18 +791,18 @@ s += 1; if (G_UNLIKELY (s == end)) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't end with a period"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't end with a period")); goto out; } if (!is_valid_initial_name_character (*s, last_element)) { if (*s == '-') - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Only last name segment can contain -"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Only last name segment can contain -")); else - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name segment can't start with %c", *s); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name segment can't start with %c"), *s); goto out; } dot_count++; @@ -755,11 +810,11 @@ else if (G_UNLIKELY (!is_valid_name_character (*s, last_element))) { if (*s == '-') - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Only last name segment can contain -"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Only last name segment can contain -")); else - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Name can't contain %c", *s); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Name can't contain %c"), *s); goto out; } s += 1; @@ -767,8 +822,8 @@ if (G_UNLIKELY (dot_count < 2)) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Names must contain at least 2 periods"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Names must contain at least 2 periods")); goto out; } @@ -779,19 +834,131 @@ } gboolean -flatpak_has_name_prefix (const char *string, - const char *name) +flatpak_name_matches_one_wildcard_prefix (const char *name, + const char * const *wildcarded_prefixes, + gboolean require_exact_match) { - const char *rest; + const char * const *iter = wildcarded_prefixes; + const char *remainder; + gsize longest_match_len = 0; + + /* Find longest valid match */ + for (; *iter != NULL; ++iter) + { + const char *prefix = *iter; + gsize prefix_len = strlen (prefix); + gsize match_len = strlen (prefix); + gboolean has_wildcard = FALSE; + const char *end_of_match; + + if (g_str_has_suffix (prefix, ".*")) + { + has_wildcard = TRUE; + prefix_len -= 2; + } + + if (strncmp (name, prefix, prefix_len) != 0) + continue; + + end_of_match = name + prefix_len; + + if (has_wildcard && + end_of_match[0] == '.' && + is_valid_initial_name_character (end_of_match[1], TRUE)) + { + end_of_match += 2; + while (*end_of_match != 0 && + is_valid_name_character (*end_of_match, TRUE)) + end_of_match++; + } + + match_len = end_of_match - name; + + if (match_len > longest_match_len) + longest_match_len = match_len; + } - if (!g_str_has_prefix (string, name)) + if (longest_match_len == 0) return FALSE; - rest = string + strlen (name); + if (require_exact_match) + return name[longest_match_len] == 0; + + /* non-exact matches can be exact, or can be followed by characters that would make + * not be part of the last element in the matched prefix, due to being invalid or + * a new element. As a special case we explicitly disallow dash here, even though + * it iss typically allowed in the final element of a name, this allows you too sloppily + * match org.the.App with org.the.App-symbolic[.png] or org.the.App-settings[.desktop]. + */ + remainder = name + longest_match_len; return - *rest == 0 || - *rest == '.' || - !is_valid_name_character (*rest, FALSE); + *remainder == 0 || + *remainder == '.' || + !is_valid_name_character (*remainder, FALSE); +} + +gboolean +flatpak_get_allowed_exports (const char *source_path, + const char *app_id, + FlatpakContext *context, + char ***allowed_extensions_out, + char ***allowed_prefixes_out, + gboolean *require_exact_match_out) +{ + g_autoptr(GPtrArray) allowed_extensions = g_ptr_array_new_with_free_func (g_free); + g_autoptr(GPtrArray) allowed_prefixes = g_ptr_array_new_with_free_func (g_free); + gboolean require_exact_match = FALSE; + + g_ptr_array_add (allowed_prefixes, g_strdup_printf ("%s.*", app_id)); + + if (strcmp (source_path, "share/applications") == 0) + { + g_ptr_array_add (allowed_extensions, g_strdup (".desktop")); + } + else if (flatpak_has_path_prefix (source_path, "share/icons")) + { + g_ptr_array_add (allowed_extensions, g_strdup (".svgz")); + g_ptr_array_add (allowed_extensions, g_strdup (".png")); + g_ptr_array_add (allowed_extensions, g_strdup (".svg")); + g_ptr_array_add (allowed_extensions, g_strdup (".ico")); + } + else if (strcmp (source_path, "share/dbus-1/services") == 0) + { + g_auto(GStrv) owned_dbus_names = flatpak_context_get_session_bus_policy_allowed_own_names (context); + + g_ptr_array_add (allowed_extensions, g_strdup (".service")); + + for (GStrv iter = owned_dbus_names; *iter != NULL; ++iter) + g_ptr_array_add (allowed_prefixes, g_strdup (*iter)); + + /* We need an exact match with no extra garbage, because the filename refers to busnames + * and we can *only* match exactly these */ + require_exact_match = TRUE; + } + else if (strcmp (source_path, "share/gnome-shell/search-providers") == 0) + { + g_ptr_array_add (allowed_extensions, g_strdup (".ini")); + } + else if (strcmp (source_path, "share/mime/packages") == 0) + { + g_ptr_array_add (allowed_extensions, g_strdup (".xml")); + } + else + return FALSE; + + g_ptr_array_add (allowed_extensions, NULL); + g_ptr_array_add (allowed_prefixes, NULL); + + if (allowed_extensions_out) + *allowed_extensions_out = (char **) g_ptr_array_free (g_steal_pointer (&allowed_extensions), FALSE); + + if (allowed_prefixes_out) + *allowed_prefixes_out = (char **) g_ptr_array_free (g_steal_pointer (&allowed_prefixes), FALSE); + + if (require_exact_match_out) + *require_exact_match_out = require_exact_match; + + return TRUE; } static gboolean @@ -831,7 +998,7 @@ */ gboolean flatpak_is_valid_branch (const char *string, - GError **error) + GError **error) { guint len; gboolean ret; @@ -845,8 +1012,8 @@ len = strlen (string); if (G_UNLIKELY (len == 0)) { - g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Branch can't be empty"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Branch can't be empty")); goto out; } @@ -855,8 +1022,8 @@ s = string; if (G_UNLIKELY (!is_valid_initial_branch_character (*s))) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Branch can't start with %c", *s); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Branch can't start with %c"), *s); goto out; } @@ -865,8 +1032,8 @@ { if (G_UNLIKELY (!is_valid_branch_character (*s))) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Branch can't contain %c", *s); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_NAME, + _("Branch can't contain %c"), *s); goto out; } s += 1; @@ -917,31 +1084,31 @@ parts = g_strsplit (full_ref, "/", 0); if (g_strv_length (parts) != 4) { - flatpak_fail (error, "Wrong number of components in %s", full_ref); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Wrong number of components in %s"), full_ref); return NULL; } if (strcmp (parts[0], "app") != 0 && strcmp (parts[0], "runtime") != 0) { - flatpak_fail (error, "Not application or runtime"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("%s is not application or runtime"), full_ref); return NULL; } if (!flatpak_is_valid_name (parts[1], &local_error)) { - flatpak_fail (error, "Invalid name %s: %s", parts[1], local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Invalid name %s: %s"), parts[1], local_error->message); return NULL; } if (strlen (parts[2]) == 0) { - flatpak_fail (error, "Invalid arch %s", parts[2]); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Invalid arch %s"), parts[2]); return NULL; } if (!flatpak_is_valid_branch (parts[3], &local_error)) { - flatpak_fail (error, "Invalid branch %s: %s", parts[3], local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Invalid branch %s: %s"), parts[3], local_error->message); return NULL; } @@ -953,7 +1120,8 @@ { const char *slash; const char *end; - slash = (const char *)strchr (*partial_ref, '/'); + + slash = (const char *) strchr (*partial_ref, '/'); if (slash != NULL) { end = slash; @@ -1006,6 +1174,7 @@ const char *branch_start = NULL; const char *branch_end = NULL; g_autofree char *branch = NULL; + g_autoptr(GError) local_error = NULL; FlatpakKinds kinds = 0; @@ -1027,7 +1196,7 @@ id = g_strndup (id_start, id_end - id_start); if (validate && !flatpak_is_valid_name (id, &local_error)) - return flatpak_fail (error, "Invalid id %s: %s", id, local_error->message); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Invalid id %s: %s"), id, local_error->message); arch_start = partial_ref; arch_end = next_element (&partial_ref); @@ -1044,7 +1213,7 @@ branch = g_strdup (default_branch); if (validate && branch != NULL && !flatpak_is_valid_branch (branch, &local_error)) - return flatpak_fail (error, "Invalid branch %s: %s", branch, local_error->message); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("Invalid branch %s: %s"), branch, local_error->message); if (out_kinds) *out_kinds = kinds; @@ -1115,13 +1284,13 @@ if (!flatpak_is_valid_name (name, &local_error)) { - flatpak_fail (error, "'%s' is not a valid name: %s", name, local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("'%s' is not a valid name: %s"), name, local_error->message); return NULL; } if (branch && !flatpak_is_valid_branch (branch, &local_error)) { - flatpak_fail (error, "'%s' is not a valid branch name: %s", branch, local_error->message); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_REF, _("'%s' is not a valid branch name: %s"), branch, local_error->message); return NULL; } @@ -1232,6 +1401,7 @@ GError **error) { gchar **ret = NULL; + g_autoptr(GPtrArray) names = NULL; g_autoptr(GHashTable) hash = NULL; g_autoptr(FlatpakDir) user_dir = NULL; @@ -1279,7 +1449,7 @@ GFile * flatpak_find_deploy_dir_for_ref (const char *ref, - FlatpakDir **dir_out, + FlatpakDir **dir_out, GCancellable *cancellable, GError **error) { @@ -1309,7 +1479,7 @@ if (deploy == NULL) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, _("%s not installed"), ref); + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, _("%s not installed"), ref); return NULL; } @@ -1369,15 +1539,16 @@ if (extension_dir == NULL) return NULL; - return g_steal_pointer(&extension_dir); + return g_steal_pointer (&extension_dir); } char * -flatpak_find_current_ref (const char *app_id, +flatpak_find_current_ref (const char *app_id, GCancellable *cancellable, GError **error) { g_autofree char *current_ref = NULL; + g_autoptr(FlatpakDir) user_dir = flatpak_dir_get_user (); int i; @@ -1402,148 +1573,51 @@ if (current_ref) return g_steal_pointer (¤t_ref); - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - _("%s not installed"), app_id); + flatpak_fail_error (error, FLATPAK_ERROR_NOT_INSTALLED, _("%s not installed"), app_id); return NULL; } FlatpakDeploy * -flatpak_find_deploy_for_ref (const char *ref, - GCancellable *cancellable, - GError **error) +flatpak_find_deploy_for_ref_in (GPtrArray *dirs, + const char *ref, + const char *commit, + GCancellable *cancellable, + GError **error) { - g_autoptr(FlatpakDir) user_dir = NULL; - g_autoptr(GPtrArray) system_dirs = NULL; - g_autoptr(FlatpakDeploy) deploy = NULL; + FlatpakDeploy *deploy = NULL; + int i; g_autoptr(GError) my_error = NULL; - user_dir = flatpak_dir_get_user (); - flatpak_log_dir_access (user_dir); - system_dirs = flatpak_dir_get_system_list (cancellable, error); - if (system_dirs == NULL) - return NULL; - - deploy = flatpak_dir_load_deployed (user_dir, ref, NULL, cancellable, &my_error); - if (deploy == NULL && - system_dirs->len > 0 && - g_error_matches (my_error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED)) + for (i = 0; deploy == NULL && i < dirs->len; i++) { - int i; - - for (i = 0; deploy == NULL && i < system_dirs->len; i++) - { - FlatpakDir *system_dir = g_ptr_array_index (system_dirs, i); - - flatpak_log_dir_access (system_dir); - g_clear_error (&my_error); - deploy = flatpak_dir_load_deployed (system_dir, ref, NULL, cancellable, &my_error); - } + FlatpakDir *dir = g_ptr_array_index (dirs, i); + + flatpak_log_dir_access (dir); + g_clear_error (&my_error); + deploy = flatpak_dir_load_deployed (dir, ref, commit, cancellable, &my_error); } + if (deploy == NULL) g_propagate_error (error, g_steal_pointer (&my_error)); - return g_steal_pointer (&deploy); -} - - -static gboolean -overlay_symlink_tree_dir (int source_parent_fd, - const char *source_name, - const char *source_symlink_prefix, - int destination_parent_fd, - const char *destination_name, - GCancellable *cancellable, - GError **error) -{ - gboolean ret = FALSE; - int res; - - g_auto(GLnxDirFdIterator) source_iter = { 0 }; - glnx_autofd int destination_dfd = -1; - struct dirent *dent; - - if (!glnx_dirfd_iterator_init_at (source_parent_fd, source_name, FALSE, &source_iter, error)) - goto out; - - do - res = mkdirat (destination_parent_fd, destination_name, 0777); - while (G_UNLIKELY (res == -1 && errno == EINTR)); - if (res == -1) - { - if (errno != EEXIST) - { - glnx_set_error_from_errno (error); - goto out; - } - } - - if (!glnx_opendirat (destination_parent_fd, destination_name, TRUE, - &destination_dfd, error)) - goto out; - - while (TRUE) - { - - if (!glnx_dirfd_iterator_next_dent_ensure_dtype (&source_iter, &dent, cancellable, error)) - goto out; - - if (dent == NULL) - break; - - if (dent->d_type == DT_DIR) - { - g_autofree gchar *target = g_build_filename ("..", source_symlink_prefix, dent->d_name, NULL); - if (!overlay_symlink_tree_dir (source_iter.fd, dent->d_name, target, destination_dfd, dent->d_name, - cancellable, error)) - goto out; - } - else - { - g_autofree gchar *target = g_build_filename (source_symlink_prefix, dent->d_name, NULL); - - if (unlinkat (destination_dfd, dent->d_name, 0) != 0 && errno != ENOENT) - { - glnx_set_error_from_errno (error); - goto out; - } - - if (symlinkat (target, destination_dfd, dent->d_name) != 0) - { - glnx_set_error_from_errno (error); - goto out; - } - } - } - - ret = TRUE; -out: - - return ret; + return deploy; } -gboolean -flatpak_overlay_symlink_tree (GFile *source, - GFile *destination, - const char *symlink_prefix, - GCancellable *cancellable, - GError **error) +FlatpakDeploy * +flatpak_find_deploy_for_ref (const char *ref, + const char *commit, + GCancellable *cancellable, + GError **error) { - gboolean ret = FALSE; + g_autoptr(GPtrArray) dirs = NULL; - if (!flatpak_mkdir_p (destination, cancellable, error)) - goto out; - - /* The fds are closed by this call */ - if (!overlay_symlink_tree_dir (AT_FDCWD, flatpak_file_get_path_cached (source), - symlink_prefix, - AT_FDCWD, flatpak_file_get_path_cached (destination), - cancellable, error)) - goto out; + dirs = flatpak_dir_get_system_list (cancellable, error); + if (dirs == NULL) + return NULL; - ret = TRUE; + g_ptr_array_insert (dirs, 0, flatpak_dir_get_user ()); -out: - return ret; + return flatpak_find_deploy_for_ref_in (dirs, ref, commit, cancellable, error); } static gboolean @@ -1554,6 +1628,7 @@ { gboolean ret = FALSE; struct dirent *dent; + g_auto(GLnxDirFdIterator) iter = { 0 }; if (!glnx_dirfd_iterator_init_at (parent_fd, name, FALSE, &iter, error)) @@ -1622,7 +1697,7 @@ gboolean flatpak_switch_symlink_and_remove (const char *symlink_path, const char *target, - GError **error) + GError **error) { g_autofree char *symlink_dir = g_path_get_dirname (symlink_path); int try; @@ -1743,301 +1818,33 @@ return -1; } - -static GHashTable *app_ids; - -typedef struct -{ - char *name; - GKeyFile *app_info; - gboolean exited; - GList *pending; -} AppInfo; - -static void -app_info_free (AppInfo *info) +static gboolean +needs_quoting (const char *arg) { - g_free (info->name); - g_key_file_unref (info->app_info); - g_free (info); + while (*arg != 0) + { + char c = *arg; + if (!g_ascii_isalnum (c) && + !(c == '-' || c == '/' || c == '~' || + c == ':' || c == '.' || c == '_' || + c == '=' || c == '@')) + return TRUE; + arg++; + } + return FALSE; } -static void -ensure_app_ids (void) +char * +flatpak_quote_argv (const char *argv[], + gssize len) { - if (app_ids == NULL) - app_ids = g_hash_table_new_full (g_str_hash, g_str_equal, - NULL, (GDestroyNotify) app_info_free); -} + GString *res = g_string_new (""); + int i; -/* Returns NULL on failure, keyfile with name "" if not sandboxed, and full app-info otherwise */ -static GKeyFile * -parse_app_id_from_fileinfo (int pid) -{ - g_autofree char *root_path = NULL; - glnx_autofd int root_fd = -1; - glnx_autofd int info_fd = -1; - struct stat stat_buf; - g_autoptr(GError) local_error = NULL; - g_autoptr(GMappedFile) mapped = NULL; - g_autoptr(GKeyFile) metadata = NULL; + if (len == -1) + len = g_strv_length ((char **) argv); - root_path = g_strdup_printf ("/proc/%u/root", pid); - root_fd = openat (AT_FDCWD, root_path, O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC | O_NOCTTY); - if (root_fd == -1) - { - /* Not able to open the root dir shouldn't happen. Probably the app died and - *we're failing due to /proc/$pid not existing. In that case fail instead - of treating this as privileged. */ - g_debug ("Unable to open %s", root_path); - return NULL; - } - - metadata = g_key_file_new (); - - info_fd = openat (root_fd, ".flatpak-info", O_RDONLY | O_CLOEXEC | O_NOCTTY); - if (info_fd == -1) - { - if (errno == ENOENT) - { - /* No file => on the host */ - g_key_file_set_string (metadata, FLATPAK_METADATA_GROUP_APPLICATION, - FLATPAK_METADATA_KEY_NAME, ""); - return g_steal_pointer (&metadata); - } - - return NULL; /* Some weird error => failure */ - } - - if (fstat (info_fd, &stat_buf) != 0 || !S_ISREG (stat_buf.st_mode)) - return NULL; /* Some weird fd => failure */ - - mapped = g_mapped_file_new_from_fd (info_fd, FALSE, &local_error); - if (mapped == NULL) - { - g_warning ("Can't map .flatpak-info file: %s", local_error->message); - return NULL; - } - - if (!g_key_file_load_from_data (metadata, - g_mapped_file_get_contents (mapped), - g_mapped_file_get_length (mapped), - G_KEY_FILE_NONE, &local_error)) - { - g_warning ("Can't load .flatpak-info file: %s", local_error->message); - return NULL; - } - - return g_steal_pointer (&metadata); -} - -static void -got_credentials_cb (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - AppInfo *info = user_data; - - g_autoptr(GDBusMessage) reply = NULL; - g_autoptr(GError) error = NULL; - GList *l; - - reply = g_dbus_connection_send_message_with_reply_finish (G_DBUS_CONNECTION (source_object), - res, &error); - - if (!info->exited && reply != NULL) - { - GVariant *body = g_dbus_message_get_body (reply); - guint32 pid; - - g_variant_get (body, "(u)", &pid); - - info->app_info = parse_app_id_from_fileinfo (pid); - } - - for (l = info->pending; l != NULL; l = l->next) - { - GTask *task = l->data; - - if (info->app_info == NULL) - g_task_return_new_error (task, FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_FAILED, - "Can't find app id"); - else - g_task_return_pointer (task, g_key_file_ref (info->app_info), (GDestroyNotify)g_key_file_unref); - } - - g_list_free_full (info->pending, g_object_unref); - info->pending = NULL; - - if (info->app_info == NULL) - g_hash_table_remove (app_ids, info->name); -} - -void -flatpak_invocation_lookup_app_info (GDBusMethodInvocation *invocation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GDBusConnection *connection = g_dbus_method_invocation_get_connection (invocation); - const gchar *sender = g_dbus_method_invocation_get_sender (invocation); - - g_autoptr(GTask) task = NULL; - AppInfo *info; - - task = g_task_new (invocation, cancellable, callback, user_data); - - ensure_app_ids (); - - info = g_hash_table_lookup (app_ids, sender); - - if (info == NULL) - { - info = g_new0 (AppInfo, 1); - info->name = g_strdup (sender); - g_hash_table_insert (app_ids, info->name, info); - } - - if (info->app_info) - { - g_task_return_pointer (task, g_key_file_ref (info->app_info), (GDestroyNotify)g_key_file_unref); - } - else - { - if (info->pending == NULL) - { - g_autoptr(GDBusMessage) msg = g_dbus_message_new_method_call ("org.freedesktop.DBus", - "/org/freedesktop/DBus", - "org.freedesktop.DBus", - "GetConnectionUnixProcessID"); - g_dbus_message_set_body (msg, g_variant_new ("(s)", sender)); - - g_dbus_connection_send_message_with_reply (connection, msg, - G_DBUS_SEND_MESSAGE_FLAGS_NONE, - 30000, - NULL, - cancellable, - got_credentials_cb, - info); - } - - info->pending = g_list_prepend (info->pending, g_object_ref (task)); - } -} - -GKeyFile * -flatpak_invocation_lookup_app_info_finish (GDBusMethodInvocation *invocation, - GAsyncResult *result, - GError **error) -{ - return g_task_propagate_pointer (G_TASK (result), error); -} - -static void -name_owner_changed (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - const char *name, *from, *to; - - g_variant_get (parameters, "(sss)", &name, &from, &to); - - ensure_app_ids (); - - if (name[0] == ':' && - strcmp (name, from) == 0 && - strcmp (to, "") == 0) - { - AppInfo *info = g_hash_table_lookup (app_ids, name); - - if (info != NULL) - { - info->exited = TRUE; - if (info->pending == NULL) - g_hash_table_remove (app_ids, name); - } - } -} - -void -flatpak_connection_track_name_owners (GDBusConnection *connection) -{ - g_dbus_connection_signal_subscribe (connection, - "org.freedesktop.DBus", - "org.freedesktop.DBus", - "NameOwnerChanged", - "/org/freedesktop/DBus", - NULL, - G_DBUS_SIGNAL_FLAGS_NONE, - name_owner_changed, - NULL, NULL); -} - -typedef struct -{ - GError *error; - GError *splice_error; - GMainLoop *loop; - int refs; -} SpawnData; - -static void -spawn_data_exit (SpawnData *data) -{ - data->refs--; - if (data->refs == 0) - g_main_loop_quit (data->loop); -} - -static void -spawn_output_spliced_cb (GObject *obj, - GAsyncResult *result, - gpointer user_data) -{ - SpawnData *data = user_data; - - g_output_stream_splice_finish (G_OUTPUT_STREAM (obj), result, &data->splice_error); - spawn_data_exit (data); -} - -static void -spawn_exit_cb (GObject *obj, - GAsyncResult *result, - gpointer user_data) -{ - SpawnData *data = user_data; - - g_subprocess_wait_check_finish (G_SUBPROCESS (obj), result, &data->error); - spawn_data_exit (data); -} - -static gboolean -needs_quoting (const char *arg) -{ - while (*arg != 0) - { - char c = *arg; - if (!g_ascii_isalnum (c) && - !(c == '-' || c == '/' || c == '~' || - c == ':' || c == '.' || c == '_' || - c == '=')) - return TRUE; - arg++; - } - return FALSE; -} - -char * -flatpak_quote_argv (const char *argv[]) -{ - GString *res = g_string_new (""); - int i; - - for (i = 0; argv[i] != NULL; i++) + for (i = 0; i < len; i++) { if (i != 0) g_string_append_c (res, ' '); @@ -2064,115 +1871,8 @@ return g_str_has_suffix (basename, suffix); } -gboolean -flatpak_spawn (GFile *dir, - char **output, - GError **error, - const gchar *argv0, - va_list ap) -{ - GPtrArray *args; - const gchar *arg; - gboolean res; - - args = g_ptr_array_new (); - g_ptr_array_add (args, (gchar *) argv0); - while ((arg = va_arg (ap, const gchar *))) - g_ptr_array_add (args, (gchar *) arg); - g_ptr_array_add (args, NULL); - - res = flatpak_spawnv (dir, output, 0, error, (const gchar * const *) args->pdata); - - g_ptr_array_free (args, TRUE); - - return res; -} - -gboolean -flatpak_spawnv (GFile *dir, - char **output, - GSubprocessFlags flags, - GError **error, - const gchar * const *argv) -{ - g_autoptr(GSubprocessLauncher) launcher = NULL; - g_autoptr(GSubprocess) subp = NULL; - GInputStream *in; - g_autoptr(GOutputStream) out = NULL; - g_autoptr(GMainLoop) loop = NULL; - SpawnData data = {0}; - g_autofree gchar *commandline = NULL; - - launcher = g_subprocess_launcher_new (0); - - if (output) - flags |= G_SUBPROCESS_FLAGS_STDOUT_PIPE; - - g_subprocess_launcher_set_flags (launcher, flags); - - if (dir) - { - g_autofree char *path = g_file_get_path (dir); - g_subprocess_launcher_set_cwd (launcher, path); - } - - commandline = flatpak_quote_argv ((const char **)argv); - g_debug ("Running: %s", commandline); - - subp = g_subprocess_launcher_spawnv (launcher, argv, error); - - if (subp == NULL) - return FALSE; - - loop = g_main_loop_new (NULL, FALSE); - - data.loop = loop; - data.refs = 1; - - if (output) - { - data.refs++; - in = g_subprocess_get_stdout_pipe (subp); - out = g_memory_output_stream_new_resizable (); - g_output_stream_splice_async (out, - in, - G_OUTPUT_STREAM_SPLICE_NONE, - 0, - NULL, - spawn_output_spliced_cb, - &data); - } - - g_subprocess_wait_async (subp, NULL, spawn_exit_cb, &data); - - g_main_loop_run (loop); - - if (data.error) - { - g_propagate_error (error, data.error); - g_clear_error (&data.splice_error); - return FALSE; - } - - if (out) - { - if (data.splice_error) - { - g_propagate_error (error, data.splice_error); - return FALSE; - } - - /* Null terminate */ - g_output_stream_write (out, "\0", 1, NULL, NULL); - g_output_stream_close (out, NULL, NULL); - *output = g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (out)); - } - - return TRUE; -} - GFile * -flatpak_build_file_va (GFile *base, +flatpak_build_file_va (GFile *base, va_list args) { g_autoptr(GFile) res = g_object_ref (base); @@ -2180,7 +1880,7 @@ while ((arg = va_arg (args, const gchar *))) { - GFile *child = g_file_resolve_relative_path (res, arg); + g_autoptr(GFile) child = g_file_resolve_relative_path (res, arg); g_set_object (&res, child); } @@ -2211,7 +1911,7 @@ do { - path = g_object_get_qdata ((GObject*)file, _file_path_quark); + path = g_object_get_qdata ((GObject *) file, _file_path_quark); if (path == NULL) { g_autofree char *new_path = NULL; @@ -2219,7 +1919,7 @@ if (new_path == NULL) return NULL; - if (g_object_replace_qdata ((GObject*)file, _file_path_quark, + if (g_object_replace_qdata ((GObject *) file, _file_path_quark, NULL, new_path, g_free, NULL)) path = g_steal_pointer (&new_path); } @@ -2230,11 +1930,11 @@ } gboolean -flatpak_openat_noatime (int dfd, - const char *name, - int *ret_fd, - GCancellable *cancellable, - GError **error) +flatpak_openat_noatime (int dfd, + const char *name, + int *ret_fd, + GCancellable *cancellable, + GError **error) { int fd; int flags = O_RDONLY | O_CLOEXEC; @@ -2248,9 +1948,9 @@ */ if (fd == -1 && (errno == EPERM || errno == EINVAL)) #endif - do - fd = openat (dfd, name, flags, 0); - while (G_UNLIKELY (fd == -1 && errno == EINTR)); + do + fd = openat (dfd, name, flags, 0); + while (G_UNLIKELY (fd == -1 && errno == EINTR)); if (fd == -1) { @@ -2279,6 +1979,7 @@ gboolean merge = (flags & FLATPAK_CP_FLAGS_MERGE) != 0; gboolean no_chown = (flags & FLATPAK_CP_FLAGS_NO_CHOWN) != 0; gboolean move = (flags & FLATPAK_CP_FLAGS_MOVE) != 0; + g_autoptr(GFileInfo) child_info = NULL; GError *temp_error = NULL; int r; @@ -2392,13 +2093,18 @@ return ret; } -gboolean -flatpak_zero_mtime (int parent_dfd, - const char *rel_path, - GCancellable *cancellable, - GError **error) +static gboolean +_flatpak_canonicalize_permissions (int parent_dfd, + const char *rel_path, + gboolean toplevel, + GError **error) { struct stat stbuf; + gboolean res = TRUE; + + /* Note, in order to not leave non-canonical things around in case + * of error, this continues after errors, but returns the first + * error. */ if (TEMP_FAILURE_RETRY (fstatat (parent_dfd, rel_path, &stbuf, AT_SYMLINK_NOFOLLOW)) != 0) { @@ -2409,51 +2115,92 @@ if (S_ISDIR (stbuf.st_mode)) { g_auto(GLnxDirFdIterator) dfd_iter = { 0, }; - gboolean inited; - inited = glnx_dirfd_iterator_init_at (parent_dfd, rel_path, FALSE, &dfd_iter, NULL); + /* For the toplevel we set to 0700 so we can modify it, but not + expose any non-canonical files to any other user, then we set + it to 0755 afterwards. */ + if (fchmodat (parent_dfd, rel_path, toplevel ? 0700 : 0755, 0) != 0) + { + glnx_set_error_from_errno (error); + error = NULL; + res = FALSE; + } - while (inited) + if (glnx_dirfd_iterator_init_at (parent_dfd, rel_path, FALSE, &dfd_iter, NULL)) { - struct dirent *dent; + while (TRUE) + { + struct dirent *dent; - if (!glnx_dirfd_iterator_next_dent (&dfd_iter, &dent, NULL, NULL) || dent == NULL) - break; + if (!glnx_dirfd_iterator_next_dent (&dfd_iter, &dent, NULL, NULL) || dent == NULL) + break; - if (!flatpak_zero_mtime (dfd_iter.fd, dent->d_name, - cancellable, error)) - return FALSE; + if (!_flatpak_canonicalize_permissions (dfd_iter.fd, dent->d_name, FALSE, error)) + { + error = NULL; + res = FALSE; + } + } } - /* Update stbuf */ - if (TEMP_FAILURE_RETRY (fstat (dfd_iter.fd, &stbuf)) != 0) + if (toplevel && + fchmodat (parent_dfd, rel_path, 0755, 0) != 0) { glnx_set_error_from_errno (error); - return FALSE; + error = NULL; + res = FALSE; } - } - /* OSTree checks out to mtime 0, so we do the same */ - if (stbuf.st_mtime != OSTREE_TIMESTAMP) + return res; + } + else if (S_ISREG(stbuf.st_mode)) { - const struct timespec times[2] = { { 0, UTIME_OMIT }, { OSTREE_TIMESTAMP, } }; + mode_t mode; + + /* If use can execute, make executable by all */ + if (stbuf.st_mode & S_IXUSR) + mode = 0755; + else /* otherwise executable by none */ + mode = 0644; - if (TEMP_FAILURE_RETRY (utimensat (parent_dfd, rel_path, times, AT_SYMLINK_NOFOLLOW)) != 0) + if (fchmodat (parent_dfd, rel_path, mode, 0) != 0) { glnx_set_error_from_errno (error); - return FALSE; + res = FALSE; + } + } + else if (S_ISLNK(stbuf.st_mode)) + { + /* symlinks have no permissions */ + } + else + { + /* some weird non-canonical type, lets delete it */ + if (unlinkat(parent_dfd, rel_path, 0) != 0) + { + glnx_set_error_from_errno (error); + res = FALSE; } } - return TRUE; + return res; +} + +/* Canonicalizes files to the same permissions as bare-user-only checkouts */ +gboolean +flatpak_canonicalize_permissions (int parent_dfd, + const char *rel_path, + GError **error) +{ + return _flatpak_canonicalize_permissions (parent_dfd, rel_path, TRUE, error); } /* Make a directory, and its parent. Don't error if it already exists. * If you want a failure mode with EEXIST, use g_file_make_directory_with_parents. */ gboolean -flatpak_mkdir_p (GFile *dir, - GCancellable *cancellable, - GError **error) +flatpak_mkdir_p (GFile *dir, + GCancellable *cancellable, + GError **error) { return glnx_shutil_mkdir_p_at (AT_FDCWD, flatpak_file_get_path_cached (dir), @@ -2463,9 +2210,9 @@ } gboolean -flatpak_rm_rf (GFile *dir, - GCancellable *cancellable, - GError **error) +flatpak_rm_rf (GFile *dir, + GCancellable *cancellable, + GError **error) { return glnx_shutil_rm_rf_at (AT_FDCWD, flatpak_file_get_path_cached (dir), @@ -2474,7 +2221,7 @@ char * flatpak_readlink (const char *path, - GError **error) + GError **error) { char buf[PATH_MAX + 1]; ssize_t symlink_size; @@ -2492,7 +2239,7 @@ char * flatpak_resolve_link (const char *path, - GError **error) + GError **error) { g_autofree char *link = flatpak_readlink (path, error); g_autofree char *dirname = NULL; @@ -2514,10 +2261,11 @@ return g_file_get_path (file); } -gboolean flatpak_file_rename (GFile *from, - GFile *to, - GCancellable *cancellable, - GError **error) +gboolean +flatpak_file_rename (GFile *from, + GFile *to, + GCancellable *cancellable, + GError **error) { if (g_cancellable_set_error_if_cancelled (cancellable, error)) return FALSE; @@ -2571,7 +2319,9 @@ 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) + /* Valgrind doesn't currently handle G_ADD_SEALS, so lets not seal when debugging... */ + if ((!RUNNING_ON_VALGRIND) && + 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); @@ -2581,12 +2331,12 @@ } gboolean -flatpak_open_in_tmpdir_at (int tmpdir_fd, - int mode, - char *tmpl, - GOutputStream **out_stream, - GCancellable *cancellable, - GError **error) +flatpak_open_in_tmpdir_at (int tmpdir_fd, + int mode, + char *tmpl, + GOutputStream **out_stream, + GCancellable *cancellable, + GError **error) { const int max_attempts = 128; int i; @@ -2687,6 +2437,8 @@ gsize imid; gsize n; + g_return_val_if_fail (out_pos != NULL, FALSE); + n = g_variant_n_children (array); if (n == 0) return FALSE; @@ -2819,15 +2571,15 @@ } g_ptr_array_add (res, NULL); - return (char **)g_ptr_array_free (res, FALSE); + return (char **) g_ptr_array_free (res, FALSE); } gboolean -flatpak_summary_lookup_ref (GVariant *summary, - const char *collection_id, - const char *ref, - char **out_checksum, - GVariant **out_variant) +flatpak_summary_lookup_ref (GVariant *summary, + const char *collection_id, + const char *ref, + char **out_checksum, + GVariant **out_variant) { g_autoptr(GVariant) refs = NULL; int pos; @@ -2900,9 +2652,9 @@ } gboolean -flatpak_repo_set_deploy_collection_id (OstreeRepo *repo, - gboolean deploy_collection_id, - GError **error) +flatpak_repo_set_deploy_collection_id (OstreeRepo *repo, + gboolean deploy_collection_id, + GError **error) { g_autoptr(GKeyFile) config = NULL; @@ -2913,7 +2665,7 @@ gboolean flatpak_repo_set_gpg_keys (OstreeRepo *repo, - GBytes *bytes, + GBytes *bytes, GError **error) { g_autoptr(GKeyFile) config = NULL; @@ -2952,27 +2704,25 @@ } gboolean -flatpak_repo_set_collection_id (OstreeRepo *repo, - const char *collection_id, - GError **error) +flatpak_repo_set_collection_id (OstreeRepo *repo, + const char *collection_id, + GError **error) { -#ifdef FLATPAK_ENABLE_P2P g_autoptr(GKeyFile) config = NULL; - config = ostree_repo_copy_config (repo); if (!ostree_repo_set_collection_id (repo, collection_id, error)) return FALSE; + config = ostree_repo_copy_config (repo); if (!ostree_repo_write_config (repo, config, error)) return FALSE; -#endif /* FLATPAK_ENABLE_P2P */ return TRUE; } GVariant * flatpak_commit_get_extra_data_sources (GVariant *commitv, - GError **error) + GError **error) { g_autoptr(GVariant) commit_metadata = NULL; g_autoptr(GVariant) extra_data_sources = NULL; @@ -3010,13 +2760,13 @@ } void -flatpak_repo_parse_extra_data_sources (GVariant *extra_data_sources, - int index, - const char **name, - guint64 *download_size, - guint64 *installed_size, +flatpak_repo_parse_extra_data_sources (GVariant *extra_data_sources, + int index, + const char **name, + guint64 *download_size, + guint64 *installed_size, const guchar **sha256, - const char **uri) + const char **uri) { g_autoptr(GVariant) sha256_v = NULL; g_variant_get_child (extra_data_sources, index, "(^aytt@ay&s)", @@ -3089,7 +2839,7 @@ base_input = g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (base_input)); if (!G_IS_UNIX_INPUT_STREAM (base_input)) - return flatpak_fail (error, "Unable to find size of commit %s, not an unix stream\n", checksum); + return flatpak_fail (error, "Unable to find size of commit %s, not an unix stream", checksum); fd = g_unix_input_stream_get_fd (G_UNIX_INPUT_STREAM (base_input)); @@ -3139,10 +2889,10 @@ static void -flatpak_repo_collect_extra_data_sizes (OstreeRepo *repo, - const char *rev, - guint64 *installed_size, - guint64 *download_size) +flatpak_repo_collect_extra_data_sizes (OstreeRepo *repo, + const char *rev, + guint64 *installed_size, + guint64 *download_size) { g_autoptr(GVariant) extra_data_sources = NULL; gsize n_extra_data; @@ -3176,9 +2926,10 @@ /* Loads a summary file from a local repo */ GVariant * flatpak_repo_load_summary (OstreeRepo *repo, - GError **error) + GError **error) { glnx_autofd int fd = -1; + g_autoptr(GMappedFile) mfile = NULL; g_autoptr(GBytes) bytes = NULL; @@ -3198,17 +2949,22 @@ return g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, bytes, TRUE)); } -typedef struct { - guint64 installed_size; - guint64 download_size; - char *metadata_contents; +typedef struct +{ + guint64 installed_size; + guint64 download_size; + char *metadata_contents; + GVariant *sparse_data; } CommitData; static void commit_data_free (gpointer data) { CommitData *rev_data = data; + g_free (rev_data->metadata_contents); + if (rev_data->sparse_data) + g_variant_unref (rev_data->sparse_data); g_free (rev_data); } @@ -3217,19 +2973,16 @@ static void populate_commit_data_cache (GVariant *metadata, GVariant *summary, - GHashTable *commit_data_cache /* (element-type utf8 CommitData) */) + GHashTable *commit_data_cache /* (element-type utf8 CommitData) */) { g_autoptr(GVariant) cache_v = NULL; g_autoptr(GVariant) cache = NULL; + g_autoptr(GVariant) sparse_cache = NULL; gsize n, i; const char *old_collection_id; -#if FLATPAK_ENABLE_P2P if (!g_variant_lookup (metadata, "ostree.summary.collection-id", "&s", &old_collection_id)) old_collection_id = NULL; -#else /* if !FLATPAK_ENABLE_P2P */ - old_collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ cache_v = g_variant_lookup_value (metadata, "xa.cache", NULL); @@ -3238,6 +2991,8 @@ cache = g_variant_get_child_value (cache_v, 0); + sparse_cache = g_variant_lookup_value (metadata, "xa.sparse-cache", NULL); + n = g_variant_n_children (cache); for (i = 0; i < n; i++) { @@ -3263,11 +3018,14 @@ old_download_size = GUINT64_FROM_BE (old_download_size); g_variant_get_child (old_commit_data_v, 2, "s", &old_metadata); - old_rev_data = g_new (CommitData, 1); + old_rev_data = g_new0 (CommitData, 1); old_rev_data->installed_size = old_installed_size; old_rev_data->download_size = old_download_size; old_rev_data->metadata_contents = g_steal_pointer (&old_metadata); + if (sparse_cache) + old_rev_data->sparse_data = g_variant_lookup_value (sparse_cache, old_ref, G_VARIANT_TYPE_VARDICT); + g_hash_table_insert (commit_data_cache, g_steal_pointer (&old_rev), old_rev_data); } } @@ -3280,11 +3038,12 @@ * but kept for backwards compatibility). * * Note that there are two keys for the collection ID: collection-id, and - * xa.collection-id. If a client does not currently have a collection ID configured - * for this remote, it will *only* update its configuration from xa.collection-id. - * This allows phased deployment of collection-based repositories. Clients will - * only update their configuration from an unset to a set collection ID once - * (otherwise the security properties of collection IDs are broken). */ + * ostree.deploy-collection-id. If a client does not currently have a + * collection ID configured for this remote, it will *only* update its + * configuration from ostree.deploy-collection-id. This allows phased + * deployment of collection-based repositories. Clients will only update their + * configuration from an unset to a set collection ID once (otherwise the + * security properties of collection IDs are broken). */ gboolean flatpak_repo_update (OstreeRepo *repo, const char **gpg_key_ids, @@ -3294,15 +3053,17 @@ { GVariantBuilder builder; GVariantBuilder ref_data_builder; + GVariantBuilder ref_sparse_data_builder; GKeyFile *config; g_autofree char *title = NULL; g_autofree char *redirect_url = NULL; g_autofree char *default_branch = NULL; g_autofree char *gpg_keys = NULL; + g_autoptr(GVariant) old_summary = NULL; g_autoptr(GVariant) new_summary = NULL; g_autoptr(GHashTable) refs = NULL; - const char *prefixes[] = { "appstream", "app", "runtime", NULL }; + const char *prefixes[] = { "appstream", "appstream2", "app", "runtime", NULL }; const char **prefix; g_autoptr(GList) ordered_keys = NULL; GList *l = NULL; @@ -3325,11 +3086,7 @@ deploy_collection_id = g_key_file_get_boolean (config, "flatpak", "deploy-collection-id", NULL); } -#ifdef FLATPAK_ENABLE_P2P collection_id = ostree_repo_get_collection_id (repo); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* FLATPAK_ENABLE_P2P */ if (title) g_variant_builder_add (&builder, "{sv}", "xa.title", @@ -3343,8 +3100,13 @@ g_variant_builder_add (&builder, "{sv}", "xa.default-branch", g_variant_new_string (default_branch)); +/* FIXME: Remove this check when we depend on ostree 2018.9 */ +#ifndef OSTREE_META_KEY_DEPLOY_COLLECTION_ID +#define OSTREE_META_KEY_DEPLOY_COLLECTION_ID "ostree.deploy-collection-id" +#endif + if (deploy_collection_id && collection_id != NULL) - g_variant_builder_add (&builder, "{sv}", "xa.collection-id", + g_variant_builder_add (&builder, "{sv}", OSTREE_META_KEY_DEPLOY_COLLECTION_ID, g_variant_new_string (collection_id)); else if (deploy_collection_id) g_debug ("Ignoring deploy-collection-id=true because no collection ID is set."); @@ -3359,10 +3121,11 @@ g_variant_builder_add (&builder, "{sv}", "xa.gpg-keys", g_variant_new_from_data (G_VARIANT_TYPE ("ay"), decoded, decoded_len, - TRUE, (GDestroyNotify)g_free, decoded)); + TRUE, (GDestroyNotify) g_free, decoded)); } g_variant_builder_init (&ref_data_builder, G_VARIANT_TYPE ("a{s(tts)}")); + g_variant_builder_init (&ref_sparse_data_builder, G_VARIANT_TYPE ("a{sa{sv}}")); /* Only operate on flatpak relevant refs */ refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); @@ -3392,11 +3155,9 @@ old_summary = flatpak_repo_load_summary (repo, NULL); -#ifdef FLATPAK_ENABLE_P2P if (!ostree_repo_resolve_rev (repo, OSTREE_REPO_METADATA_REF, TRUE, &old_ostree_metadata_checksum, error)) return FALSE; -#endif /* FLATPAK_ENABLE_P2P */ if (old_summary != NULL && old_ostree_metadata_checksum != NULL && @@ -3428,6 +3189,8 @@ g_autoptr(GVariant) commit_v = NULL; g_autoptr(GVariant) commit_metadata = NULL; CommitData *rev_data; + const char *eol = NULL; + const char *eol_rebase = NULL; /* See if we already have the info on this revision */ if (g_hash_table_lookup (commit_data_cache, rev)) @@ -3461,10 +3224,24 @@ flatpak_repo_collect_extra_data_sizes (repo, rev, &installed_size, &download_size); - rev_data = g_new (CommitData, 1); + rev_data = g_new0 (CommitData, 1); rev_data->installed_size = installed_size; rev_data->download_size = download_size; - rev_data->metadata_contents = g_strdup (metadata_contents); + rev_data->metadata_contents = g_steal_pointer (&metadata_contents); + + g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_ENDOFLIFE, "&s", &eol); + g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_ENDOFLIFE_REBASE, "&s", &eol_rebase); + if (eol || eol_rebase) + { + g_auto(GVariantBuilder) sparse_builder = FLATPAK_VARIANT_BUILDER_INITIALIZER; + g_variant_builder_init (&sparse_builder, G_VARIANT_TYPE_VARDICT); + if (eol) + g_variant_builder_add (&sparse_builder, "{sv}", "eol", g_variant_new_string (eol)); + if (eol_rebase) + g_variant_builder_add (&sparse_builder, "{sv}", "eolr", g_variant_new_string (eol_rebase)); + + rev_data->sparse_data = g_variant_ref_sink (g_variant_builder_end (&sparse_builder)); + } g_hash_table_insert (commit_data_cache, g_strdup (rev), rev_data); } @@ -3481,6 +3258,9 @@ GUINT64_TO_BE (rev_data->installed_size), GUINT64_TO_BE (rev_data->download_size), rev_data->metadata_contents); + if (rev_data->sparse_data) + g_variant_builder_add (&ref_sparse_data_builder, "{s@a{sv}}", + ref, rev_data->sparse_data); } /* Note: xa.cache doesn’t need to support collection IDs for the refs listed @@ -3492,12 +3272,14 @@ g_variant_builder_add (&builder, "{sv}", "xa.cache", g_variant_new_variant (g_variant_builder_end (&ref_data_builder))); + g_variant_builder_add (&builder, "{sv}", "xa.sparse-cache", + g_variant_builder_end (&ref_sparse_data_builder)); + new_summary = g_variant_ref_sink (g_variant_builder_end (&builder)); /* Write out a new metadata commit for the repository. */ if (collection_id != NULL) { -#ifdef FLATPAK_ENABLE_P2P OstreeCollectionRef collection_ref = { (gchar *) collection_id, (gchar *) OSTREE_REPO_METADATA_REF }; g_autofree gchar *new_ostree_metadata_checksum = NULL; g_autoptr(OstreeMutableTree) mtree = NULL; @@ -3524,7 +3306,7 @@ goto out; if (!ostree_repo_write_commit (repo, old_ostree_metadata_checksum, - NULL /* subject */, NULL /* body */, + NULL /* subject */, NULL /* body */, new_summary_commit, repo_file, &new_ostree_metadata_checksum, NULL, error)) goto out; @@ -3552,10 +3334,6 @@ if (!ostree_repo_commit_transaction (repo, NULL, cancellable, error)) goto out; -#else /* if !FLATPAK_ENABLE_P2P */ - g_assert_not_reached (); - goto out; -#endif /* FLATPAK_ENABLE_P2P */ } /* Regenerate and re-sign the summary file. */ @@ -3614,8 +3392,12 @@ GFileInfo *file_info, gpointer user_data) { + const char *ignore_filename = user_data; guint current_mode; + if (g_strcmp0 (ignore_filename, g_file_info_get_name (file_info)) == 0) + return OSTREE_REPO_COMMIT_FILTER_SKIP; + /* No user info */ g_file_info_set_attribute_uint32 (file_info, "unix::uid", 0); g_file_info_set_attribute_uint32 (file_info, "unix::gid", 0); @@ -3655,7 +3437,7 @@ /* Drop .desktop file suffix (unless the actual app id ends with .desktop) */ if (g_str_has_suffix (id_text, ".desktop") && !g_str_has_suffix (id, ".desktop")) - id_text[strlen(id_text)-strlen(".desktop")] = 0; + id_text[strlen (id_text) - strlen (".desktop")] = 0; if (!g_str_has_prefix (id_text, id)) { @@ -3898,6 +3680,7 @@ { FlatpakXml *component_id, *component_id_text_node; g_autofree char *component_id_text = NULL; + char *component_id_suffix; if (g_strcmp0 (component->element_name, "component") != 0) { @@ -3910,33 +3693,37 @@ component_id_text = g_strstrip (g_strdup (component_id_text_node->text)); - /* .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)) + /* We're looking for a component that matches the app-id (id), but it + may have some further elements (separated by dot) and can also have + ".desktop" at the end which we need to strip out. Further complicating + things, some actual app ids ends in .desktop, such as org.telegram.desktop. */ + + component_id_suffix = component_id_text + strlen (id); /* Don't deref before we check for prefix match! */ + if (!g_str_has_prefix (component_id_text, id) || + (component_id_suffix[0] != 0 && component_id_suffix[0] != '.')) { component = component->next_sibling; continue; } - g_print ("Extracting icons for component %s\n", component_id_text); + if (g_str_has_suffix (component_id_suffix, ".desktop")) + component_id_suffix[strlen (component_id_suffix) - strlen (".desktop")] = 0; + + g_print (_("Extracting icons for component %s\n"), component_id_text); if (!copy_icon (component_id_text, root, dest, "64x64", &my_error)) { - g_print ("Error copying 64x64 icon: %s\n", my_error->message); + g_print (_("Error copying 64x64 icon: %s\n"), my_error->message); g_clear_error (&my_error); } if (!copy_icon (component_id_text, root, dest, "128x128", &my_error)) { - g_print ("Error copying 128x128 icon: %s\n", my_error->message); + g_print (_("Error copying 128x128 icon: %s\n"), my_error->message); g_clear_error (&my_error); } - /* We updated icons for our component, so we're done */ - break; + /* We might match other prefixes, so keep on going */ + component = component->next_sibling; } } @@ -3964,8 +3751,10 @@ return appstream_root; } -GBytes * +gboolean flatpak_appstream_xml_root_to_data (FlatpakXml *appstream_root, + GBytes **uncompressed, + GBytes **compressed, GError **error) { g_autoptr(GString) xml = NULL; @@ -3978,16 +3767,25 @@ xml = g_string_new (""); flatpak_xml_to_string (appstream_root, xml); - compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); - out = g_memory_output_stream_new_resizable (); - out2 = g_converter_output_stream_new (out, G_CONVERTER (compressor)); - if (!g_output_stream_write_all (out2, xml->str, xml->len, - NULL, NULL, error)) - return NULL; - if (!g_output_stream_close (out2, NULL, error)) - return NULL; + if (compressed) + { + compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); + out = g_memory_output_stream_new_resizable (); + out2 = g_converter_output_stream_new (out, G_CONVERTER (compressor)); + if (!g_output_stream_write_all (out2, xml->str, xml->len, + NULL, NULL, error)) + return FALSE; + if (!g_output_stream_close (out2, NULL, error)) + return FALSE; + } + + if (uncompressed) + *uncompressed = g_string_free_to_bytes (g_steal_pointer (&xml)); - return g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (out)); + if (compressed) + *compressed = g_memory_output_stream_steal_as_bytes (G_MEMORY_OUTPUT_STREAM (out)); + + return TRUE; } gboolean @@ -3999,18 +3797,15 @@ GError **error) { g_autoptr(GHashTable) all_refs = NULL; + g_autofree const char **all_refs_keys = NULL; + guint n_keys; + gsize i; g_autoptr(GHashTable) arches = NULL; /* (element-type utf8 utf8) */ - GHashTableIter iter; - gpointer key; const char *collection_id; arches = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); -#ifdef FLATPAK_ENABLE_P2P collection_id = ostree_repo_get_collection_id (repo); -#else /* if !FLATPAK_ENABLE_P2P */ - collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ if (!ostree_repo_list_refs (repo, NULL, @@ -4019,12 +3814,16 @@ error)) return FALSE; - g_hash_table_iter_init (&iter, all_refs); - while (g_hash_table_iter_next (&iter, &key, NULL)) + all_refs_keys = (const char **) g_hash_table_get_keys_as_array (all_refs, &n_keys); + + /* Sort refs so that appdata order is stable for e.g. deltas */ + g_qsort_with_data (all_refs_keys, n_keys, sizeof (char *), (GCompareDataFunc) flatpak_strcmp0_ptr, NULL); + + for (i = 0; i < n_keys; i++) { - const char *ref = key; - const char *arch; + const char *ref = all_refs_keys[i]; g_auto(GStrv) split = NULL; + const char *arch; split = flatpak_decompose_ref (ref, NULL); if (!split) @@ -4032,187 +3831,242 @@ arch = split[2]; if (!g_hash_table_contains (arches, arch)) - g_hash_table_add (arches, g_strdup (arch)); + { + const char *reverse_compat_arch; + g_hash_table_add (arches, g_strdup (arch)); + + /* If repo contains e.g. i386, also generated x86-64 appdata */ + reverse_compat_arch = flatpak_get_compat_arch_reverse (arch); + if (reverse_compat_arch) + g_hash_table_add (arches, g_strdup (reverse_compat_arch)); + } } - g_hash_table_iter_init (&iter, arches); - while (g_hash_table_iter_next (&iter, &key, NULL)) - { - GHashTableIter iter2; - const char *arch = key; - g_autofree char *tmpdir = g_strdup ("/tmp/flatpak-appstream-XXXXXX"); - g_autoptr(FlatpakTempDir) tmpdir_file = NULL; - g_autoptr(GFile) appstream_file = NULL; - g_autoptr(GFile) root = NULL; - g_autoptr(OstreeMutableTree) mtree = NULL; - g_autofree char *commit_checksum = NULL; - OstreeRepoTransactionStats stats; - g_autoptr(OstreeRepoCommitModifier) modifier = NULL; - g_autofree char *parent = NULL; - g_autofree char *branch = NULL; - g_autoptr(FlatpakXml) appstream_root = NULL; - g_autoptr(GBytes) xml_data = NULL; - gboolean skip_commit = FALSE; - - if (g_mkdtemp_full (tmpdir, 0755) == NULL) - return flatpak_fail (error, "Can't create temporary directory"); - - tmpdir_file = g_file_new_for_path (tmpdir); - - appstream_root = flatpak_appstream_xml_new (); - - g_hash_table_iter_init (&iter2, all_refs); - while (g_hash_table_iter_next (&iter2, &key, NULL)) - { - const char *ref = key; - g_auto(GStrv) split = NULL; - g_autoptr(GError) my_error = NULL; + GLNX_HASH_TABLE_FOREACH (arches, const char *, arch) + { + g_autofree char *tmpdir = g_strdup ("/tmp/flatpak-appstream-XXXXXX"); + + g_autoptr(FlatpakTempDir) tmpdir_file = NULL; + g_autoptr(GFile) appstream_file = NULL; + g_autoptr(GFile) appstream_gz_file = NULL; + OstreeRepoTransactionStats stats; + g_autoptr(FlatpakXml) appstream_root = NULL; + g_autoptr(GBytes) xml_data = NULL; + g_autoptr(GBytes) xml_gz_data = NULL; + const char *compat_arch; + g_autoptr(FlatpakRepoTransaction) transaction = NULL; + compat_arch = flatpak_get_compat_arch (arch); + struct + { + const char *ignore_filename; + const char *branch_prefix; + } branch_data[] = { + { "appstream.xml", "appstream" }, + { "appstream.xml.gz", "appstream2" }, + }; + + if (g_mkdtemp_full (tmpdir, 0755) == NULL) + return flatpak_fail (error, "Can't create temporary directory"); + + tmpdir_file = g_file_new_for_path (tmpdir); + + appstream_root = flatpak_appstream_xml_new (); + + for (i = 0; i < n_keys; i++) + { + const char *ref = all_refs_keys[i]; + const char *commit; + g_autoptr(GVariant) commit_v = NULL; + g_autoptr(GVariant) commit_metadata = NULL; + g_auto(GStrv) split = NULL; + g_autoptr(GError) my_error = NULL; + const char *eol = NULL; + const char *eol_rebase = NULL; + + split = flatpak_decompose_ref (ref, NULL); + if (!split) + continue; + + if (strcmp (split[2], arch) != 0) + { + g_autofree char *main_ref = NULL; + /* Include refs that don't match the main arch (e.g. x86_64), if they match + the compat arch (e.g. i386) and the main arch version is not in the repo */ + if (g_strcmp0 (split[2], compat_arch) == 0) + main_ref = g_strdup_printf ("%s/%s/%s/%s", + split[0], split[1], arch, split[3]); + if (main_ref == NULL || + g_hash_table_lookup (all_refs, main_ref)) + continue; + } + + commit = g_hash_table_lookup (all_refs, ref); - split = flatpak_decompose_ref (ref, NULL); - if (!split) + if (!ostree_repo_load_variant (repo, OSTREE_OBJECT_TYPE_COMMIT, commit, + &commit_v, NULL)) + { + g_warning ("Couldn't load commit %s (ref %s)", commit, ref); continue; + } - if (strcmp (split[2], arch) != 0) + commit_metadata = g_variant_get_child_value (commit_v, 0); + g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_ENDOFLIFE, "&s", &eol); + g_variant_lookup (commit_metadata, OSTREE_COMMIT_META_KEY_ENDOFLIFE_REBASE, "&s", &eol_rebase); + if (eol || eol_rebase) + { + g_print (_("%s is end-of-life, ignoring\n"), ref); continue; + } - if (!extract_appstream (repo, appstream_root, - ref, split[1], tmpdir_file, - cancellable, &my_error)) - { - if (g_str_has_prefix (ref, "app/")) - g_print ("No appstream data for %s: %s\n", ref, my_error->message); - continue; - } - } - - xml_data = flatpak_appstream_xml_root_to_data (appstream_root, error); - if (xml_data == NULL) - return FALSE; - - appstream_file = g_file_get_child (tmpdir_file, "appstream.xml.gz"); - - if (!g_file_replace_contents (appstream_file, - g_bytes_get_data (xml_data, NULL), - g_bytes_get_size (xml_data), - NULL, - FALSE, - G_FILE_CREATE_NONE, - NULL, - cancellable, - error)) - return FALSE; - - if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) - return FALSE; - - branch = g_strdup_printf ("appstream/%s", arch); - - if (!ostree_repo_resolve_rev (repo, branch, TRUE, &parent, error)) - goto out; + if (!extract_appstream (repo, appstream_root, + ref, split[1], tmpdir_file, + cancellable, &my_error)) + { + if (g_str_has_prefix (ref, "app/")) + g_print (_("No appstream data for %s: %s\n"), ref, my_error->message); + continue; + } + } - mtree = ostree_mutable_tree_new (); + if (!flatpak_appstream_xml_root_to_data (appstream_root, &xml_data, &xml_gz_data, error)) + return FALSE; - modifier = ostree_repo_commit_modifier_new (OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS | - OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS, - (OstreeRepoCommitFilter) commit_filter, NULL, NULL); + appstream_file = g_file_get_child (tmpdir_file, "appstream.xml"); + if (!g_file_replace_contents (appstream_file, + g_bytes_get_data (xml_data, NULL), + g_bytes_get_size (xml_data), + NULL, + FALSE, + G_FILE_CREATE_NONE, + NULL, + cancellable, + error)) + return FALSE; - if (!ostree_repo_write_directory_to_mtree (repo, G_FILE (tmpdir_file), mtree, modifier, cancellable, error)) - goto out; + appstream_gz_file = g_file_get_child (tmpdir_file, "appstream.xml.gz"); + if (!g_file_replace_contents (appstream_gz_file, + g_bytes_get_data (xml_gz_data, NULL), + g_bytes_get_size (xml_gz_data), + NULL, + FALSE, + G_FILE_CREATE_NONE, + NULL, + cancellable, + error)) + return FALSE; - if (!ostree_repo_write_mtree (repo, mtree, &root, cancellable, error)) - goto out; + transaction = flatpak_repo_transaction_start (repo, cancellable, error); + if (transaction == NULL) + return FALSE; + for (i = 0; i < G_N_ELEMENTS (branch_data); i++) + { + gboolean skip_commit = FALSE; + const char *ignore_filename = branch_data[i].ignore_filename; + const char *branch_prefix = branch_data[i].branch_prefix; + g_autoptr(OstreeMutableTree) mtree = NULL; + g_autoptr(GFile) root = NULL; + g_autofree char *branch = NULL; + g_autofree char *parent = NULL; + g_autoptr(OstreeRepoCommitModifier) modifier = NULL; + g_autofree char *commit_checksum = NULL; - /* No need to commit if nothing changed */ - if (parent) - { - g_autoptr(GFile) parent_root; + branch = g_strdup_printf ("%s/%s", branch_prefix, arch); + if (!ostree_repo_resolve_rev (repo, branch, TRUE, &parent, error)) + return FALSE; - if (!ostree_repo_read_commit (repo, parent, &parent_root, NULL, cancellable, error)) - goto out; + mtree = ostree_mutable_tree_new (); + modifier = ostree_repo_commit_modifier_new (OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS | + OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS, + (OstreeRepoCommitFilter) commit_filter, (gpointer) ignore_filename, NULL); - if (g_file_equal (root, parent_root)) - { - skip_commit = TRUE; - g_debug ("Not updating %s, no change", branch); - } - } + if (!ostree_repo_write_directory_to_mtree (repo, G_FILE (tmpdir_file), mtree, modifier, cancellable, error)) + return FALSE; - if (!skip_commit) - { - g_autoptr(GVariantDict) metadata_dict = NULL; - g_autoptr(GVariant) metadata = NULL; + if (!ostree_repo_write_mtree (repo, mtree, &root, cancellable, error)) + return FALSE; - /* Add bindings to the metadata. Do this even if P2P support is not - * enabled, as it might be enable for other flatpak builds. */ - metadata_dict = g_variant_dict_new (NULL); - g_variant_dict_insert (metadata_dict, "ostree.collection-binding", - "s", (collection_id != NULL) ? collection_id : ""); - g_variant_dict_insert_value (metadata_dict, "ostree.ref-binding", - g_variant_new_strv ((const gchar * const *) &branch, 1)); - metadata = g_variant_ref_sink (g_variant_dict_end (metadata_dict)); + /* No need to commit if nothing changed */ + if (parent) + { + g_autoptr(GFile) parent_root = NULL; - if (timestamp > 0) - { - if (!ostree_repo_write_commit_with_time (repo, parent, "Update", NULL, metadata, - OSTREE_REPO_FILE (root), - timestamp, - &commit_checksum, - cancellable, error)) - goto out; - } - else - { - if (!ostree_repo_write_commit (repo, parent, "Update", NULL, metadata, - OSTREE_REPO_FILE (root), - &commit_checksum, cancellable, error)) - goto out; - } + if (!ostree_repo_read_commit (repo, parent, &parent_root, NULL, cancellable, error)) + return FALSE; - if (gpg_key_ids) - { - int i; + if (g_file_equal (root, parent_root)) + { + skip_commit = TRUE; + g_debug ("Not updating %s, no change", branch); + } + } - for (i = 0; gpg_key_ids[i] != NULL; i++) - { - const char *keyid = gpg_key_ids[i]; + if (!skip_commit) + { + g_autoptr(GVariantDict) metadata_dict = NULL; + g_autoptr(GVariant) metadata = NULL; + + /* Add bindings to the metadata. Do this even if P2P support is not + * enabled, as it might be enable for other flatpak builds. */ + metadata_dict = g_variant_dict_new (NULL); + g_variant_dict_insert (metadata_dict, "ostree.collection-binding", + "s", (collection_id != NULL) ? collection_id : ""); + g_variant_dict_insert_value (metadata_dict, "ostree.ref-binding", + g_variant_new_strv ((const gchar * const *) &branch, 1)); + metadata = g_variant_ref_sink (g_variant_dict_end (metadata_dict)); + + if (timestamp > 0) + { + if (!ostree_repo_write_commit_with_time (repo, parent, "Update", NULL, metadata, + OSTREE_REPO_FILE (root), + timestamp, + &commit_checksum, + cancellable, error)) + return FALSE; + } + else + { + if (!ostree_repo_write_commit (repo, parent, "Update", NULL, metadata, + OSTREE_REPO_FILE (root), + &commit_checksum, cancellable, error)) + return FALSE; + } - if (!ostree_repo_sign_commit (repo, - commit_checksum, - keyid, - gpg_homedir, - cancellable, - error)) - goto out; - } - } + if (gpg_key_ids) + { + int i; + + for (i = 0; gpg_key_ids[i] != NULL; i++) + { + const char *keyid = gpg_key_ids[i]; + + if (!ostree_repo_sign_commit (repo, + commit_checksum, + keyid, + gpg_homedir, + cancellable, + error)) + return FALSE; + } + } -#ifdef FLATPAK_ENABLE_P2P - if (collection_id != NULL) - { - const OstreeCollectionRef collection_ref = { (char *) collection_id, branch }; - ostree_repo_transaction_set_collection_ref (repo, &collection_ref, commit_checksum); - } - else -#endif /* FLATPAK_ENABLE_P2P */ - { - ostree_repo_transaction_set_ref (repo, NULL, branch, commit_checksum); - } + if (collection_id != NULL) + { + const OstreeCollectionRef collection_ref = { (char *) collection_id, branch }; + ostree_repo_transaction_set_collection_ref (repo, &collection_ref, commit_checksum); + } + else + { + ostree_repo_transaction_set_ref (repo, NULL, branch, commit_checksum); + } + } + } - if (!ostree_repo_commit_transaction (repo, &stats, cancellable, error)) - goto out; - } - else - { - ostree_repo_abort_transaction (repo, cancellable, NULL); - } - } + if (!ostree_repo_commit_transaction (repo, &stats, cancellable, error)) + return FALSE; + } return TRUE; - -out: - ostree_repo_abort_transaction (repo, cancellable, NULL); - return FALSE; } void @@ -4231,8 +4085,8 @@ } static int -flatpak_extension_compare (gconstpointer _a, - gconstpointer _b) +flatpak_extension_compare (gconstpointer _a, + gconstpointer _b) { const FlatpakExtension *a = _a; const FlatpakExtension *b = _b; @@ -4247,12 +4101,13 @@ const char *directory, const char *add_ld_path, const char *subdir_suffix, - char **merge_dirs, - GFile *files, - GFile *deploy_dir, - gboolean is_unmaintained) + char **merge_dirs, + GFile *files, + GFile *deploy_dir, + gboolean is_unmaintained) { FlatpakExtension *ext = g_new0 (FlatpakExtension, 1); + g_autoptr(GVariant) deploy_data = NULL; ext->id = g_strdup (id); @@ -4292,7 +4147,7 @@ gboolean flatpak_extension_matches_reason (const char *extension_id, const char *reason, - gboolean default_value) + gboolean default_value) { const char *extension_basename; @@ -4321,7 +4176,7 @@ else if (strcmp (reason, "active-gtk-theme") == 0) { const char *gtk_theme = flatpak_get_gtk_theme (); - return (strcmp (gtk_theme, extension_basename) == 0); + return strcmp (gtk_theme, extension_basename) == 0; } else if (strcmp (reason, "have-intel-gpu") == 0) { @@ -4338,7 +4193,7 @@ const char *extension, const char *arch, const char *branch, - GList *res) + GList *res) { FlatpakExtension *ext; g_autofree char *directory = g_key_file_get_string (metakey, group, @@ -4347,6 +4202,7 @@ g_autofree char *add_ld_path = g_key_file_get_string (metakey, group, FLATPAK_METADATA_KEY_ADD_LD_PATH, NULL); + g_auto(GStrv) merge_dirs = g_key_file_get_string_list (metakey, group, FLATPAK_METADATA_KEY_MERGE_DIRS, NULL, NULL); @@ -4434,6 +4290,31 @@ return res; } +void +flatpak_parse_extension_with_tag (const char *extension, + char **name, + char **tag) +{ + const char *tag_chr = strchr (extension, '@'); + + if (tag_chr) + { + if (name != NULL) + *name = g_strndup (extension, tag_chr - extension); + + /* Everything after the @ */ + if (tag != NULL) + *tag = g_strdup (tag_chr + 1); + + return; + } + + if (name != NULL) + *name = g_strdup (extension); + + if (tag != NULL) + *tag = NULL; +} GList * flatpak_list_extensions (GKeyFile *metakey, @@ -4463,11 +4344,14 @@ g_auto(GStrv) versions = g_key_file_get_string_list (metakey, groups[i], FLATPAK_METADATA_KEY_VERSIONS, NULL, NULL); + g_autofree char *name = NULL; const char *default_branches[] = { default_branch, NULL}; const char **branches; + flatpak_parse_extension_with_tag (extension, &name, NULL); + if (versions) - branches = (const char **)versions; + branches = (const char **) versions; else { if (version) @@ -4476,7 +4360,7 @@ } for (j = 0; branches[j] != NULL; j++) - res = add_extension (metakey, groups[i], extension, arch, branches[j], res); + res = add_extension (metakey, groups[i], name, arch, branches[j], res); } } @@ -4769,12 +4653,12 @@ flatpak_bundle_get_installed_size (GVariant *bundle, gboolean byte_swap) { guint64 total_usize = 0; + g_autoptr(GVariant) meta_entries = NULL; guint i, n_parts; g_variant_get_child (bundle, 6, "@a" OSTREE_STATIC_DELTA_META_ENTRY_FORMAT, &meta_entries); n_parts = g_variant_n_children (meta_entries); - g_print ("Number of parts: %u\n", n_parts); for (i = 0; i < n_parts; i++) { @@ -4857,7 +4741,7 @@ { if (!g_variant_lookup (metadata, "ref", "s", ref)) { - flatpak_fail (error, "Invalid bundle, no ref in metadata"); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Invalid bundle, no ref in metadata")); return NULL; } } @@ -4876,12 +4760,15 @@ if (collection_id != NULL) { -#ifdef FLATPAK_ENABLE_P2P if (!g_variant_lookup (metadata, "collection-id", "s", collection_id)) - *collection_id = NULL; -#else /* if !FLATPAK_ENABLE_P2P */ - *collection_id = NULL; -#endif /* !FLATPAK_ENABLE_P2P */ + { + *collection_id = NULL; + } + else if (**collection_id == '\0') + { + g_free (*collection_id); + *collection_id = NULL; + } } if (app_metadata != NULL) @@ -4940,15 +4827,13 @@ if (metadata == NULL) return FALSE; -#ifdef FLATPAK_ENABLE_P2P if (!ostree_repo_get_remote_option (repo, remote, "collection-id", NULL, &remote_collection_id, NULL)) remote_collection_id = NULL; -#endif /* FLATPAK_ENABLE_P2P */ if (remote_collection_id != NULL && collection_id != NULL && strcmp (remote_collection_id, collection_id) != 0) - return flatpak_fail (error, "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote", + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote"), collection_id, remote_collection_id); if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) @@ -4988,7 +4873,7 @@ trust the source bundle. */ if (ostree_gpg_verify_result_count_valid (gpg_result) == 0 && require_gpg_signature) - return flatpak_fail (error, "GPG signatures found, but none are in trusted keyring"); + return flatpak_fail_error (error, FLATPAK_ERROR_UNTRUSTED, _("GPG signatures found, but none are in trusted keyring")); } if (!ostree_repo_read_commit (repo, to_checksum, &root, NULL, NULL, error)) @@ -5027,23 +4912,24 @@ { /* Immediately remove this broken commit */ ostree_repo_set_ref_immediate (repo, remote, ref, NULL, cancellable, error); - return flatpak_fail (error, "Metadata in header and app are inconsistent"); + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Metadata in header and app are inconsistent")); } return TRUE; } -typedef struct { +typedef struct +{ FlatpakOciPullProgress progress_cb; - gpointer progress_user_data; - guint64 total_size; - guint64 previous_layers_size; - guint32 n_layers; - guint32 pulled_layers; + gpointer progress_user_data; + guint64 total_size; + guint64 previous_layers_size; + guint32 n_layers; + guint32 pulled_layers; } FlatpakOciPullProgressData; static void -oci_layer_progress (guint64 downloaded_bytes, +oci_layer_progress (guint64 downloaded_bytes, gpointer user_data) { FlatpakOciPullProgressData *progress_data = user_data; @@ -5055,16 +4941,17 @@ } gboolean -flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, +flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, + FlatpakOciRegistry *registry, + const char *oci_repository, + const char *digest, FlatpakOciPullProgress progress_cb, - gpointer progress_user_data, - GCancellable *cancellable, - GError **error) + gpointer progress_user_data, + GCancellable *cancellable, + GError **error) { FlatpakOciPullProgressData progress_data = { progress_cb, progress_user_data }; + g_autoptr(FlatpakOciVersioned) versioned = NULL; FlatpakOciManifest *manifest = NULL; g_autoptr(FlatpakOciDescriptor) manifest_desc = NULL; @@ -5080,11 +4967,7 @@ return FALSE; if (!FLATPAK_IS_OCI_MANIFEST (versioned)) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, - "Image is not a manifest"); - return FALSE; - } + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Image is not a manifest")); manifest = FLATPAK_OCI_MANIFEST (versioned); @@ -5120,7 +5003,7 @@ } - index = flatpak_oci_registry_load_index (dst_registry, NULL, NULL, NULL, NULL); + index = flatpak_oci_registry_load_index (dst_registry, NULL, NULL); if (index == NULL) index = flatpak_oci_index_new (); @@ -5138,17 +5021,17 @@ char * -flatpak_pull_from_oci (OstreeRepo *repo, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, - FlatpakOciManifest *manifest, - const char *remote, - const char *ref, +flatpak_pull_from_oci (OstreeRepo *repo, + FlatpakOciRegistry *registry, + const char *oci_repository, + const char *digest, + FlatpakOciManifest *manifest, + const char *remote, + const char *ref, FlatpakOciPullProgress progress_cb, - gpointer progress_user_data, - GCancellable *cancellable, - GError **error) + gpointer progress_user_data, + GCancellable *cancellable, + GError **error) { g_autoptr(OstreeMutableTree) archive_mtree = NULL; g_autoptr(GFile) archive_root = NULL; @@ -5176,18 +5059,18 @@ metadata_builder); if (manifest_ref == NULL) { - flatpak_fail (error, "No ref specified for OCI image %s\n", digest); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("No ref specified for OCI image %s"), digest); return NULL; } if (strcmp (manifest_ref, ref) != 0) { - flatpak_fail (error, "Wrong ref (%s) specified for OCI image %s, expected %s\n", manifest_ref, digest, ref); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong ref (%s) specified for OCI image %s, expected %s"), manifest_ref, digest, ref); return NULL; } g_variant_builder_add (metadata_builder, "{s@v}", "xa.alt-id", - g_variant_new_variant (g_variant_new_string (digest + strlen("sha256:")))); + g_variant_new_variant (g_variant_new_string (digest + strlen ("sha256:")))); if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) return NULL; @@ -5221,7 +5104,7 @@ opts.ignore_unsupported_content = TRUE; layer_fd = flatpak_oci_registry_download_blob (registry, oci_repository, FALSE, - layer->digest, + layer->digest, oci_layer_progress, &progress_data, cancellable, error); if (layer_fd == -1) @@ -5251,7 +5134,7 @@ if (!g_str_has_prefix (layer->digest, "sha256:") || strcmp (layer->digest + strlen ("sha256:"), layer_checksum) != 0) { - flatpak_fail (error, "Wrong layer checksum, expected %s, was %s\n", layer->digest, layer_checksum); + flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, _("Wrong layer checksum, expected %s, was %s"), layer->digest, layer_checksum); goto error; } @@ -5291,7 +5174,7 @@ return g_steal_pointer (&commit_checksum); - error: +error: ostree_repo_abort_transaction (repo, cancellable, NULL); return NULL; @@ -5437,7 +5320,7 @@ { char buf[512]; va_list var_args; - gchar *s; + g_autofree char *s = NULL; #pragma GCC diagnostic push @@ -5461,12 +5344,12 @@ return FALSE; g_strstrip (buf); - if (g_ascii_strcasecmp (buf, "y") == 0 || - g_ascii_strcasecmp (buf, "yes") == 0) + if (g_ascii_strcasecmp (buf, "y") == 0 || + g_ascii_strcasecmp (buf, "yes") == 0) return TRUE; - if (g_ascii_strcasecmp (buf, "n") == 0 || - g_ascii_strcasecmp (buf, "no") == 0) + if (g_ascii_strcasecmp (buf, "n") == 0 || + g_ascii_strcasecmp (buf, "no") == 0) return FALSE; } } @@ -5523,760 +5406,6 @@ } } - -typedef struct { - GMainLoop *loop; - GError *error; - GOutputStream *out; - guint64 downloaded_bytes; - GString *content; - char buffer[16*1024]; - FlatpakLoadUriProgress progress; - GCancellable *cancellable; - gpointer user_data; - guint64 last_progress_time; - char *etag; -} LoadUriData; - -static void -stream_closed (GObject *source, GAsyncResult *res, gpointer user_data) -{ - LoadUriData *data = user_data; - GInputStream *stream = G_INPUT_STREAM (source); - g_autoptr(GError) error = NULL; - - if (!g_input_stream_close_finish (stream, res, &error)) - g_warning ("Error closing http stream: %s", error->message); - - g_main_loop_quit (data->loop); -} - -static void -load_uri_read_cb (GObject *source, GAsyncResult *res, gpointer user_data) -{ - LoadUriData *data = user_data; - GInputStream *stream = G_INPUT_STREAM (source); - gsize nread; - - nread = g_input_stream_read_finish (stream, res, &data->error); - if (nread == -1 || nread == 0) - { - if (data->progress) - data->progress (data->downloaded_bytes, data->user_data); - g_input_stream_close_async (stream, - G_PRIORITY_DEFAULT, NULL, - stream_closed, data); - return; - } - - if (data->out != NULL) - { - gsize n_written; - - if (!g_output_stream_write_all (data->out, data->buffer, nread, &n_written, - NULL, &data->error)) - { - data->downloaded_bytes += n_written; - g_input_stream_close_async (stream, - G_PRIORITY_DEFAULT, NULL, - stream_closed, data); - return; - } - - data->downloaded_bytes += n_written; - } - else - { - data->downloaded_bytes += nread; - g_string_append_len (data->content, data->buffer, nread); - } - - if (g_get_monotonic_time () - data->last_progress_time > 1 * G_USEC_PER_SEC) - { - if (data->progress) - data->progress (data->downloaded_bytes, data->user_data); - data->last_progress_time = g_get_monotonic_time (); - } - - g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer), - G_PRIORITY_DEFAULT, data->cancellable, - load_uri_read_cb, data); -} - -static void -load_uri_callback (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - SoupRequestHTTP *request = SOUP_REQUEST_HTTP(source_object); - g_autoptr(GInputStream) in = NULL; - LoadUriData *data = user_data; - - in = soup_request_send_finish (SOUP_REQUEST (request), res, &data->error); - if (in == NULL) - { - g_main_loop_quit (data->loop); - return; - } - - g_autoptr(SoupMessage) msg = soup_request_http_get_message ((SoupRequestHTTP*) request); - if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) - { - int code; - GQuark domain = G_IO_ERROR; - - switch (msg->status_code) - { - case 304: - domain = FLATPAK_OCI_ERROR; - code = FLATPAK_OCI_ERROR_NOT_CHANGED; - break; - case 404: - case 410: - code = G_IO_ERROR_NOT_FOUND; - break; - default: - code = G_IO_ERROR_FAILED; - } - - data->error = g_error_new (domain, code, - "Server returned status %u: %s", - msg->status_code, - soup_status_get_phrase (msg->status_code)); - g_main_loop_quit (data->loop); - return; - } - - data->etag = g_strdup (soup_message_headers_get_one (msg->response_headers, "ETag")); - - g_input_stream_read_async (in, data->buffer, sizeof (data->buffer), - G_PRIORITY_DEFAULT, data->cancellable, - load_uri_read_cb, data); -} - -SoupSession * -flatpak_create_soup_session (const char *user_agent) -{ - SoupSession *soup_session; - const char *http_proxy; - - soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, user_agent, - SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE, - SOUP_SESSION_USE_THREAD_CONTEXT, TRUE, - SOUP_SESSION_TIMEOUT, 60, - SOUP_SESSION_IDLE_TIMEOUT, 60, - NULL); - soup_session_remove_feature_by_type (soup_session, SOUP_TYPE_CONTENT_DECODER); - http_proxy = g_getenv ("http_proxy"); - if (http_proxy) - { - g_autoptr(SoupURI) proxy_uri = soup_uri_new (http_proxy); - if (!proxy_uri) - g_warning ("Invalid proxy URI '%s'", http_proxy); - else - g_object_set (soup_session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL); - } - - return soup_session; -} - -GBytes * -flatpak_load_http_uri (SoupSession *soup_session, - const char *uri, - FlatpakHTTPFlags flags, - const char *etag, - char **out_etag, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error) -{ - GBytes *bytes = NULL; - g_autoptr(GMainContext) context = NULL; - g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; - g_autoptr(GString) content = g_string_new (""); - LoadUriData data = { NULL }; - SoupMessage *m; - - g_debug ("Loading %s using libsoup", uri); - - context = g_main_context_ref_thread_default (); - - loop = g_main_loop_new (context, TRUE); - data.loop = loop; - data.content = content; - data.progress = progress; - data.cancellable = cancellable; - data.user_data = user_data; - data.last_progress_time = g_get_monotonic_time (); - - request = soup_session_request_http (soup_session, "GET", - uri, error); - if (request == NULL) - return NULL; - - m = soup_request_http_get_message (request); - if (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, - load_uri_callback, &data); - - g_main_loop_run (loop); - - if (data.error) - { - g_propagate_error (error, data.error); - g_free (data.etag); - return NULL; - } - - bytes = g_string_free_to_bytes (g_steal_pointer (&content)); - g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); - - if (out_etag) - *out_etag = g_steal_pointer (&data.etag); - - g_free (data.etag); - - return bytes; -} - -gboolean -flatpak_download_http_uri (SoupSession *soup_session, - const char *uri, - FlatpakHTTPFlags flags, - GOutputStream *out, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; - g_autoptr(GMainContext) context = NULL; - LoadUriData data = { NULL }; - SoupMessage *m; - - g_debug ("Loading %s using libsoup", uri); - - context = g_main_context_ref_thread_default (); - - loop = g_main_loop_new (context, TRUE); - data.loop = loop; - data.out = out; - data.progress = progress; - data.cancellable = cancellable; - data.user_data = user_data; - data.last_progress_time = g_get_monotonic_time (); - - request = soup_session_request_http (soup_session, "GET", - uri, error); - 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); - - g_main_loop_run (loop); - - if (data.error) - { - g_propagate_error (error, data.error); - return FALSE; - } - - g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); - - return TRUE; -} - -/* Uncomment to get debug traces in /tmp/flatpak-completion-debug.txt (nice - * to not have it interfere with stdout/stderr) - */ -#if 0 -void -flatpak_completion_debug (const gchar *format, ...) -{ - va_list var_args; - gchar *s; - static FILE *f = NULL; - - va_start (var_args, format); - s = g_strdup_vprintf (format, var_args); - if (f == NULL) - f = fopen ("/tmp/flatpak-completion-debug.txt", "a+"); - fprintf (f, "%s\n", s); - fflush (f); - g_free (s); -} -#else -void -flatpak_completion_debug (const gchar *format, ...) -{ -} -#endif - -static gboolean -is_word_separator (char c) -{ - return g_ascii_isspace (c); -} - -void -flatpak_complete_file (FlatpakCompletion *completion, - const char *file_type) -{ - flatpak_completion_debug ("completing FILE"); - g_print ("%s\n", file_type); -} - -void -flatpak_complete_dir (FlatpakCompletion *completion) -{ - flatpak_completion_debug ("completing DIR"); - g_print ("%s\n", "__FLATPAK_DIR"); -} - -void -flatpak_complete_word (FlatpakCompletion *completion, - char *format, ...) -{ - va_list args; - const char *rest; - const char *shell_cur; - const char *shell_cur_end; - g_autofree char *string = NULL; - - g_return_if_fail (format != NULL); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wformat-nonliteral" - va_start (args, format); - string = g_strdup_vprintf (format, args); - va_end (args); -#pragma GCC diagnostic pop - - if (!g_str_has_prefix (string, completion->cur)) - return; - - shell_cur = completion->shell_cur ? completion->shell_cur : ""; - - rest = string + strlen (completion->cur); - - shell_cur_end = shell_cur + strlen(shell_cur); - while (shell_cur_end > shell_cur && - rest > string && - shell_cur_end[-1] == rest[-1] && - /* I'm not sure exactly what bash is doing here with =, but this seems to work... */ - shell_cur_end[-1] != '=') - { - rest--; - shell_cur_end--; - } - - flatpak_completion_debug ("completing word: '%s' (%s)", string, rest); - - g_print ("%s\n", rest); -} - -void -flatpak_complete_ref (FlatpakCompletion *completion, - OstreeRepo *repo) -{ - g_autoptr(GHashTable) refs = NULL; - flatpak_completion_debug ("completing REF"); - - if (ostree_repo_list_refs (repo, - NULL, - &refs, NULL, NULL)) - { - GHashTableIter hashiter; - gpointer hashkey, hashvalue; - - g_hash_table_iter_init (&hashiter, refs); - while ((g_hash_table_iter_next (&hashiter, &hashkey, &hashvalue))) - { - const char *ref = (const char *)hashkey; - if (!(g_str_has_prefix (ref, "runtime/") || - g_str_has_prefix (ref, "app/"))) - continue; - flatpak_complete_word (completion, "%s", ref); - } - } -} - -static int -find_current_element (const char *str) -{ - int count = 0; - - if (g_str_has_prefix (str, "app/")) - str += strlen ("app/"); - else if (g_str_has_prefix (str, "runtime/")) - str += strlen ("runtime/"); - - while (str != NULL && count <= 3) - { - str = strchr (str, '/'); - count++; - if (str != NULL) - str = str + 1; - } - - return count; -} - -void -flatpak_complete_partial_ref (FlatpakCompletion *completion, - FlatpakKinds kinds, - const char *only_arch, - FlatpakDir *dir, - const char *remote) -{ - FlatpakKinds matched_kinds; - const char *pref; - g_autofree char *id = NULL; - g_autofree char *arch = NULL; - g_autofree char *branch = NULL; - g_auto(GStrv) refs = NULL; - int element; - const char *cur_parts[4] = { NULL }; - g_autoptr(GError) error = NULL; - int i; - - pref = completion->cur; - element = find_current_element (pref); - - flatpak_split_partial_ref_arg_novalidate (pref, kinds, - NULL, NULL, - &matched_kinds, &id, &arch, &branch); - - cur_parts[1] = id; - cur_parts[2] = arch ? arch : ""; - cur_parts[3] = branch ? branch : ""; - - if (remote) - { - refs = flatpak_dir_find_remote_refs (dir, completion->argv[1], - (element > 1) ? id : NULL, - (element > 3) ? branch : NULL, - (element > 2 )? arch : only_arch, - matched_kinds, NULL, &error); - } - else - { - refs = flatpak_dir_find_installed_refs (dir, - (element > 1) ? id : NULL, - (element > 3) ? branch : NULL, - (element > 2 )? arch : only_arch, - matched_kinds, &error); - } - if (refs == NULL) - flatpak_completion_debug ("find refs error: %s", error->message); - for (i = 0; refs != NULL && refs[i] != NULL; i++) - { - int j; - g_autoptr(GString) comp = NULL; - g_auto(GStrv) parts = flatpak_decompose_ref (refs[i], NULL); - if (parts == NULL) - continue; - - if (!g_str_has_prefix (parts[element], cur_parts[element])) - continue; - - comp = g_string_new (pref); - g_string_append (comp, parts[element] + strlen (cur_parts[element])); - - /* Only complete on the last part if the user explicitly adds a / */ - if (element >= 2) - { - for (j = element + 1; j < 4; j++) - { - g_string_append (comp, "/"); - g_string_append (comp, parts[j]); - } - } - - flatpak_complete_word (completion, "%s", comp->str); - } -} - -static gboolean -switch_already_in_line (FlatpakCompletion *completion, - GOptionEntry *entry) -{ - guint i = 0; - guint line_part_len = 0; - - for (; i < completion->original_argc; ++i) - { - line_part_len = strlen (completion->original_argv[i]); - if (line_part_len > 2 && - g_strcmp0 (&completion->original_argv[i][2], entry->long_name) == 0) - return TRUE; - - if (line_part_len == 2 && - completion->original_argv[i][1] == entry->short_name) - return TRUE; - } - - return FALSE; -} - -static gboolean -should_filter_out_option_from_completion (FlatpakCompletion *completion, - GOptionEntry *entry) -{ - switch (entry->arg) - { - case G_OPTION_ARG_NONE: - case G_OPTION_ARG_STRING: - case G_OPTION_ARG_INT: - case G_OPTION_ARG_FILENAME: - case G_OPTION_ARG_DOUBLE: - case G_OPTION_ARG_INT64: - return switch_already_in_line (completion, entry); - default: - return FALSE; - } -} - -void -flatpak_complete_options (FlatpakCompletion *completion, - GOptionEntry *entries) -{ - GOptionEntry *e = entries; - int i; - - while (e->long_name != NULL) - { - if (e->arg_description) - { - g_autofree char *prefix = g_strdup_printf ("--%s=", e->long_name); - - if (g_str_has_prefix (completion->cur, prefix)) - { - if (strcmp (e->arg_description, "ARCH") == 0) - { - const char *arches[] = {"i386", "x86_64", "aarch64", "arm"}; - for (i = 0; i < G_N_ELEMENTS (arches); i++) - flatpak_complete_word (completion, "%s%s ", prefix, arches[i]); - } - else if (strcmp (e->arg_description, "SHARE") == 0) - { - for (i = 0; flatpak_context_shares[i] != NULL; i++) - flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_shares[i]); - } - else if (strcmp (e->arg_description, "DEVICE") == 0) - { - for (i = 0; flatpak_context_devices[i] != NULL; i++) - flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_devices[i]); - } - else if (strcmp (e->arg_description, "FEATURE") == 0) - { - for (i = 0; flatpak_context_features[i] != NULL; i++) - flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_features[i]); - } - else if (strcmp (e->arg_description, "SOCKET") == 0) - { - for (i = 0; flatpak_context_sockets[i] != NULL; i++) - flatpak_complete_word (completion, "%s%s ", prefix, flatpak_context_sockets[i]); - } - else if (strcmp (e->arg_description, "FILE") == 0) - { - flatpak_complete_file (completion, "__FLATPAK_FILE"); - } - else - flatpak_complete_word (completion, "%s", prefix); - } - else - flatpak_complete_word (completion, "%s", prefix); - } - else - { - /* If this is just a switch, then don't add it multiple - * times */ - if (!should_filter_out_option_from_completion (completion, e)) { - flatpak_complete_word (completion, "--%s ", e->long_name); - } else { - flatpak_completion_debug ("switch --%s is already in line %s", e->long_name, completion->line); - } - } - - /* We may end up checking switch_already_in_line twice, but this is - * for simplicity's sake - the alternative solution would be to - * continue the loop early and have to increment e. */ - if (e->short_name != 0) - { - /* This is a switch, we may not want to add it */ - if (!e->arg_description) - { - if (!should_filter_out_option_from_completion (completion, e)) { - flatpak_complete_word (completion, "-%c ", e->short_name); - } else { - flatpak_completion_debug ("switch -%c is already in line %s", e->short_name, completion->line); - } - } - else - { - flatpak_complete_word (completion, "-%c ", e->short_name); - } - } - e++; - } -} - -static gchar * -pick_word_at (const char *s, - int cursor, - int *out_word_begins_at) -{ - int begin, end; - - if (s[0] == '\0') - { - if (out_word_begins_at != NULL) - *out_word_begins_at = -1; - return NULL; - } - - if (is_word_separator (s[cursor]) && ((cursor > 0 && is_word_separator(s[cursor-1])) || cursor == 0)) - { - if (out_word_begins_at != NULL) - *out_word_begins_at = cursor; - return g_strdup (""); - } - - while (!is_word_separator (s[cursor - 1]) && cursor > 0) - cursor--; - begin = cursor; - - end = begin; - while (!is_word_separator (s[end]) && s[end] != '\0') - end++; - - if (out_word_begins_at != NULL) - *out_word_begins_at = begin; - - return g_strndup (s + begin, end - begin); -} - -static gboolean -parse_completion_line_to_argv (const char *initial_completion_line, - FlatpakCompletion *completion) -{ - gboolean parse_result = g_shell_parse_argv (initial_completion_line, - &completion->original_argc, - &completion->original_argv, - NULL); - - /* Make a shallow copy of argv, which will be our "working set" */ - completion->argc = completion->original_argc; - completion->argv = g_memdup (completion->original_argv, - sizeof (gchar *) * (completion->original_argc + 1)); - - return parse_result; -} - -FlatpakCompletion * -flatpak_completion_new (const char *arg_line, - const char *arg_point, - const char *arg_cur) -{ - FlatpakCompletion *completion; - g_autofree char *initial_completion_line = NULL; - int _point; - char *endp; - int cur_begin; - int i; - - _point = strtol (arg_point, &endp, 10); - if (endp == arg_point || *endp != '\0') - return NULL; - - completion = g_new0 (FlatpakCompletion, 1); - completion->line = g_strdup (arg_line); - completion->shell_cur = g_strdup (arg_cur); - completion->point = _point; - - flatpak_completion_debug ("========================================"); - flatpak_completion_debug ("completion_point=%d", completion->point); - flatpak_completion_debug ("completion_shell_cur='%s'", completion->shell_cur); - flatpak_completion_debug ("----"); - flatpak_completion_debug (" 0123456789012345678901234567890123456789012345678901234567890123456789"); - flatpak_completion_debug ("'%s'", completion->line); - flatpak_completion_debug (" %*s^", completion->point, ""); - - /* compute cur and prev */ - completion->prev = NULL; - completion->cur = pick_word_at (completion->line, completion->point, &cur_begin); - if (cur_begin > 0) - { - gint prev_end; - for (prev_end = cur_begin - 1; prev_end >= 0; prev_end--) - { - if (!is_word_separator (completion->line[prev_end])) - { - completion->prev = pick_word_at (completion->line, prev_end, NULL); - break; - } - } - - initial_completion_line = g_strndup (completion->line, cur_begin); - } - else - initial_completion_line = g_strdup (""); - - flatpak_completion_debug ("'%s'", initial_completion_line); - flatpak_completion_debug ("----"); - - flatpak_completion_debug (" cur='%s'", completion->cur); - flatpak_completion_debug ("prev='%s'", completion->prev); - - if (!parse_completion_line_to_argv (initial_completion_line, - completion)) - { - /* it's very possible the command line can't be parsed (for - * example, missing quotes etc) - in that case, we just - * don't autocomplete at all - */ - flatpak_completion_free (completion); - return NULL; - } - - flatpak_completion_debug ("completion_argv %i:", completion->original_argc); - for (i = 0; i < completion->original_argc; i++) - flatpak_completion_debug (completion->original_argv[i]); - - flatpak_completion_debug ("----"); - - return completion; -} - -void -flatpak_completion_free (FlatpakCompletion *completion) -{ - g_free (completion->cur); - g_free (completion->prev); - g_free (completion->line); - g_free (completion->argv); - g_strfreev (completion->original_argv); - g_free (completion); -} - /* In this NULL means don't care about these paths, while an empty array means match anything */ char ** @@ -6316,7 +5445,7 @@ g_ptr_array_sort (array, flatpak_strcmp0_ptr); g_ptr_array_add (array, NULL); - return (char **)g_ptr_array_free (array, FALSE); + return (char **) g_ptr_array_free (array, FALSE); } char * @@ -6344,10 +5473,11 @@ gboolean flatpak_g_ptr_array_contains_string (GPtrArray *array, const char *str) { - int i ; + int i; + for (i = 0; i < array->len; i++) { - if (strcmp (g_ptr_array_index(array, i), str) == 0) + if (strcmp (g_ptr_array_index (array, i), str) == 0) return TRUE; } return FALSE; @@ -6370,67 +5500,7 @@ g_ptr_array_sort (langs, flatpak_strcmp0_ptr); g_ptr_array_add (langs, NULL); - return (char **)g_ptr_array_free (langs, FALSE); -} - -#define BAR_LENGTH 20 -#define BAR_CHARS " -=#" - -void -flatpak_terminal_progress_cb (const char *status, - guint progress, - gboolean estimating, - gpointer user_data) -{ - g_autoptr(GString) str = g_string_new (""); - FlatpakTerminalProgress *term = user_data; - int i; - int n_full, remainder, partial; - int width, padded_width; - - if (!term->inited) - { - struct winsize w; - term->n_columns = 80; - if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &w) == 0) - term->n_columns = w.ws_col; - term->last_width = 0; - term->inited = 1; - } - - g_string_append (str, "["); - - n_full = (BAR_LENGTH * progress) / 100; - remainder = progress - (n_full * 100 / BAR_LENGTH); - partial = (remainder * strlen(BAR_CHARS) * BAR_LENGTH) / 100; - - for (i = 0; i < n_full; i++) - g_string_append_c (str, BAR_CHARS[strlen(BAR_CHARS)-1]); - - if (i < BAR_LENGTH) - { - g_string_append_c (str, BAR_CHARS[partial]); - i++; - } - - for (; i < BAR_LENGTH; i++) - g_string_append (str, " "); - - g_string_append (str, "] "); - g_string_append (str, status); - - g_print ("\r"); - width = MIN (strlen (str->str), term->n_columns); - padded_width = MAX (term->last_width, width); - term->last_width = width; - g_print ("%-*.*s", padded_width, padded_width, str->str); -} - -void -flatpak_terminal_progress_end (FlatpakTerminalProgress *term) -{ - if (term->inited) - g_print("\n"); + return (char **) g_ptr_array_free (langs, FALSE); } static inline guint @@ -6473,10 +5543,12 @@ guint requested; guint64 total_transferred; g_autofree gchar *formatted_bytes_total_transferred = NULL; + g_autoptr(GVariant) outstanding_fetchesv = NULL; /* 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) + outstanding_fetchesv = ostree_async_progress_get_variant (progress, "outstanding-fetches"); + if (outstanding_fetchesv == NULL) return; buf = g_string_new (""); @@ -6610,13 +5682,14 @@ total size. */ double average_object_size = 1; if (fetched > 0) - average_object_size = bytes_transferred / (double)fetched; + average_object_size = bytes_transferred / (double) fetched; total = average_object_size * requested + total_extra_data_bytes; if (downloading_extra_data) { - g_autofree gchar *formatted_bytes_total = g_format_size_full (total, 0);; + g_autofree gchar *formatted_bytes_total = g_format_size_full (total, 0); + ; g_string_append_printf (buf, _("Downloading extra data: %s/%s"), formatted_bytes_total_transferred, formatted_bytes_total); @@ -6627,11 +5700,14 @@ } /* The download progress goes up to 97% */ - if (total > 0) { - new_progress = 5 + ((total_transferred / (gdouble) total) * 92); - } else { - new_progress = 97; - } + 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); @@ -6660,12 +5736,10 @@ OstreeAsyncProgress *ostree_progress = ostree_async_progress_new_and_connect (progress_cb, progress_data); + g_object_set_data (G_OBJECT (ostree_progress), "callback", progress); g_object_set_data (G_OBJECT (ostree_progress), "last_progress", GUINT_TO_POINTER (0)); - if (progress == flatpak_terminal_progress_cb) - g_object_set_data (G_OBJECT (ostree_progress), "update-frequency", GUINT_TO_POINTER (FLATPAK_CLI_UPDATE_FREQUENCY)); - return ostree_progress; } @@ -6685,3 +5759,122 @@ g_debug ("Opening %s flatpak installation at path %s", dir_name, dir_path_str); } } + +gboolean +flatpak_check_required_version (const char *ref, + GKeyFile *metakey, + GError **error) +{ + g_autofree char *required_version = NULL; + const char *group; + int required_major, required_minor, required_micro; + + if (g_str_has_prefix (ref, "app/")) + group = "Application"; + else + group = "Runtime"; + + required_version = g_key_file_get_string (metakey, group, "required-flatpak", NULL); + if (required_version) + { + if (sscanf (required_version, "%d.%d.%d", &required_major, &required_minor, &required_micro) != 3) + return flatpak_fail_error (error, FLATPAK_ERROR_INVALID_DATA, + _("Invalid require-flatpak argument %s"), required_version); + else + { + if (required_major > PACKAGE_MAJOR_VERSION || + (required_major == PACKAGE_MAJOR_VERSION && required_minor > PACKAGE_MINOR_VERSION) || + (required_major == PACKAGE_MAJOR_VERSION && required_minor == PACKAGE_MINOR_VERSION && required_micro > PACKAGE_MICRO_VERSION)) + return flatpak_fail_error (error, FLATPAK_ERROR_NEED_NEW_FLATPAK, + _("%s needs a later flatpak version (%s)"), + ref, required_version); + } + } + + return TRUE; +} + +static gboolean +str_has_sign (const gchar *str) +{ + return str[0] == '-' || str[0] == '+'; +} + +static gboolean +str_has_hex_prefix (const gchar *str) +{ + return str[0] == '0' && g_ascii_tolower (str[1]) == 'x'; +} + +/* Copied from glib-2.54.0 to avoid the Glib's version bump. + * Function name in glib: g_ascii_string_to_unsigned + * If this is being dropped(migration to g_ascii_string_to_unsigned) + * make sure to remove str_has_hex_prefix and str_has_sign helpers too. + */ +gboolean +flatpak_utils_ascii_string_to_unsigned (const gchar *str, + guint base, + guint64 min, + guint64 max, + guint64 *out_num, + GError **error) +{ + guint64 number; + const gchar *end_ptr = NULL; + gint saved_errno = 0; + + g_return_val_if_fail (str != NULL, FALSE); + g_return_val_if_fail (base >= 2 && base <= 36, FALSE); + g_return_val_if_fail (min <= max, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + if (str[0] == '\0') + { + g_set_error_literal (error, + G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("Empty string is not a number")); + return FALSE; + } + + errno = 0; + number = g_ascii_strtoull (str, (gchar **)&end_ptr, base); + saved_errno = errno; + + if (/* We do not allow leading whitespace, but g_ascii_strtoull + * accepts it and just skips it, so we need to check for it + * ourselves. + */ + g_ascii_isspace (str[0]) || + /* Unsigned number should have no sign. + */ + str_has_sign (str) || + /* We don't support hexadecimal numbers prefixed with 0x or + * 0X. + */ + (base == 16 && str_has_hex_prefix (str)) || + (saved_errno != 0 && saved_errno != ERANGE) || + end_ptr == NULL || + *end_ptr != '\0') + { + g_set_error (error, + G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("“%s” is not an unsigned number"), str); + return FALSE; + } + if (saved_errno == ERANGE || number < min || number > max) + { + gchar *min_str = g_strdup_printf ("%" G_GUINT64_FORMAT, min); + gchar *max_str = g_strdup_printf ("%" G_GUINT64_FORMAT, max); + + g_set_error (error, + G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT, + _("Number “%s” is out of bounds [%s, %s]"), + str, min_str, max_str); + g_free (min_str); + g_free (max_str); + return FALSE; + } + if (out_num != NULL) + *out_num = number; + return TRUE; +} diff -Nru flatpak-0.11.3/common/flatpak-utils.h flatpak-1.0.7/common/flatpak-utils.h --- flatpak-0.11.3/common/flatpak-utils.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-utils.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,733 +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 - */ - -#ifndef __FLATPAK_UTILS_H__ -#define __FLATPAK_UTILS_H__ - -#include - -#include "libglnx/libglnx.h" -#include -#include -#include -#include -#include "flatpak-dbus.h" -#include "flatpak-document-dbus.h" -#include -#include - -typedef enum { - FLATPAK_HOST_COMMAND_FLAGS_CLEAR_ENV = 1 << 0, -} FlatpakHostCommandFlags; - -typedef void (*FlatpakLoadUriProgress) (guint64 downloaded_bytes, - gpointer user_data); - - -#define FLATPAK_ANSI_BOLD_ON "\x1b[1m" -#define FLATPAK_ANSI_BOLD_OFF "\x1b[22m" -#define FLATPAK_ANSI_RED "\x1b[31m" -#define FLATPAK_ANSI_COLOR_RESET "\x1b[0m" - -/* https://bugzilla.gnome.org/show_bug.cgi?id=766370 */ -#if !GLIB_CHECK_VERSION(2, 49, 3) -#define FLATPAK_VARIANT_BUILDER_INITIALIZER {{0,}} -#define FLATPAK_VARIANT_DICT_INITIALIZER {{0,}} -#else -#define FLATPAK_VARIANT_BUILDER_INITIALIZER {{{0,}}} -#define FLATPAK_VARIANT_DICT_INITIALIZER {{{0,}}} -#endif - -/* https://github.com/GNOME/libglnx/pull/38 - * Note by using #define rather than wrapping via a static inline, we - * don't have to re-define attributes like G_GNUC_PRINTF. - */ -#define flatpak_fail glnx_throw - -void flatpak_debug2 (const char *format, ...) G_GNUC_PRINTF(1, 2); - -gint flatpak_strcmp0_ptr (gconstpointer a, - gconstpointer b); - -gboolean flatpak_has_path_prefix (const char *str, - const char *prefix); - -const char * flatpak_path_match_prefix (const char *pattern, - const char *path); - -gboolean flatpak_is_in_sandbox (void); - -gboolean flatpak_fancy_output (void); - -const char * flatpak_get_arch (void); -const char ** flatpak_get_arches (void); -gboolean flatpak_is_linux32_arch (const char *arch); - -const char ** flatpak_get_gl_drivers (void); -gboolean flatpak_extension_matches_reason (const char *extension_id, - const char *reason, - gboolean default_value); - -const char * flatpak_get_bwrap (void); - -char **flatpak_subpaths_merge (char **subpaths1, - char **subpaths2); - -char *flatpak_get_lang_from_locale (const char *locale); -char **flatpak_get_current_locale_langs (void); - -void flatpak_migrate_from_xdg_app (void); - -GFile *flatpak_file_new_tmp_in (GFile *dir, - const char *templatename, - GError **error); -gboolean flatpak_break_hardlink (GFile *file, GError **error); - -gboolean flatpak_write_update_checksum (GOutputStream *out, - gconstpointer data, - gsize len, - gsize *out_bytes_written, - GChecksum *checksum, - GCancellable *cancellable, - GError **error); - - -gboolean flatpak_splice_update_checksum (GOutputStream *out, - GInputStream *in, - GChecksum *checksum, - FlatpakLoadUriProgress progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); - -GBytes * flatpak_read_stream (GInputStream *in, - gboolean null_terminate, - GError **error); - -gboolean flatpak_variant_save (GFile *dest, - GVariant *variant, - GCancellable *cancellable, - GError **error); -GVariant * flatpak_gvariant_new_empty_string_dict (void); -void flatpak_variant_builder_init_from_variant (GVariantBuilder *builder, - const char *type, - GVariant *variant); -gboolean flatpak_variant_bsearch_str (GVariant *array, - const char *str, - int *out_pos); -GVariant *flatpak_repo_load_summary (OstreeRepo *repo, - GError **error); -char ** flatpak_summary_match_subrefs (GVariant *summary, - const char *collection_id, - const char *ref); -gboolean flatpak_summary_lookup_ref (GVariant *summary, - const char *collection_id, - const char *ref, - char **out_checksum, - GVariant **out_variant); - -gboolean flatpak_has_name_prefix (const char *string, - const char *name); -gboolean flatpak_is_valid_name (const char *string, - GError **error); -gboolean flatpak_is_valid_branch (const char *string, - GError **error); - -char * flatpak_make_valid_id_prefix (const char *orig_id); -gboolean flatpak_id_has_subref_suffix (const char *id); - -char **flatpak_decompose_ref (const char *ref, - GError **error); - -FlatpakKinds flatpak_kinds_from_bools (gboolean app, gboolean runtime); - -gboolean flatpak_split_partial_ref_arg (const char *partial_ref, - FlatpakKinds default_kinds, - const char *default_arch, - const char *default_branch, - FlatpakKinds *out_kinds, - char **out_id, - char **out_arch, - char **out_branch, - GError **error); -gboolean flatpak_split_partial_ref_arg_novalidate (const char *partial_ref, - FlatpakKinds default_kinds, - const char *default_arch, - const char *default_branch, - FlatpakKinds *out_kinds, - char **out_id, - char **out_arch, - char **out_branch); - -char * flatpak_compose_ref (gboolean app, - const char *name, - const char *branch, - const char *arch, - GError **error); - -char * flatpak_build_untyped_ref (const char *runtime, - const char *branch, - const char *arch); -char * flatpak_build_runtime_ref (const char *runtime, - const char *branch, - const char *arch); -char * flatpak_build_app_ref (const char *app, - const char *branch, - const char *arch); -char * flatpak_find_current_ref (const char *app_id, - GCancellable *cancellable, - GError **error); -GFile *flatpak_find_deploy_dir_for_ref (const char *ref, - FlatpakDir **dir_out, - GCancellable *cancellable, - GError **error); -GFile * flatpak_find_files_dir_for_ref (const char *ref, - GCancellable *cancellable, - GError **error); -GFile * flatpak_find_unmaintained_extension_dir_if_exists (const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable); -FlatpakDeploy * flatpak_find_deploy_for_ref (const char *ref, - GCancellable *cancellable, - GError **error); -char ** flatpak_list_deployed_refs (const char *type, - const char *name_prefix, - const char *branch, - const char *arch, - GCancellable *cancellable, - GError **error); -char ** flatpak_list_unmaintained_refs (const char *name_prefix, - const char *branch, - const char *arch, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_overlay_symlink_tree (GFile *source, - GFile *destination, - const char *symlink_prefix, - GCancellable *cancellable, - GError **error); -gboolean flatpak_remove_dangling_symlinks (GFile *dir, - GCancellable *cancellable, - GError **error); - -void flatpak_invocation_lookup_app_info (GDBusMethodInvocation *invocation, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data); - -GKeyFile *flatpak_invocation_lookup_app_info_finish (GDBusMethodInvocation *invocation, - GAsyncResult *result, - GError **error); - -void flatpak_connection_track_name_owners (GDBusConnection *connection); - -#if !GLIB_CHECK_VERSION (2, 40, 0) -static inline gboolean -g_key_file_save_to_file (GKeyFile *key_file, - const gchar *filename, - GError **error) -{ - gchar *contents; - gboolean success; - gsize length; - - contents = g_key_file_to_data (key_file, &length, NULL); - success = g_file_set_contents (filename, contents, length, error); - g_free (contents); - - return success; -} -#endif - -gboolean flatpak_g_ptr_array_contains_string (GPtrArray *array, const char *str); - -/* Returns the first string in subset that is not in strv */ -static inline const gchar * -g_strv_subset (const gchar * const *strv, - const gchar * const *subset) -{ - int i; - - for (i = 0; subset[i]; i++) - { - const char *key; - - key = subset[i]; - if (!g_strv_contains (strv, key)) - return key; - } - - return NULL; -} - -static inline void -flatpak_auto_unlock_helper (GMutex **mutex) -{ - if (*mutex) - g_mutex_unlock (*mutex); -} - -static inline GMutex * -flatpak_auto_lock_helper (GMutex *mutex) -{ - if (mutex) - g_mutex_lock (mutex); - return mutex; -} - -gboolean -flatpak_switch_symlink_and_remove (const char *symlink_path, - const char *target, - GError **error); -gint flatpak_mkstempat (int dir_fd, - gchar *tmpl, - int flags, - int mode); - -gboolean flatpak_repo_set_title (OstreeRepo *repo, - const char *title, - GError **error); -gboolean flatpak_repo_set_redirect_url (OstreeRepo *repo, - const char *redirect_url, - GError **error); -gboolean flatpak_repo_set_default_branch (OstreeRepo *repo, - const char *branch, - GError **error); -gboolean flatpak_repo_set_collection_id (OstreeRepo *repo, - const char *collection_id, - GError **error); -gboolean flatpak_repo_set_deploy_collection_id (OstreeRepo *repo, - gboolean deploy_collection_id, - GError **error); -gboolean flatpak_repo_set_gpg_keys (OstreeRepo *repo, - GBytes *bytes, - GError **error); -gboolean flatpak_repo_update (OstreeRepo *repo, - const char **gpg_key_ids, - const char *gpg_homedir, - GCancellable *cancellable, - GError **error); -gboolean flatpak_repo_collect_sizes (OstreeRepo *repo, - GFile *root, - guint64 *installed_size, - guint64 *download_size, - GCancellable *cancellable, - GError **error); -GVariant *flatpak_commit_get_extra_data_sources (GVariant *commitv, - GError **error); -GVariant *flatpak_repo_get_extra_data_sources (OstreeRepo *repo, - const char *rev, - GCancellable *cancellable, - GError **error); -void flatpak_repo_parse_extra_data_sources (GVariant *extra_data_sources, - int index, - const char **name, - guint64 *download_size, - guint64 *installed_size, - const guchar **sha256, - const char **uri); -gboolean flatpak_mtree_create_root (OstreeRepo *repo, - OstreeMutableTree *mtree, - GCancellable *cancellable, - GError **error); - -GVariant * flatpak_bundle_load (GFile *file, - char **commit, - char **ref, - char **origin, - char **runtime_repo, - char **app_metadata, - guint64 *installed_size, - GBytes **gpg_keys, - char **collection_id, - GError **error); - -gboolean flatpak_pull_from_bundle (OstreeRepo *repo, - GFile *file, - const char *remote, - const char *ref, - gboolean require_gpg_signature, - GCancellable *cancellable, - GError **error); - -typedef void (*FlatpakOciPullProgress) (guint64 total_size, guint64 pulled_size, - guint32 n_layers, guint32 pulled_layers, - gpointer data); - -char * flatpak_pull_from_oci (OstreeRepo *repo, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, - FlatpakOciManifest *manifest, - const char *remote, - const char *ref, - FlatpakOciPullProgress progress_cb, - gpointer progress_data, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, - FlatpakOciRegistry *registry, - const char *oci_repository, - const char *digest, - FlatpakOciPullProgress progress_cb, - gpointer progress_data, - GCancellable *cancellable, - GError **error); - -typedef struct -{ - char *id; - char *installed_id; - char *commit; - char *ref; - char *directory; - char *files_path; - char *subdir_suffix; - char *add_ld_path; - char **merge_dirs; - int priority; - gboolean needs_tmpfs; - gboolean is_unmaintained; -} FlatpakExtension; - -void flatpak_extension_free (FlatpakExtension *extension); - -GList *flatpak_list_extensions (GKeyFile *metakey, - const char *arch, - const char *branch); - -char * flatpak_quote_argv (const char *argv[]); -gboolean flatpak_file_arg_has_suffix (const char *arg, const char *suffix); - -gboolean flatpak_spawn (GFile *dir, - char **output, - GError **error, - const gchar *argv0, - va_list args); - -gboolean flatpak_spawnv (GFile *dir, - char **output, - GSubprocessFlags flags, - GError **error, - const gchar * const *argv); - -const char *flatpak_file_get_path_cached (GFile *file); - -GFile *flatpak_build_file_va (GFile *base, - va_list args); -GFile *flatpak_build_file (GFile *base, ...) G_GNUC_NULL_TERMINATED; - -gboolean flatpak_openat_noatime (int dfd, - const char *name, - int *ret_fd, - GCancellable *cancellable, - GError **error); - -typedef enum { - FLATPAK_CP_FLAGS_NONE = 0, - FLATPAK_CP_FLAGS_MERGE = 1<<0, - FLATPAK_CP_FLAGS_NO_CHOWN = 1<<1, - FLATPAK_CP_FLAGS_MOVE = 1<<2, -} FlatpakCpFlags; - -gboolean flatpak_cp_a (GFile *src, - GFile *dest, - FlatpakCpFlags flags, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_zero_mtime (int parent_dfd, - const char *rel_path, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_mkdir_p (GFile *dir, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_rm_rf (GFile *dir, - GCancellable *cancellable, - GError **error); - -char * flatpak_readlink (const char *path, - GError **error); -char * flatpak_resolve_link (const char *path, - GError **error); -char * flatpak_canonicalize_filename (const char *path); - -gboolean flatpak_file_rename (GFile *from, - GFile *to, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_open_in_tmpdir_at (int tmpdir_fd, - int mode, - char *tmpl, - GOutputStream **out_stream, - 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) -{ - GFile *dir = p; - - if (dir) - { - flatpak_rm_rf (dir, NULL, NULL); - g_object_unref (dir); - } -} - -typedef GFile FlatpakTempDir; -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakTempDir, flatpak_temp_dir_destroy) - - -typedef OstreeRepo FlatpakRepoTransaction; - -static inline void -flatpak_repo_transaction_cleanup (void *p) -{ - OstreeRepo *repo = p; - - if (repo) - { - g_autoptr(GError) error = NULL; - if (!ostree_repo_abort_transaction (repo, NULL, &error)) - g_warning ("Error aborting ostree transaction: %s", error->message); - } -} - -static inline FlatpakRepoTransaction * -flatpak_repo_transaction_start (OstreeRepo *repo, - GCancellable *cancellable, - GError **error) -{ - if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) - return NULL; - return (FlatpakRepoTransaction *)repo; -} -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRepoTransaction, flatpak_repo_transaction_cleanup) - -#define AUTOLOCK(name) G_GNUC_UNUSED __attribute__((cleanup (flatpak_auto_unlock_helper))) GMutex * G_PASTE (auto_unlock, __LINE__) = flatpak_auto_lock_helper (&G_LOCK_NAME (name)) - -/* OSTREE_CHECK_VERSION was added immediately after the 2017.3 release */ -#ifndef OSTREE_CHECK_VERSION -#define OSTREE_CHECK_VERSION(year, minor) (0) -#endif -/* Cleanups are always exported in 2017.4, and some git releases between 2017.3 and 2017.4. - We actually check against 2017.3 so that we work on the git releases *after* 2017.3 - which is safe, because the real OSTREE_CHECK_VERSION macro was added after 2017.3 - too. */ -#if !OSTREE_CHECK_VERSION(2017, 3) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepo, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeMutableTree, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeAsyncProgress, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeGpgVerifyResult, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoCommitModifier, ostree_repo_commit_modifier_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoDevInoCache, ostree_repo_devino_cache_unref) -#endif - -#ifndef SOUP_AUTOCLEANUPS_H -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupSession, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessage, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequest, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequestHTTP, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupURI, soup_uri_free) -#endif - -#if !JSON_CHECK_VERSION(1,1,2) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonArray, json_array_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonBuilder, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonGenerator, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonNode, json_node_free) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonObject, json_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonParser, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonPath, g_object_unref) -G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonReader, g_object_unref) -#endif - -#if !GLIB_CHECK_VERSION(2, 43, 4) -G_DEFINE_AUTOPTR_CLEANUP_FUNC(GUnixFDList, g_object_unref) -#endif - -/* This uses a weird Auto prefix to avoid conflicts with later added autogenerated autoptr support, per: - * https://git.gnome.org/browse/glib/commit/?id=1c6cd5f0a3104aa9b62c7f1d3086181f63e71b59 - */ -typedef FlatpakSessionHelper AutoFlatpakSessionHelper; -G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoFlatpakSessionHelper, g_object_unref) - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (XdpDbusDocuments, g_object_unref) - -typedef struct FlatpakXml FlatpakXml; - -struct FlatpakXml -{ - gchar *element_name; /* NULL == text */ - char **attribute_names; - char **attribute_values; - char *text; - FlatpakXml *parent; - FlatpakXml *first_child; - FlatpakXml *last_child; - FlatpakXml *next_sibling; -}; - -FlatpakXml *flatpak_xml_new (const gchar *element_name); -FlatpakXml *flatpak_xml_new_text (const gchar *text); -void flatpak_xml_add (FlatpakXml *parent, - FlatpakXml *node); -void flatpak_xml_free (FlatpakXml *node); -FlatpakXml *flatpak_xml_parse (GInputStream *in, - gboolean compressed, - GCancellable *cancellable, - GError **error); -void flatpak_xml_to_string (FlatpakXml *node, - GString *res); -FlatpakXml *flatpak_xml_unlink (FlatpakXml *node, - FlatpakXml *prev_sibling); -FlatpakXml *flatpak_xml_find (FlatpakXml *node, - const char *type, - FlatpakXml **prev_child_out); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakXml, flatpak_xml_free); - - -FlatpakXml *flatpak_appstream_xml_new (void); -gboolean flatpak_appstream_xml_migrate (FlatpakXml *source, - FlatpakXml *dest, - const char *ref, - const char *id, - GKeyFile *metadata); -GBytes *flatpak_appstream_xml_root_to_data (FlatpakXml *appstream_root, - GError **error); -gboolean flatpak_repo_generate_appstream (OstreeRepo *repo, - const char **gpg_key_ids, - const char *gpg_homedir, - guint64 timestamp, - GCancellable *cancellable, - GError **error); - -gboolean flatpak_allocate_tmpdir (int tmpdir_dfd, - const char *tmpdir_relpath, - const char *tmpdir_prefix, - char **tmpdir_name_out, - int *tmpdir_fd_out, - GLnxLockFile *file_lock_out, - gboolean *reusing_dir_out, - GCancellable *cancellable, - GError **error); - - -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, - gpointer user_data, - GCancellable *cancellable, - GError **error); -gboolean flatpak_download_http_uri (SoupSession *soup_session, - const char *uri, - FlatpakHTTPFlags flags, - GOutputStream *out, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error); - -typedef struct { - char *shell_cur; - char *cur; - char *prev; - char *line; - int point; - char **argv; - char **original_argv; - int argc; - int original_argc; -} FlatpakCompletion; - -void flatpak_completion_debug (const gchar *format, ...); - -FlatpakCompletion *flatpak_completion_new (const char *arg_line, - const char *arg_point, - const char *arg_cur); -void flatpak_complete_word (FlatpakCompletion *completion, - char *format, - ...) G_GNUC_PRINTF(2,3); -void flatpak_complete_ref (FlatpakCompletion *completion, - OstreeRepo *repo); -void flatpak_complete_partial_ref (FlatpakCompletion *completion, - FlatpakKinds kinds, - const char *only_arch, - FlatpakDir *dir, - const char *remote); -void flatpak_complete_file (FlatpakCompletion *completion, - const char *file_type); -void flatpak_complete_dir (FlatpakCompletion *completion); -void flatpak_complete_options (FlatpakCompletion *completion, - GOptionEntry *entries); -void flatpak_completion_free (FlatpakCompletion *completion); - -typedef struct { - int inited; - int n_columns; - int last_width; -} FlatpakTerminalProgress; - -void flatpak_terminal_progress_cb (const char *status, - guint progress, - gboolean estimating, - gpointer user_data); -void flatpak_terminal_progress_end (FlatpakTerminalProgress *term); - -typedef void (*FlatpakProgressCallback)(const char *status, - guint progress, - gboolean estimating, - gpointer user_data); - -OstreeAsyncProgress *flatpak_progress_new (FlatpakProgressCallback progress, - gpointer progress_data); - -void flatpak_log_dir_access (FlatpakDir *dir); - -#endif /* __FLATPAK_UTILS_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-utils-http.c flatpak-1.0.7/common/flatpak-utils-http.c --- flatpak-0.11.3/common/flatpak-utils-http.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-utils-http.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,819 @@ +/* + * Copyright © 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 "flatpak-utils-http-private.h" +#include "flatpak-oci-registry-private.h" + +#include +#include +#include "libglnx/libglnx.h" + +#include +#include + +typedef struct +{ + char *uri; + char *etag; + gint64 last_modified; + gint64 expires; +} CacheHttpData; + +typedef struct +{ + GMainLoop *loop; + GError *error; + gboolean store_compressed; + + GOutputStream *out; /*or */ + GString *content; /* or */ + GLnxTmpfile *out_tmpfile; + int out_tmpfile_parent_dfd; + + guint64 downloaded_bytes; + char buffer[16 * 1024]; + FlatpakLoadUriProgress progress; + GCancellable *cancellable; + gpointer user_data; + guint64 last_progress_time; + CacheHttpData *cache_data; +} LoadUriData; + +#define CACHE_HTTP_XATTR "user.flatpak.http" +#define CACHE_HTTP_SUFFIX ".flatpak.http" +#define CACHE_HTTP_TYPE "(sstt)" + +static void +clear_cache_http_data (CacheHttpData *data, + gboolean clear_uri) +{ + if (clear_uri) + g_clear_pointer (&data->uri, g_free); + g_clear_pointer (&data->etag, g_free); + data->last_modified = 0; + data->expires = 0; +} + +static void +free_cache_http_data (CacheHttpData *data) +{ + clear_cache_http_data (data, TRUE); + g_free (data); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (CacheHttpData, free_cache_http_data) + +static GBytes * +serialize_cache_http_data (CacheHttpData * data) +{ + g_autoptr(GVariant) cache_variant = NULL; + + cache_variant = g_variant_ref_sink (g_variant_new (CACHE_HTTP_TYPE, + data->uri, + data->etag ? data->etag : "", + data->last_modified, + data->expires)); + if (G_BYTE_ORDER != G_BIG_ENDIAN) + { + g_autoptr(GVariant) tmp_variant = cache_variant; + cache_variant = g_variant_byteswap (tmp_variant); + } + + return g_variant_get_data_as_bytes (cache_variant); +} + +static void +deserialize_cache_http_data (CacheHttpData *data, + GBytes *bytes) +{ + g_autoptr(GVariant) cache_variant = NULL; + + cache_variant = g_variant_ref_sink (g_variant_new_from_bytes (G_VARIANT_TYPE (CACHE_HTTP_TYPE), + bytes, + FALSE)); + if (G_BYTE_ORDER != G_BIG_ENDIAN) + { + g_autoptr(GVariant) tmp_variant = cache_variant; + cache_variant = g_variant_byteswap (tmp_variant); + } + + g_variant_get (cache_variant, + CACHE_HTTP_TYPE, + &data->uri, + &data->etag, + &data->last_modified, + &data->expires); +} + +static CacheHttpData * +load_cache_http_data (int dfd, + char *name, + gboolean *no_xattr, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(CacheHttpData) data = NULL; + + g_autoptr(GBytes) cache_bytes = glnx_lgetxattrat (dfd, name, + CACHE_HTTP_XATTR, + error); + if (cache_bytes == NULL) + { + if (errno == ENOTSUP) + { + g_autofree char *cache_file = NULL; + glnx_autofd int fd = -1; + + g_clear_error (error); + *no_xattr = TRUE; + + cache_file = g_strconcat (name, CACHE_HTTP_SUFFIX, NULL); + + if (!glnx_openat_rdonly (dfd, cache_file, FALSE, + &fd, error)) + return FALSE; + + cache_bytes = glnx_fd_readall_bytes (fd, cancellable, error); + if (!cache_bytes) + return NULL; + } + else if (errno == ENOENT || errno == ENODATA) + { + g_clear_error (error); + return g_new0 (CacheHttpData, 1); + } + else + { + return NULL; + } + } + + + data = g_new0 (CacheHttpData, 1); + deserialize_cache_http_data (data, cache_bytes); + return g_steal_pointer (&data); +} + +static void +set_cache_http_data_from_headers (CacheHttpData *data, + SoupMessage *msg) +{ + const char *etag = soup_message_headers_get_one (msg->response_headers, "ETag"); + const char *last_modified = soup_message_headers_get_one (msg->response_headers, "Last-Modified"); + const char *cache_control = soup_message_headers_get_list (msg->response_headers, "Cache-Control"); + const char *expires = soup_message_headers_get_list (msg->response_headers, "Expires"); + gboolean expires_computed = FALSE; + + /* The original HTTP 1/1 specification only required sending the ETag header in a 304 + * response, and implied that a cache might need to save the old Cache-Control + * values. The updated RFC 7232 from 2014 requires sending Cache-Control, ETags, and + * Expire if they would have been sent in the original 200 response, and recommends + * sending Last-Modified for requests without an etag. Since sending these headers was + * apparently normal previously, for simplicity we assume the RFC 7232 behavior and start + * from scratch for a 304 response. + */ + clear_cache_http_data (data, FALSE); + + if (etag && *etag) + { + data->etag = g_strdup (etag); + } + else if (last_modified && *last_modified) + { + SoupDate *date = soup_date_new_from_string (last_modified); + if (date) + { + data->last_modified = soup_date_to_time_t (date); + soup_date_free (date); + } + } + + if (cache_control && *cache_control) + { + g_autoptr(GHashTable) params = soup_header_parse_param_list (cache_control); + GHashTableIter iter; + gpointer key, value; + + g_hash_table_iter_init (&iter, params); + while (g_hash_table_iter_next (&iter, &key, &value)) + { + if (g_strcmp0 (key, "max-age") == 0) + { + char *end; + + char *max_age = value; + int max_age_sec = g_ascii_strtoll (max_age, &end, 10); + if (*max_age != '\0' && *end == '\0') + { + GTimeVal now; + g_get_current_time (&now); + data->expires = now.tv_sec + max_age_sec; + expires_computed = TRUE; + } + } + else if (g_strcmp0 (key, "no-cache") == 0) + { + data->expires = 0; + expires_computed = TRUE; + } + } + } + + if (!expires_computed && expires && *expires) + { + SoupDate *date = soup_date_new_from_string (expires); + if (date) + { + data->expires = soup_date_to_time_t (date); + soup_date_free (date); + expires_computed = TRUE; + } + } + + if (!expires_computed) + { + /* If nothing implies an expires time, use 30 minutes. Browsers use + * 0.1 * (Date - Last-Modified), but it's clearly appropriate here, and + * better if server's send a value. + */ + GTimeVal now; + g_get_current_time (&now); + data->expires = now.tv_sec + 1800; + } +} + +static gboolean +save_cache_http_data_xattr (int fd, + GBytes *bytes, + GError **error) +{ + if (TEMP_FAILURE_RETRY (fsetxattr (fd, (char *) CACHE_HTTP_XATTR, + g_bytes_get_data (bytes, NULL), + g_bytes_get_size (bytes), + 0)) < 0) + return glnx_throw_errno_prefix (error, "fsetxattr"); + + return TRUE; +} + +static gboolean +save_cache_http_data_fallback (int fd, + GBytes *bytes, + GError **error) +{ + if (glnx_loop_write (fd, + g_bytes_get_data (bytes, NULL), + g_bytes_get_size (bytes)) < 0) + return glnx_throw_errno_prefix (error, "write"); + + return TRUE; +} + +static gboolean +save_cache_http_data_to_file (int dfd, + char *name, + GBytes *bytes, + gboolean no_xattr, + GCancellable *cancellable, + GError **error) +{ + glnx_autofd int fd = -1; + g_autofree char *fallback_name = NULL; + + if (!no_xattr) + { + if (!glnx_openat_rdonly (dfd, name, FALSE, + &fd, error)) + return FALSE; + + if (save_cache_http_data_xattr (fd, bytes, error)) + return TRUE; + + if (errno == ENOTSUP) + g_clear_error (error); + else + return FALSE; + } + + fallback_name = g_strconcat (name, CACHE_HTTP_SUFFIX, NULL); + if (!glnx_file_replace_contents_at (dfd, fallback_name, + g_bytes_get_data (bytes, NULL), + g_bytes_get_size (bytes), + 0, + cancellable, + error)) + return FALSE; + + return TRUE; +} + +static void +stream_closed (GObject *source, GAsyncResult *res, gpointer user_data) +{ + LoadUriData *data = user_data; + GInputStream *stream = G_INPUT_STREAM (source); + + g_autoptr(GError) error = NULL; + + if (!g_input_stream_close_finish (stream, res, &error)) + g_warning ("Error closing http stream: %s", error->message); + + if (data->out_tmpfile) + { + if (!g_output_stream_close (data->out, data->cancellable, &error)) + { + if (data->error == NULL) + g_propagate_error (&data->error, g_steal_pointer (&error)); + } + + g_clear_pointer (&data->out, g_object_unref); + } + + g_main_loop_quit (data->loop); +} + +static void +load_uri_read_cb (GObject *source, GAsyncResult *res, gpointer user_data) +{ + LoadUriData *data = user_data; + GInputStream *stream = G_INPUT_STREAM (source); + gsize nread; + + nread = g_input_stream_read_finish (stream, res, &data->error); + if (nread == -1 || nread == 0) + { + if (data->progress) + data->progress (data->downloaded_bytes, data->user_data); + g_input_stream_close_async (stream, + G_PRIORITY_DEFAULT, NULL, + stream_closed, data); + + return; + } + + if (data->out != NULL) + { + gsize n_written; + + if (!g_output_stream_write_all (data->out, data->buffer, nread, &n_written, + NULL, &data->error)) + { + data->downloaded_bytes += n_written; + g_input_stream_close_async (stream, + G_PRIORITY_DEFAULT, NULL, + stream_closed, data); + return; + } + + data->downloaded_bytes += n_written; + } + else + { + data->downloaded_bytes += nread; + g_string_append_len (data->content, data->buffer, nread); + } + + if (g_get_monotonic_time () - data->last_progress_time > 1 * G_USEC_PER_SEC) + { + if (data->progress) + data->progress (data->downloaded_bytes, data->user_data); + data->last_progress_time = g_get_monotonic_time (); + } + + g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer), + G_PRIORITY_DEFAULT, data->cancellable, + load_uri_read_cb, data); +} + +static void +load_uri_callback (GObject *source_object, + GAsyncResult *res, + gpointer user_data) +{ + SoupRequestHTTP *request = SOUP_REQUEST_HTTP (source_object); + + g_autoptr(GInputStream) in = NULL; + LoadUriData *data = user_data; + + in = soup_request_send_finish (SOUP_REQUEST (request), res, &data->error); + if (in == NULL) + { + g_main_loop_quit (data->loop); + return; + } + + g_autoptr(SoupMessage) msg = soup_request_http_get_message ((SoupRequestHTTP *) request); + if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) + { + int code; + GQuark domain = G_IO_ERROR; + + switch (msg->status_code) + { + case 304: + if (data->cache_data) + set_cache_http_data_from_headers (data->cache_data, msg); + + domain = FLATPAK_OCI_ERROR; + code = FLATPAK_OCI_ERROR_NOT_CHANGED; + break; + + case 404: + case 410: + code = G_IO_ERROR_NOT_FOUND; + break; + + default: + code = G_IO_ERROR_FAILED; + } + + data->error = g_error_new (domain, code, + "Server returned status %u: %s", + msg->status_code, + soup_status_get_phrase (msg->status_code)); + g_main_loop_quit (data->loop); + return; + } + + if (data->cache_data) + set_cache_http_data_from_headers (data->cache_data, msg); + + if (data->out_tmpfile) + { + g_autoptr(GOutputStream) out = NULL; + + if (!glnx_open_tmpfile_linkable_at (data->out_tmpfile_parent_dfd, ".", + O_WRONLY, data->out_tmpfile, + &data->error)) + return; + + g_assert (data->out == NULL); + + out = g_unix_output_stream_new (data->out_tmpfile->fd, FALSE); + if (data->store_compressed && + g_strcmp0 (soup_message_headers_get_one (msg->response_headers, "Content-Encoding"), "gzip") != 0) + { + g_autoptr(GZlibCompressor) compressor = g_zlib_compressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP, -1); + data->out = g_converter_output_stream_new (out, G_CONVERTER (compressor)); + } + else + { + data->out = g_steal_pointer (&out); + } + } + + g_input_stream_read_async (in, data->buffer, sizeof (data->buffer), + G_PRIORITY_DEFAULT, data->cancellable, + load_uri_read_cb, data); +} + +SoupSession * +flatpak_create_soup_session (const char *user_agent) +{ + SoupSession *soup_session; + const char *http_proxy; + + soup_session = soup_session_new_with_options (SOUP_SESSION_USER_AGENT, user_agent, + SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE, + SOUP_SESSION_USE_THREAD_CONTEXT, TRUE, + SOUP_SESSION_TIMEOUT, 60, + SOUP_SESSION_IDLE_TIMEOUT, 60, + NULL); + soup_session_remove_feature_by_type (soup_session, SOUP_TYPE_CONTENT_DECODER); + http_proxy = g_getenv ("http_proxy"); + if (http_proxy) + { + g_autoptr(SoupURI) proxy_uri = soup_uri_new (http_proxy); + if (!proxy_uri) + g_warning ("Invalid proxy URI '%s'", http_proxy); + else + g_object_set (soup_session, SOUP_SESSION_PROXY_URI, proxy_uri, NULL); + } + + return soup_session; +} + +GBytes * +flatpak_load_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error) +{ + GBytes *bytes = NULL; + + g_autoptr(GMainContext) context = NULL; + g_autoptr(SoupRequestHTTP) request = NULL; + g_autoptr(GMainLoop) loop = NULL; + g_autoptr(GString) content = g_string_new (""); + LoadUriData data = { NULL }; + SoupMessage *m; + + g_debug ("Loading %s using libsoup", uri); + + context = g_main_context_ref_thread_default (); + + loop = g_main_loop_new (context, TRUE); + data.loop = loop; + data.content = content; + data.progress = progress; + data.cancellable = cancellable; + data.user_data = user_data; + data.last_progress_time = g_get_monotonic_time (); + + request = soup_session_request_http (soup_session, "GET", + uri, error); + if (request == NULL) + return NULL; + + 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); + + g_main_loop_run (loop); + + if (data.error) + { + g_propagate_error (error, data.error); + return NULL; + } + + bytes = g_string_free_to_bytes (g_steal_pointer (&content)); + g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); + + return bytes; +} + +gboolean +flatpak_download_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + GOutputStream *out, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(SoupRequestHTTP) request = NULL; + g_autoptr(GMainLoop) loop = NULL; + g_autoptr(GMainContext) context = NULL; + LoadUriData data = { NULL }; + SoupMessage *m; + + g_debug ("Loading %s using libsoup", uri); + + context = g_main_context_ref_thread_default (); + + loop = g_main_loop_new (context, TRUE); + data.loop = loop; + data.out = out; + data.progress = progress; + data.cancellable = cancellable; + data.user_data = user_data; + data.last_progress_time = g_get_monotonic_time (); + + request = soup_session_request_http (soup_session, "GET", + uri, error); + 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); + + g_main_loop_run (loop); + + if (data.error) + { + g_propagate_error (error, data.error); + return FALSE; + } + + g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); + + return TRUE; +} + +static gboolean +sync_and_rename_tmpfile (GLnxTmpfile *tmpfile, + const char *dest_name, + GError **error) +{ + /* Filesystem paranoia: If we end up with the new metadata but not + * the new data, then because the cache headers are in the metadata, + * we'll never re-download. (If we just want to avoid losing both + * the old and new data, skipping fdatasync when the destination is + * missing works, but it won't here.) + * + * This will cause a bunch of fdatasyncs when downloading the icons for + * a large appstream the first time, would mostly be a problem with a + * very fast internet connection and a slow spinning drive. + * Possible solution: update in new directory without fdatasync + * (copying in any existing cached icons to revalidate), syncfs(), then + * atomic symlink. + */ + if (fdatasync (tmpfile->fd) != 0) + return glnx_throw_errno_prefix (error, "fdatasync"); + + if (!glnx_link_tmpfile_at (tmpfile, + GLNX_LINK_TMPFILE_REPLACE, + tmpfile->src_dfd, dest_name, error)) + return FALSE; + + return TRUE; +} + +gboolean +flatpak_cache_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + int dest_dfd, + const char *dest_subpath, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error) +{ + g_autoptr(SoupRequestHTTP) request = NULL; + g_autoptr(GMainLoop) loop = NULL; + g_autoptr(GMainContext) context = NULL; + g_autoptr(CacheHttpData) cache_data = NULL; + g_autofree char *parent_path = g_path_get_dirname (dest_subpath); + g_autofree char *name = g_path_get_basename (dest_subpath); + glnx_autofd int dfd = -1; + gboolean no_xattr = FALSE; + LoadUriData data = { NULL }; + g_auto(GLnxTmpfile) out_tmpfile = { 0 }; + g_auto(GLnxTmpfile) cache_tmpfile = { 0 }; + g_autoptr(GBytes) cache_bytes = NULL; + SoupMessage *m; + + if (!glnx_opendirat (dest_dfd, parent_path, TRUE, &dfd, error)) + return FALSE; + + cache_data = load_cache_http_data (dfd, name, &no_xattr, + cancellable, error); + if (!cache_data) + return FALSE; + + if (g_strcmp0 (cache_data->uri, uri) != 0) + clear_cache_http_data (cache_data, TRUE); + + if (cache_data->uri) + { + GTimeVal now; + + g_get_current_time (&now); + if (cache_data->expires > now.tv_sec) + { + if (error) + *error = g_error_new (FLATPAK_OCI_ERROR, + FLATPAK_OCI_ERROR_NOT_CHANGED, + "Reusing cached value"); + return FALSE; + } + } + + if (cache_data->uri == NULL) + cache_data->uri = g_strdup (uri); + + /* Must revalidate */ + + g_debug ("Loading %s using libsoup", uri); + + context = g_main_context_ref_thread_default (); + + loop = g_main_loop_new (context, TRUE); + data.loop = loop; + data.cache_data = cache_data; + data.out_tmpfile = &out_tmpfile; + data.out_tmpfile_parent_dfd = dfd; + data.progress = progress; + data.cancellable = cancellable; + data.user_data = user_data; + data.last_progress_time = g_get_monotonic_time (); + + request = soup_session_request_http (soup_session, "GET", + uri, error); + if (request == NULL) + return FALSE; + + m = soup_request_http_get_message (request); + + if (cache_data->etag && cache_data->etag[0]) + soup_message_headers_replace (m->request_headers, "If-None-Match", cache_data->etag); + else if (cache_data->last_modified != 0) + { + SoupDate *date = soup_date_new_from_time_t (cache_data->last_modified); + g_autofree char *date_str = soup_date_to_string (date, SOUP_DATE_HTTP); + soup_message_headers_replace (m->request_headers, "If-Modified-Since", date_str); + soup_date_free (date); + } + + if (flags & FLATPAK_HTTP_FLAGS_ACCEPT_OCI) + soup_message_headers_replace (m->request_headers, "Accept", + "application/vnd.oci.image.manifest.v1+json"); + + if (flags & FLATPAK_HTTP_FLAGS_STORE_COMPRESSED) + { + soup_message_headers_replace (m->request_headers, "Accept-Encoding", + "gzip"); + data.store_compressed = TRUE; + } + + soup_request_send_async (SOUP_REQUEST (request), + cancellable, + load_uri_callback, &data); + + g_main_loop_run (loop); + + if (data.error) + { + if (data.error->domain == FLATPAK_OCI_ERROR && + data.error->code == FLATPAK_OCI_ERROR_NOT_CHANGED) + { + GError *tmp_error = NULL; + + cache_bytes = serialize_cache_http_data (cache_data); + + if (!save_cache_http_data_to_file (dfd, name, cache_bytes, no_xattr, + cancellable, &tmp_error)) + { + g_clear_error (&data.error); + g_propagate_error (error, tmp_error); + + return FALSE; + } + } + + g_propagate_error (error, data.error); + return FALSE; + } + + cache_bytes = serialize_cache_http_data (cache_data); + if (!no_xattr) + { + if (!save_cache_http_data_xattr (out_tmpfile.fd, cache_bytes, error)) + { + if (errno != ENOTSUP) + return FALSE; + + g_clear_error (error); + no_xattr = TRUE; + } + } + + if (no_xattr) + { + if (!glnx_open_tmpfile_linkable_at (dfd, ".", O_WRONLY, &cache_tmpfile, error)) + return FALSE; + + if (!save_cache_http_data_fallback (cache_tmpfile.fd, cache_bytes, error)) + return FALSE; + } + + if (!sync_and_rename_tmpfile (&out_tmpfile, name, error)) + return FALSE; + + if (no_xattr) + { + g_autofree char *fallback_name = g_strconcat (name, CACHE_HTTP_SUFFIX, NULL); + + if (!sync_and_rename_tmpfile (&cache_tmpfile, fallback_name, error)) + return FALSE; + } + + g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); + + return TRUE; +} diff -Nru flatpak-0.11.3/common/flatpak-utils-http-private.h flatpak-1.0.7/common/flatpak-utils-http-private.h --- flatpak-0.11.3/common/flatpak-utils-http-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-utils-http-private.h 2018-08-09 13:38:21.000000000 +0000 @@ -0,0 +1,64 @@ +/* + * 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 + */ + +#ifndef __FLATPAK_UTILS_HTTP_H__ +#define __FLATPAK_UTILS_HTTP_H__ + +#include + +#include + +SoupSession * flatpak_create_soup_session (const char *user_agent); + +typedef enum { + FLATPAK_HTTP_FLAGS_NONE = 0, + FLATPAK_HTTP_FLAGS_ACCEPT_OCI = 1 << 0, + FLATPAK_HTTP_FLAGS_STORE_COMPRESSED = 2 << 0, +} FlatpakHTTPFlags; + +typedef void (*FlatpakLoadUriProgress) (guint64 downloaded_bytes, + gpointer user_data); + +GBytes * flatpak_load_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error); +gboolean flatpak_download_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + GOutputStream *out, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error); +gboolean flatpak_cache_http_uri (SoupSession *soup_session, + const char *uri, + FlatpakHTTPFlags flags, + int dest_dfd, + const char *dest_subpath, + FlatpakLoadUriProgress progress, + gpointer user_data, + GCancellable *cancellable, + GError **error); + +#endif /* __FLATPAK_UTILS_HTTP_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-utils-private.h flatpak-1.0.7/common/flatpak-utils-private.h --- flatpak-0.11.3/common/flatpak-utils-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-utils-private.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,719 @@ +/* + * 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 + */ + +#ifndef __FLATPAK_UTILS_H__ +#define __FLATPAK_UTILS_H__ + +#include + +#include "libglnx/libglnx.h" +#include +#include +#include +#include "flatpak-dbus-generated.h" +#include "flatpak-document-dbus-generated.h" +#include "flatpak-context-private.h" +#include "flatpak-error.h" +#include "flatpak-utils-http-private.h" +#include +#include + +#define AUTOFS_SUPER_MAGIC 0x0187 + +typedef enum { + FLATPAK_HOST_COMMAND_FLAGS_CLEAR_ENV = 1 << 0, +} FlatpakHostCommandFlags; + + +#define FLATPAK_ANSI_BOLD_ON "\x1b[1m" +#define FLATPAK_ANSI_BOLD_OFF "\x1b[22m" +#define FLATPAK_ANSI_RED "\x1b[31m" +#define FLATPAK_ANSI_COLOR_RESET "\x1b[0m" + +/* https://bugzilla.gnome.org/show_bug.cgi?id=766370 */ +#if !GLIB_CHECK_VERSION (2, 49, 3) +#define FLATPAK_VARIANT_BUILDER_INITIALIZER {{0, }} +#define FLATPAK_VARIANT_DICT_INITIALIZER {{0, }} +#else +#define FLATPAK_VARIANT_BUILDER_INITIALIZER {{{0, }}} +#define FLATPAK_VARIANT_DICT_INITIALIZER {{{0, }}} +#endif + +/* https://github.com/GNOME/libglnx/pull/38 + * Note by using #define rather than wrapping via a static inline, we + * don't have to re-define attributes like G_GNUC_PRINTF. + */ +#define flatpak_fail glnx_throw + +gboolean flatpak_fail_error (GError **error, + FlatpakError code, + const char *fmt, ...) G_GNUC_PRINTF (3,4); + +void flatpak_debug2 (const char *format, + ...) G_GNUC_PRINTF (1, 2); + +gint flatpak_strcmp0_ptr (gconstpointer a, + gconstpointer b); + +gboolean flatpak_has_path_prefix (const char *str, + const char *prefix); + +const char * flatpak_path_match_prefix (const char *pattern, + const char *path); + +gboolean flatpak_fancy_output (void); + +const char * flatpak_get_arch (void); +const char ** flatpak_get_arches (void); +gboolean flatpak_is_linux32_arch (const char *arch); + +const char ** flatpak_get_gl_drivers (void); +gboolean flatpak_extension_matches_reason (const char *extension_id, + const char *reason, + gboolean default_value); + +const char * flatpak_get_bwrap (void); + +char *flatpak_get_timezone (void); + +char **flatpak_subpaths_merge (char **subpaths1, + char **subpaths2); + +char *flatpak_get_lang_from_locale (const char *locale); +char **flatpak_get_current_locale_langs (void); + +void flatpak_migrate_from_xdg_app (void); + +GFile *flatpak_file_new_tmp_in (GFile *dir, + const char *templatename, + GError **error); + +gboolean flatpak_write_update_checksum (GOutputStream *out, + gconstpointer data, + gsize len, + gsize *out_bytes_written, + GChecksum *checksum, + GCancellable *cancellable, + GError **error); + + +gboolean flatpak_splice_update_checksum (GOutputStream *out, + GInputStream *in, + GChecksum *checksum, + FlatpakLoadUriProgress progress, + gpointer progress_data, + GCancellable *cancellable, + GError **error); + +GBytes * flatpak_read_stream (GInputStream *in, + gboolean null_terminate, + GError **error); + +gboolean flatpak_variant_save (GFile *dest, + GVariant *variant, + GCancellable *cancellable, + GError **error); +GVariant * flatpak_gvariant_new_empty_string_dict (void); +void flatpak_variant_builder_init_from_variant (GVariantBuilder *builder, + const char *type, + GVariant *variant); +gboolean flatpak_variant_bsearch_str (GVariant *array, + const char *str, + int *out_pos); +GVariant *flatpak_repo_load_summary (OstreeRepo *repo, + GError **error); +char ** flatpak_summary_match_subrefs (GVariant *summary, + const char *collection_id, + const char *ref); +gboolean flatpak_summary_lookup_ref (GVariant *summary, + const char *collection_id, + const char *ref, + char **out_checksum, + GVariant **out_variant); + +gboolean flatpak_name_matches_one_wildcard_prefix (const char *string, + const char * const *maybe_wildcard_prefixes, + gboolean require_exact_match); + +gboolean flatpak_get_allowed_exports (const char *source_path, + const char *app_id, + FlatpakContext *context, + char ***allowed_extensions_out, + char ***allowed_prefixes_out, + gboolean *require_exact_match_out); + +gboolean flatpak_is_valid_name (const char *string, + GError **error); +gboolean flatpak_is_valid_branch (const char *string, + GError **error); + +char * flatpak_make_valid_id_prefix (const char *orig_id); +gboolean flatpak_id_has_subref_suffix (const char *id); + +char **flatpak_decompose_ref (const char *ref, + GError **error); + +FlatpakKinds flatpak_kinds_from_bools (gboolean app, + gboolean runtime); + +gboolean flatpak_split_partial_ref_arg (const char *partial_ref, + FlatpakKinds default_kinds, + const char *default_arch, + const char *default_branch, + FlatpakKinds *out_kinds, + char **out_id, + char **out_arch, + char **out_branch, + GError **error); +gboolean flatpak_split_partial_ref_arg_novalidate (const char *partial_ref, + FlatpakKinds default_kinds, + const char *default_arch, + const char *default_branch, + FlatpakKinds *out_kinds, + char **out_id, + char **out_arch, + char **out_branch); + +char * flatpak_compose_ref (gboolean app, + const char *name, + const char *branch, + const char *arch, + GError **error); + +char * flatpak_build_untyped_ref (const char *runtime, + const char *branch, + const char *arch); +char * flatpak_build_runtime_ref (const char *runtime, + const char *branch, + const char *arch); +char * flatpak_build_app_ref (const char *app, + const char *branch, + const char *arch); +char * flatpak_find_current_ref (const char *app_id, + GCancellable *cancellable, + GError **error); +GFile *flatpak_find_deploy_dir_for_ref (const char *ref, + FlatpakDir **dir_out, + GCancellable *cancellable, + GError **error); +GFile * flatpak_find_files_dir_for_ref (const char *ref, + GCancellable *cancellable, + GError **error); +GFile * flatpak_find_unmaintained_extension_dir_if_exists (const char *name, + const char *arch, + const char *branch, + GCancellable *cancellable); +FlatpakDeploy * flatpak_find_deploy_for_ref_in (GPtrArray *dirs, + const char *ref, + const char *commit, + GCancellable *cancellable, + GError **error); +FlatpakDeploy * flatpak_find_deploy_for_ref (const char *ref, + const char *commit, + GCancellable *cancellable, + GError **error); +char ** flatpak_list_deployed_refs (const char *type, + const char *name_prefix, + const char *branch, + const char *arch, + GCancellable *cancellable, + GError **error); +char ** flatpak_list_unmaintained_refs (const char *name_prefix, + const char *branch, + const char *arch, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_remove_dangling_symlinks (GFile *dir, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_utils_ascii_string_to_unsigned (const gchar *str, + guint base, + guint64 min, + guint64 max, + guint64 *out_num, + GError **error); + + +#if !GLIB_CHECK_VERSION (2, 40, 0) +static inline gboolean +g_key_file_save_to_file (GKeyFile *key_file, + const gchar *filename, + GError **error) +{ + gchar *contents; + gboolean success; + gsize length; + + contents = g_key_file_to_data (key_file, &length, NULL); + success = g_file_set_contents (filename, contents, length, error); + g_free (contents); + + return success; +} +#endif + +#if !GLIB_CHECK_VERSION (2, 50, 0) +static inline gboolean +g_key_file_load_from_bytes (GKeyFile *key_file, + GBytes *bytes, + GKeyFileFlags flags, + GError **error) +{ + const guchar *data; + gsize size; + + data = g_bytes_get_data (bytes, &size); + return g_key_file_load_from_data (key_file, (const gchar *) data, size, flags, error); +} +#endif + +gboolean flatpak_g_ptr_array_contains_string (GPtrArray *array, + const char *str); + +/* Returns the first string in subset that is not in strv */ +static inline const gchar * +g_strv_subset (const gchar * const *strv, + const gchar * const *subset) +{ + int i; + + for (i = 0; subset[i]; i++) + { + const char *key; + + key = subset[i]; + if (!g_strv_contains (strv, key)) + return key; + } + + return NULL; +} + +static inline void +flatpak_auto_unlock_helper (GMutex **mutex) +{ + if (*mutex) + g_mutex_unlock (*mutex); +} + +static inline GMutex * +flatpak_auto_lock_helper (GMutex *mutex) +{ + if (mutex) + g_mutex_lock (mutex); + return mutex; +} + +gboolean flatpak_switch_symlink_and_remove (const char *symlink_path, + const char *target, + GError **error); +gint flatpak_mkstempat (int dir_fd, + gchar *tmpl, + int flags, + int mode); + +gboolean flatpak_repo_set_title (OstreeRepo *repo, + const char *title, + GError **error); +gboolean flatpak_repo_set_redirect_url (OstreeRepo *repo, + const char *redirect_url, + GError **error); +gboolean flatpak_repo_set_default_branch (OstreeRepo *repo, + const char *branch, + GError **error); +gboolean flatpak_repo_set_collection_id (OstreeRepo *repo, + const char *collection_id, + GError **error); +gboolean flatpak_repo_set_deploy_collection_id (OstreeRepo *repo, + gboolean deploy_collection_id, + GError **error); +gboolean flatpak_repo_set_gpg_keys (OstreeRepo *repo, + GBytes *bytes, + GError **error); +gboolean flatpak_repo_update (OstreeRepo *repo, + const char **gpg_key_ids, + const char *gpg_homedir, + GCancellable *cancellable, + GError **error); +gboolean flatpak_repo_collect_sizes (OstreeRepo *repo, + GFile *root, + guint64 *installed_size, + guint64 *download_size, + GCancellable *cancellable, + GError **error); +GVariant *flatpak_commit_get_extra_data_sources (GVariant *commitv, + GError **error); +GVariant *flatpak_repo_get_extra_data_sources (OstreeRepo *repo, + const char *rev, + GCancellable *cancellable, + GError **error); +void flatpak_repo_parse_extra_data_sources (GVariant *extra_data_sources, + int index, + const char **name, + guint64 *download_size, + guint64 *installed_size, + const guchar **sha256, + const char **uri); +gboolean flatpak_mtree_create_root (OstreeRepo *repo, + OstreeMutableTree *mtree, + GCancellable *cancellable, + GError **error); + +GVariant * flatpak_bundle_load (GFile *file, + char **commit, + char **ref, + char **origin, + char **runtime_repo, + char **app_metadata, + guint64 *installed_size, + GBytes **gpg_keys, + char **collection_id, + GError **error); + +gboolean flatpak_pull_from_bundle (OstreeRepo *repo, + GFile *file, + const char *remote, + const char *ref, + gboolean require_gpg_signature, + GCancellable *cancellable, + GError **error); + +typedef void (*FlatpakOciPullProgress) (guint64 total_size, + guint64 pulled_size, + guint32 n_layers, + guint32 pulled_layers, + gpointer data); + +char * flatpak_pull_from_oci (OstreeRepo *repo, + FlatpakOciRegistry *registry, + const char *oci_repository, + const char *digest, + FlatpakOciManifest *manifest, + const char *remote, + const char *ref, + FlatpakOciPullProgress progress_cb, + gpointer progress_data, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_mirror_image_from_oci (FlatpakOciRegistry *dst_registry, + FlatpakOciRegistry *registry, + const char *oci_repository, + const char *digest, + FlatpakOciPullProgress progress_cb, + gpointer progress_data, + GCancellable *cancellable, + GError **error); + +typedef struct +{ + char *id; + char *installed_id; + char *commit; + char *ref; + char *directory; + char *files_path; + char *subdir_suffix; + char *add_ld_path; + char **merge_dirs; + int priority; + gboolean needs_tmpfs; + gboolean is_unmaintained; +} FlatpakExtension; + +void flatpak_extension_free (FlatpakExtension *extension); + +void flatpak_parse_extension_with_tag (const char *extension, + char **name, + char **tag); + +GList *flatpak_list_extensions (GKeyFile *metakey, + const char *arch, + const char *branch); + +char * flatpak_quote_argv (const char *argv[], + gssize len); +gboolean flatpak_file_arg_has_suffix (const char *arg, + const char *suffix); + +const char *flatpak_file_get_path_cached (GFile *file); + +GFile *flatpak_build_file_va (GFile *base, + va_list args); +GFile *flatpak_build_file (GFile *base, + ...) G_GNUC_NULL_TERMINATED; + +gboolean flatpak_openat_noatime (int dfd, + const char *name, + int *ret_fd, + GCancellable *cancellable, + GError **error); + +typedef enum { + FLATPAK_CP_FLAGS_NONE = 0, + FLATPAK_CP_FLAGS_MERGE = 1 << 0, + FLATPAK_CP_FLAGS_NO_CHOWN = 1 << 1, + FLATPAK_CP_FLAGS_MOVE = 1 << 2, +} FlatpakCpFlags; + +gboolean flatpak_cp_a (GFile *src, + GFile *dest, + FlatpakCpFlags flags, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_zero_mtime (int parent_dfd, + const char *rel_path, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_mkdir_p (GFile *dir, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_rm_rf (GFile *dir, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_canonicalize_permissions (int parent_dfd, + const char *rel_path, + GError **error); + +char * flatpak_readlink (const char *path, + GError **error); +char * flatpak_resolve_link (const char *path, + GError **error); +char * flatpak_canonicalize_filename (const char *path); + +gboolean flatpak_file_rename (GFile *from, + GFile *to, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_open_in_tmpdir_at (int tmpdir_fd, + int mode, + char *tmpl, + GOutputStream **out_stream, + 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) +{ + GFile *dir = p; + + if (dir) + { + flatpak_rm_rf (dir, NULL, NULL); + g_object_unref (dir); + } +} + +typedef GFile FlatpakTempDir; +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakTempDir, flatpak_temp_dir_destroy) + +typedef GMainContext GMainContextPopDefault; +static inline void +flatpak_main_context_pop_default_destroy (void *p) +{ + GMainContext *main_context = p; + + if (main_context) + g_main_context_pop_thread_default (main_context); +} + +static inline GMainContextPopDefault * +flatpak_main_context_new_default (void) +{ + GMainContext *main_context = g_main_context_new (); + + g_main_context_push_thread_default (main_context); + return main_context; +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (GMainContextPopDefault, flatpak_main_context_pop_default_destroy) + +typedef OstreeRepo FlatpakRepoTransaction; + +static inline void +flatpak_repo_transaction_cleanup (void *p) +{ + OstreeRepo *repo = p; + + if (repo) + { + g_autoptr(GError) error = NULL; + if (!ostree_repo_abort_transaction (repo, NULL, &error)) + g_warning ("Error aborting ostree transaction: %s", error->message); + } +} + +static inline FlatpakRepoTransaction * +flatpak_repo_transaction_start (OstreeRepo *repo, + GCancellable *cancellable, + GError **error) +{ + if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) + return NULL; + return (FlatpakRepoTransaction *) repo; +} +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRepoTransaction, flatpak_repo_transaction_cleanup) + +#define AUTOLOCK(name) G_GNUC_UNUSED __attribute__((cleanup (flatpak_auto_unlock_helper))) GMutex * G_PASTE (auto_unlock, __LINE__) = flatpak_auto_lock_helper (&G_LOCK_NAME (name)) + +/* OSTREE_CHECK_VERSION was added immediately after the 2017.3 release */ +#ifndef OSTREE_CHECK_VERSION +#define OSTREE_CHECK_VERSION(year, minor) (0) +#endif +/* Cleanups are always exported in 2017.4, and some git releases between 2017.3 and 2017.4. + We actually check against 2017.3 so that we work on the git releases *after* 2017.3 + which is safe, because the real OSTREE_CHECK_VERSION macro was added after 2017.3 + too. */ +#if !OSTREE_CHECK_VERSION (2017, 3) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepo, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeMutableTree, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeAsyncProgress, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeGpgVerifyResult, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoCommitModifier, ostree_repo_commit_modifier_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRepoDevInoCache, ostree_repo_devino_cache_unref) +#endif + +#if !defined(SOUP_AUTOCLEANUPS_H) && !defined(__SOUP_AUTOCLEANUPS_H__) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupSession, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessage, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequest, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequestHTTP, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupURI, soup_uri_free) +#endif + +#if !JSON_CHECK_VERSION (1, 1, 2) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonArray, json_array_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonBuilder, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonGenerator, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonNode, json_node_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonObject, json_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonParser, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonPath, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (JsonReader, g_object_unref) +#endif + +#if !GLIB_CHECK_VERSION (2, 43, 4) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (GUnixFDList, g_object_unref) +#endif + +/* This uses a weird Auto prefix to avoid conflicts with later added autogenerated autoptr support, per: + * https://git.gnome.org/browse/glib/commit/?id=1c6cd5f0a3104aa9b62c7f1d3086181f63e71b59 + */ +typedef FlatpakSessionHelper AutoFlatpakSessionHelper; +G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoFlatpakSessionHelper, g_object_unref) + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (XdpDbusDocuments, g_object_unref) + +typedef struct FlatpakXml FlatpakXml; + +struct FlatpakXml +{ + gchar *element_name; /* NULL == text */ + char **attribute_names; + char **attribute_values; + char *text; + FlatpakXml *parent; + FlatpakXml *first_child; + FlatpakXml *last_child; + FlatpakXml *next_sibling; +}; + +FlatpakXml *flatpak_xml_new (const gchar *element_name); +FlatpakXml *flatpak_xml_new_text (const gchar *text); +void flatpak_xml_add (FlatpakXml *parent, + FlatpakXml *node); +void flatpak_xml_free (FlatpakXml *node); +FlatpakXml *flatpak_xml_parse (GInputStream *in, + gboolean compressed, + GCancellable *cancellable, + GError **error); +void flatpak_xml_to_string (FlatpakXml *node, + GString *res); +FlatpakXml *flatpak_xml_unlink (FlatpakXml *node, + FlatpakXml *prev_sibling); +FlatpakXml *flatpak_xml_find (FlatpakXml *node, + const char *type, + FlatpakXml **prev_child_out); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakXml, flatpak_xml_free); + +FlatpakXml *flatpak_appstream_xml_new (void); +gboolean flatpak_appstream_xml_migrate (FlatpakXml *source, + FlatpakXml *dest, + const char *ref, + const char *id, + GKeyFile *metadata); +gboolean flatpak_appstream_xml_root_to_data (FlatpakXml *appstream_root, + GBytes **uncompressed, + GBytes **compressed, + GError **error); +gboolean flatpak_repo_generate_appstream (OstreeRepo *repo, + const char **gpg_key_ids, + const char *gpg_homedir, + guint64 timestamp, + GCancellable *cancellable, + GError **error); + +gboolean flatpak_allocate_tmpdir (int tmpdir_dfd, + const char *tmpdir_relpath, + const char *tmpdir_prefix, + char **tmpdir_name_out, + int *tmpdir_fd_out, + GLnxLockFile *file_lock_out, + gboolean *reusing_dir_out, + GCancellable *cancellable, + GError **error); + + +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); + +typedef void (*FlatpakProgressCallback)(const char *status, + guint progress, + gboolean estimating, + gpointer user_data); + +OstreeAsyncProgress *flatpak_progress_new (FlatpakProgressCallback progress, + gpointer progress_data); + +void flatpak_log_dir_access (FlatpakDir *dir); + +gboolean flatpak_check_required_version (const char *ref, + GKeyFile *metakey, + GError **error); + +#endif /* __FLATPAK_UTILS_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-version-macros.h flatpak-1.0.7/common/flatpak-version-macros.h --- flatpak-0.11.3/common/flatpak-version-macros.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-version-macros.h 2019-02-11 12:42:29.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * 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 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 + */ + +#if !defined (__FLATPAK_H_INSIDE__) && !defined (FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_VERSION_MACROS_H__ +#define __FLATPAK_VERSION_MACROS_H__ + +/** + * FLATPAK_MAJOR_VERSION: + * + * The major version. + */ +#define FLATPAK_MAJOR_VERSION (1) + +/** + * FLATPAK_MINOR_VERSION: + * + * The minor version. + */ +#define FLATPAK_MINOR_VERSION (0) + +/** + * FLATPAK_MICRO_VERSION: + * + * The micro version. + */ +#define FLATPAK_MICRO_VERSION (7) + +/** + * FLATPAK_CHECK_VERSION: + * @major: major version to compare against + * @minor: minor version to compare against + * @micro: micro version to compare against + * + * Check that the current version is at least @major.@minor.@micro. + */ +#define FLATPAK_CHECK_VERSION(major,minor,micro) \ + (FLATPAK_MAJOR_VERSION > (major) || \ + (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION > (minor)) || \ + (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION == (minor) && \ + FLATPAK_MICRO_VERSION >= (micro))) + +#ifndef FLATPAK_EXTERN +#define FLATPAK_EXTERN extern +#endif + +/** + * SECTION:flatpak-version-macros + * @Title: Version information + */ + +#endif /* __FLATPAK_VERSION_MACROS_H__ */ diff -Nru flatpak-0.11.3/common/flatpak-version-macros.h.in flatpak-1.0.7/common/flatpak-version-macros.h.in --- flatpak-0.11.3/common/flatpak-version-macros.h.in 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/flatpak-version-macros.h.in 2018-09-12 08:41:11.000000000 +0000 @@ -0,0 +1,72 @@ +/* + * 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 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 + */ + +#if !defined (__FLATPAK_H_INSIDE__) && !defined (FLATPAK_COMPILATION) +#error "Only can be included directly." +#endif + +#ifndef __FLATPAK_VERSION_MACROS_H__ +#define __FLATPAK_VERSION_MACROS_H__ + +/** + * FLATPAK_MAJOR_VERSION: + * + * The major version. + */ +#define FLATPAK_MAJOR_VERSION (@FLATPAK_MAJOR_VERSION@) + +/** + * FLATPAK_MINOR_VERSION: + * + * The minor version. + */ +#define FLATPAK_MINOR_VERSION (@FLATPAK_MINOR_VERSION@) + +/** + * FLATPAK_MICRO_VERSION: + * + * The micro version. + */ +#define FLATPAK_MICRO_VERSION (@FLATPAK_MICRO_VERSION@) + +/** + * FLATPAK_CHECK_VERSION: + * @major: major version to compare against + * @minor: minor version to compare against + * @micro: micro version to compare against + * + * Check that the current version is at least @major.@minor.@micro. + */ +#define FLATPAK_CHECK_VERSION(major,minor,micro) \ + (FLATPAK_MAJOR_VERSION > (major) || \ + (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION > (minor)) || \ + (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION == (minor) && \ + FLATPAK_MICRO_VERSION >= (micro))) + +#ifndef FLATPAK_EXTERN +#define FLATPAK_EXTERN extern +#endif + +/** + * SECTION:flatpak-version-macros + * @Title: Version information + */ + +#endif /* __FLATPAK_VERSION_MACROS_H__ */ diff -Nru flatpak-0.11.3/common/Makefile.am.inc flatpak-1.0.7/common/Makefile.am.inc --- flatpak-0.11.3/common/Makefile.am.inc 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/common/Makefile.am.inc 2019-02-11 12:42:20.000000000 +0000 @@ -1,76 +1,132 @@ +lib_LTLIBRARIES += libflatpak.la noinst_LTLIBRARIES += libflatpak-common.la +noinst_PROGRAMS += test-libflatpak -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 +flatpakincludedir = $(includedir)/flatpak -common/flatpak-dbus.c: data/org.freedesktop.Flatpak.xml Makefile +flatpakinclude_HEADERS = \ + common/flatpak.h \ + common/flatpak-ref.h \ + common/flatpak-error.h \ + common/flatpak-installed-ref.h \ + common/flatpak-remote-ref.h \ + common/flatpak-related-ref.h \ + common/flatpak-bundle-ref.h \ + common/flatpak-installation.h \ + common/flatpak-remote.h \ + common/flatpak-version-macros.h \ + common/flatpak-portal-error.h \ + common/flatpak-transaction.h \ + $(NULL) + +nodist_flatpakinclude_HEADERS = \ + common/flatpak-enum-types.h \ + $(NULL) + +dbus_built_sources = common/flatpak-dbus-generated.c common/flatpak-dbus-generated.h common/flatpak-document-dbus-generated.c common/flatpak-document-dbus-generated.h +systemd_dbus_built_sources = common/flatpak-systemd-dbus-generated.c common/flatpak-systemd-dbus-generated.h + +common/flatpak-enum-types.h: $(flatpakinclude_HEADERS) common/flatpak-enum-types.h.template + $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ + common/flatpak-enum-types.h.tmp && mv common/flatpak-enum-types.h.tmp common/flatpak-enum-types.h + +common/flatpak-enum-types.c: $(flatpakinclude_HEADERS) common/flatpak-enum-types.c.template + $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ + common/flatpak-enum-types.c.tmp && mv common/flatpak-enum-types.c.tmp common/flatpak-enum-types.c + +EXTRA_DIST += common/flatpak-enum-types.c.template common/flatpak-enum-types.h.template + +common/flatpak-dbus-generated.c: data/org.freedesktop.Flatpak.xml Makefile mkdir -p $(builddir)/common $(AM_V_GEN) $(GDBUS_CODEGEN) \ --interface-prefix org.freedesktop.Flatpak. \ --c-namespace Flatpak \ - --generate-c-code $(builddir)/common/flatpak-dbus \ + --generate-c-code $(builddir)/common/flatpak-dbus-generated \ $(srcdir)/data/org.freedesktop.Flatpak.xml \ $(NULL) -common/flatpak-document-dbus.c: data/org.freedesktop.portal.Documents.xml Makefile +common/flatpak-document-dbus-generated.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 \ + --generate-c-code $(builddir)/common/flatpak-document-dbus-generated \ $(srcdir)/data/org.freedesktop.portal.Documents.xml \ $(NULL) -common/flatpak-systemd-dbus.c: data/org.freedesktop.systemd1.xml Makefile +common/flatpak-systemd-dbus-generated.c: data/org.freedesktop.systemd1.xml Makefile mkdir -p $(builddir)/common $(AM_V_GEN) $(GDBUS_CODEGEN) \ --interface-prefix org.freedesktop.systemd1. \ --c-namespace Systemd \ - --generate-c-code $(builddir)/common/flatpak-systemd-dbus \ + --generate-c-code $(builddir)/common/flatpak-systemd-dbus-generated \ $(srcdir)/data/org.freedesktop.systemd1.xml \ $(NULL) -common/%-dbus.h: common/%-dbus.c +common/%-dbus-generated.h: common/%-dbus-generated.c @true # Built as a side-effect of the rules for the .c nodist_libflatpak_common_la_SOURCES = \ + $(nodist_flatpakinclude_HEADERS) \ $(dbus_built_sources) \ $(systemd_dbus_built_sources) \ $(xdp_dbus_built_sources) \ + common/flatpak-enum-types.c \ $(NULL) BUILT_SOURCES += $(nodist_libflatpak_common_la_SOURCES) CLEANFILES += $(nodist_libflatpak_common_la_SOURCES) libflatpak_common_la_SOURCES = \ - common/flatpak-common-types.h \ + $(flatpakinclude_HEADERS) \ + common/flatpak-common-types-private.h \ common/flatpak-bwrap.c \ - common/flatpak-bwrap.h \ + common/flatpak-bwrap-private.h \ common/flatpak-dir.c \ - common/flatpak-dir.h \ + common/flatpak-dir-private.h \ common/flatpak-run.c \ - common/flatpak-run.h \ + common/flatpak-run-private.h \ common/flatpak-context.c \ - common/flatpak-context.h \ + common/flatpak-context-private.h \ common/flatpak-exports.c \ - common/flatpak-exports.h \ - common/flatpak-portal-error.c \ - common/flatpak-portal-error.h \ + common/flatpak-exports-private.h \ + common/flatpak-transaction-private.h \ + common/flatpak-transaction.h \ + common/flatpak-transaction.c \ common/flatpak-utils.c \ - common/flatpak-utils.h \ - common/flatpak-table-printer.c \ - common/flatpak-table-printer.h \ + common/flatpak-utils-http.c \ + common/flatpak-utils-http-private.h \ + common/flatpak-utils-private.h \ common/flatpak-chain-input-stream.c \ - common/flatpak-chain-input-stream.h \ + common/flatpak-chain-input-stream-private.h \ + common/flatpak-portal-error.c \ + common/flatpak-portal-error.h \ common/flatpak-json.c \ - common/flatpak-json.h \ + common/flatpak-json-private.h \ common/flatpak-json-oci.c \ - common/flatpak-json-oci.h \ + common/flatpak-json-oci-private.h \ common/flatpak-oci-registry.c \ - common/flatpak-oci-registry.h \ + common/flatpak-oci-registry-private.h \ + common/flatpak-ref.c \ + common/flatpak-installed-ref.c \ + common/flatpak-installed-ref-private.h \ + common/flatpak-remote-ref.c \ + common/flatpak-remote-ref-private.h \ + common/flatpak-bundle-ref.c \ + common/flatpak-related-ref.c \ + common/flatpak-related-ref-private.h \ + common/flatpak-remote-private.h \ + common/flatpak-remote.c \ + common/flatpak-error.c \ + common/flatpak-installation-private.h \ + common/flatpak-installation.c \ + common/flatpak-instance-private.h \ + common/flatpak-instance.c \ + common/valgrind-private.h \ $(NULL) libflatpak_common_la_CFLAGS = \ + -DFLATPAK_COMPILATION \ $(AM_CFLAGS) \ $(BASE_CFLAGS) \ $(HIDDEN_VISIBILITY_CFLAGS) \ @@ -83,3 +139,92 @@ -I$(srcdir)/dbus-proxy \ $(NULL) libflatpak_common_la_LIBADD = $(AM_LIBADD) libglnx.la $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(XAUTH_LIBS) $(LIBSECCOMP_LIBS) $(INTERNAL_GPGME_LIBS) + + +libflatpak_la_SOURCES = \ + common/flatpak.c \ + $(NULL) + +libflatpak_la_CFLAGS = \ + $(HIDDEN_VISIBILITY_CFLAGS) \ + -DFLATPAK_COMPILATION \ + -I$(top_srcdir)/common \ + -I$(top_builddir)/common \ + $(AM_CFLAGS) \ + $(BASE_CFLAGS) \ + $(OSTREE_CFLAGS) \ + $(SOUP_CFLAGS) \ + $(JSON_CFLAGS) \ + $(NULL) + +libflatpak_la_LDFLAGS = \ + $(AM_LDFLAGS) \ + -version-info $(LT_VERSION_INFO) \ + -export-dynamic \ + -rpath $(libdir) \ + $(NULL) + +libflatpak_la_LIBADD = \ + $(AM_LIBADD) \ + libflatpak-common.la \ + $(BASE_LIBS) \ + $(OSTREE_LIBS) \ + $(SOUP_LIBS) \ + $(JSON_LIBS) \ + $(NULL) + +test_libflatpak_SOURCES = \ + common/test-lib.c \ + $(NULL) + +test_libflatpak_CFLAGS = \ + $(AM_CFLAGS) \ + $(BASE_CFLAGS) \ + -I$(top_srcdir)/common \ + -I$(top_builddir)/common \ + $(NULL) + +test_libflatpak_LDADD = \ + $(AM_LDADD) \ + $(BASE_LIBS) \ + libflatpak.la \ + $(NULL) + +# gobject-introspection rules +-include $(INTROSPECTION_MAKEFILE) + +sources = $(libflatpak_common_la_SOURCES) $(libflatpak_la_SOURCES) + +INTROSPECTION_GIRS = + +if HAVE_INTROSPECTION +Flatpak-1.0.gir: libflatpak.la Makefile + +introspected_headers = \ + $(flatpakinclude_HEADERS) \ + $(nodist_flatpakinclude_HEADERS) \ + $(NULL) +introspected_sources = $(filter-out %-private.h,$(sources)) + +Flatpak_1_0_gir_NAMESPACE = Flatpak +Flatpak_1_0_gir_VERSION = 1.0 +Flatpak_1_0_gir_LIBS = libflatpak.la +Flatpak_1_0_gir_FILES = $(introspected_headers) $(introspected_sources) +Flatpak_1_0_gir_CFLAGS = $(libflatpak_la_CFLAGS) +Flatpak_1_0_gir_INCLUDES = GObject-2.0 Gio-2.0 +Flatpak_1_0_gir_SCANNERFLAGS = \ + --warn-all \ + --c-include='flatpak.h' \ + --pkg-export=flatpak + +INTROSPECTION_GIRS += Flatpak-1.0.gir + +girdir = $(datadir)/gir-1.0 +nodist_gir_DATA = $(INTROSPECTION_GIRS) +CLEANFILES += $(nodist_gir_DATA) + +typelibdir = $(libdir)/girepository-1.0 +nodist_typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) +CLEANFILES += $(nodist_typelib_DATA) + +endif # HAVE_INTROSPECTION diff -Nru flatpak-0.11.3/common/test-lib.c flatpak-1.0.7/common/test-lib.c --- flatpak-0.11.3/common/test-lib.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/test-lib.c 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,455 @@ +#include "config.h" + +#include "libglnx/libglnx.h" + +#include +#include + + +static void +progress_cb (const char *status, + guint progress, + gboolean estimating, + gpointer user_data) +{ + g_print ("status: %s, progress: %d estimating: %d, user_data: %p\n", status, progress, estimating, user_data); +} + +static gboolean +monitor_callback (GFileMonitor * monitor, + GFile * child, + GFile * other_file, + GFileMonitorEvent eflags) +{ + g_print ("Database changed\n"); + return TRUE; +} + +int +main (int argc, char *argv[]) +{ + FlatpakInstallation *installation; + FlatpakInstalledRef *app1; + FlatpakInstalledRef *app2; + FlatpakRemoteRef *remote_ref; + + g_autoptr(GPtrArray) remotes = NULL; + GError *error = NULL; + int i, j, k; + + installation = flatpak_installation_new_user (NULL, &error); + if (installation == NULL) + { + g_print ("error: %s\n", error->message); + return 1; + } + + if (0) + { + const char *list[] = { "gnome-apps", "app/org.gnome.iagno/x86_64/stable", + "gnome", "runtime/org.gnome.Sdk/x86_64/3.20" }; + + for (j = 0; j < G_N_ELEMENTS (list); j += 2) + { + g_print ("looking for related to ref: %s\n", list[j + 1]); + + for (k = 0; k < 2; k++) + { + g_autoptr(GError) error = NULL; + g_autoptr(GPtrArray) related = NULL; + + + if (k == 0) + related = flatpak_installation_list_remote_related_refs_sync (installation, + list[j], + list[j + 1], + NULL, + &error); + else + related = flatpak_installation_list_installed_related_refs_sync (installation, + list[j], + list[j + 1], + NULL, + &error); + + if (related == NULL) + { + g_warning ("Error: %s", error->message); + continue; + } + + g_print ("%s related:\n", (k == 0) ? "remote" : "local"); + for (i = 0; i < related->len; i++) + { + FlatpakRelatedRef *rel = g_ptr_array_index (related, i); + const char * const *subpaths = flatpak_related_ref_get_subpaths (rel); + g_autofree char *subpaths_str = NULL; + + if (subpaths) + { + g_autofree char *subpaths_joined = g_strjoinv (",", (char **) subpaths); + subpaths_str = g_strdup_printf (" subpaths: %s", subpaths_joined); + } + else + subpaths_str = g_strdup (""); + g_print ("%d %s %s %s %s dl:%d del:%d%s\n", + flatpak_ref_get_kind (FLATPAK_REF (rel)), + flatpak_ref_get_name (FLATPAK_REF (rel)), + flatpak_ref_get_arch (FLATPAK_REF (rel)), + flatpak_ref_get_branch (FLATPAK_REF (rel)), + flatpak_ref_get_commit (FLATPAK_REF (rel)), + flatpak_related_ref_should_download (rel), + flatpak_related_ref_should_delete (rel), + subpaths_str); + } + } + } + + return 0; + } + + if (argc == 4) + { + GFileMonitor * monitor = flatpak_installation_create_monitor (installation, NULL, NULL); + GMainLoop *main_loop; + + g_signal_connect (monitor, "changed", (GCallback) monitor_callback, NULL); + main_loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (main_loop); + } + + if (argc == 3) + { + app1 = flatpak_installation_install (installation, + argv[1], + FLATPAK_REF_KIND_APP, + argv[2], + NULL, NULL, + progress_cb, (gpointer) 0xdeadbeef, + NULL, &error); + if (app1 == NULL) + g_print ("Error: %s\n", error->message); + else + g_print ("Installed %s: %s\n", argv[2], + flatpak_ref_get_commit (FLATPAK_REF (app1))); + + return 0; + } + + if (argc == 2) + { + app1 = flatpak_installation_update (installation, + FLATPAK_UPDATE_FLAGS_NONE, + FLATPAK_REF_KIND_APP, + argv[1], + NULL, NULL, + progress_cb, (gpointer) 0xdeadbeef, + NULL, &error); + if (app1 == NULL) + g_print ("Error: %s\n", error->message); + else + g_print ("Updated %s: %s\n", argv[1], + flatpak_ref_get_commit (FLATPAK_REF (app1))); + + return 0; + } + + g_print ("\n**** Loading bundle\n"); + { + g_autoptr(GFile) f = g_file_new_for_commandline_arg ("tests/hello.pak"); + g_autoptr(FlatpakBundleRef) bundle = flatpak_bundle_ref_new (f, &error); + if (bundle == NULL) + { + g_print ("Error loading bundle: %s\n", error->message); + g_clear_error (&error); + } + else + { + g_autofree char *path = g_file_get_path (flatpak_bundle_ref_get_file (bundle)); + g_autoptr(GBytes) metadata = flatpak_bundle_ref_get_metadata (bundle); + g_autoptr(GBytes) appdata = flatpak_bundle_ref_get_appstream (bundle); + g_print ("%d %s %s %s %s %s %"G_GUINT64_FORMAT "\n%s\n", + flatpak_ref_get_kind (FLATPAK_REF (bundle)), + flatpak_ref_get_name (FLATPAK_REF (bundle)), + flatpak_ref_get_arch (FLATPAK_REF (bundle)), + flatpak_ref_get_branch (FLATPAK_REF (bundle)), + flatpak_ref_get_commit (FLATPAK_REF (bundle)), + path, + flatpak_bundle_ref_get_installed_size (bundle), + (char *) g_bytes_get_data (metadata, NULL)); + + if (appdata != NULL) + { + g_autoptr(GZlibDecompressor) decompressor = NULL; + g_autoptr(GOutputStream) out2 = NULL; + g_autoptr(GOutputStream) out = NULL; + + out = g_unix_output_stream_new (1, FALSE); + decompressor = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); + out2 = g_converter_output_stream_new (out, G_CONVERTER (decompressor)); + + if (!g_output_stream_write_all (out2, + g_bytes_get_data (appdata, NULL), + g_bytes_get_size (appdata), + NULL, NULL, &error)) + { + g_print ("Error decompressing appdata: %s\n", error->message); + g_clear_error (&error); + } + } + } + } + + g_print ("\n**** Checking for updates\n"); + { + g_autoptr(GPtrArray) updates = + flatpak_installation_list_installed_refs_for_update (installation, + NULL, &error); + + if (updates == NULL) + { + g_print ("check for updates error: %s\n", error->message); + g_clear_error (&error); + } + else + { + for (i = 0; i < updates->len; i++) + { + FlatpakInstalledRef *ref = g_ptr_array_index (updates, i); + g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", + flatpak_ref_get_kind (FLATPAK_REF (ref)), + flatpak_ref_get_name (FLATPAK_REF (ref)), + flatpak_ref_get_arch (FLATPAK_REF (ref)), + flatpak_ref_get_branch (FLATPAK_REF (ref)), + flatpak_ref_get_commit (FLATPAK_REF (ref)), + flatpak_installed_ref_get_latest_commit (ref), + flatpak_installed_ref_get_origin (ref), + flatpak_installed_ref_get_deploy_dir (ref), + flatpak_installed_ref_get_is_current (ref), + flatpak_installed_ref_get_installed_size (ref)); + } + } + } + + g_print ("\n**** Listing all installed refs\n"); + { + g_autoptr(GPtrArray) refs = NULL; + + refs = flatpak_installation_list_installed_refs (installation, + NULL, NULL); + + for (i = 0; i < refs->len; i++) + { + FlatpakInstalledRef *ref = g_ptr_array_index (refs, i); + g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", + flatpak_ref_get_kind (FLATPAK_REF (ref)), + flatpak_ref_get_name (FLATPAK_REF (ref)), + flatpak_ref_get_arch (FLATPAK_REF (ref)), + flatpak_ref_get_branch (FLATPAK_REF (ref)), + flatpak_ref_get_commit (FLATPAK_REF (ref)), + flatpak_installed_ref_get_latest_commit (ref), + flatpak_installed_ref_get_origin (ref), + flatpak_installed_ref_get_deploy_dir (ref), + flatpak_installed_ref_get_is_current (ref), + flatpak_installed_ref_get_installed_size (ref)); + } + } + + g_print ("**** Listing all installed apps\n"); + { + g_autoptr(GPtrArray) apps = NULL; + + apps = flatpak_installation_list_installed_refs_by_kind (installation, + FLATPAK_REF_KIND_APP, + NULL, NULL); + + for (i = 0; i < apps->len; i++) + { + FlatpakInstalledRef *app = g_ptr_array_index (apps, i); + + g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", + flatpak_ref_get_kind (FLATPAK_REF (app)), + flatpak_ref_get_name (FLATPAK_REF (app)), + flatpak_ref_get_arch (FLATPAK_REF (app)), + flatpak_ref_get_branch (FLATPAK_REF (app)), + flatpak_ref_get_commit (FLATPAK_REF (app)), + flatpak_installed_ref_get_latest_commit (app), + flatpak_installed_ref_get_origin (app), + flatpak_installed_ref_get_deploy_dir (app), + flatpak_installed_ref_get_is_current (app), + flatpak_installed_ref_get_installed_size (app)); + g_print ("metadata:\n%s\n", (char *) g_bytes_get_data (flatpak_installed_ref_load_metadata (app, NULL, NULL), NULL)); + } + } + + g_print ("\n**** Listing all installed runtimes\n"); + { + g_autoptr(GPtrArray) runtimes = NULL; + + runtimes = flatpak_installation_list_installed_refs_by_kind (installation, + FLATPAK_REF_KIND_RUNTIME, + NULL, NULL); + + for (i = 0; i < runtimes->len; i++) + { + FlatpakInstalledRef *runtime = g_ptr_array_index (runtimes, i); + g_print ("%d %s %s %s %s %s %s %d\n", + flatpak_ref_get_kind (FLATPAK_REF (runtime)), + flatpak_ref_get_name (FLATPAK_REF (runtime)), + flatpak_ref_get_arch (FLATPAK_REF (runtime)), + flatpak_ref_get_branch (FLATPAK_REF (runtime)), + flatpak_ref_get_commit (FLATPAK_REF (runtime)), + flatpak_installed_ref_get_origin (runtime), + flatpak_installed_ref_get_deploy_dir (runtime), + flatpak_installed_ref_get_is_current (runtime)); + } + } + + g_print ("\n**** Getting installed gedit master\n"); + app1 = flatpak_installation_get_installed_ref (installation, + FLATPAK_REF_KIND_APP, + "org.gnome.gedit", + NULL, "master", NULL, NULL); + if (app1) + { + g_print ("gedit master: %d %s %s %s %s %s %s %d\n", + flatpak_ref_get_kind (FLATPAK_REF (app1)), + flatpak_ref_get_name (FLATPAK_REF (app1)), + flatpak_ref_get_arch (FLATPAK_REF (app1)), + flatpak_ref_get_branch (FLATPAK_REF (app1)), + flatpak_ref_get_commit (FLATPAK_REF (app1)), + flatpak_installed_ref_get_origin (app1), + flatpak_installed_ref_get_deploy_dir (app1), + flatpak_installed_ref_get_is_current (app1)); + } + if (!flatpak_installation_launch (installation, + "org.gnome.gedit", + NULL, NULL, NULL, + NULL, &error)) + { + g_print ("launch gedit error: %s\n", error->message); + g_clear_error (&error); + } + + g_print ("\n**** Getting current installed gedit\n"); + app2 = flatpak_installation_get_current_installed_app (installation, + "org.gnome.gedit", + NULL, NULL); + if (app2) + { + g_print ("gedit current: %d %s %s %s %s %s %s %d\n", + flatpak_ref_get_kind (FLATPAK_REF (app2)), + flatpak_ref_get_name (FLATPAK_REF (app2)), + flatpak_ref_get_arch (FLATPAK_REF (app2)), + flatpak_ref_get_branch (FLATPAK_REF (app2)), + flatpak_ref_get_commit (FLATPAK_REF (app2)), + flatpak_installed_ref_get_origin (app2), + flatpak_installed_ref_get_deploy_dir (app2), + flatpak_installed_ref_get_is_current (app2)); + } + + + g_print ("\n**** Listing remotes\n"); + remotes = flatpak_installation_list_remotes (installation, + NULL, NULL); + + for (i = 0; i < remotes->len; i++) + { + FlatpakRemote *remote = g_ptr_array_index (remotes, i); + g_autoptr(GPtrArray) refs = NULL; + const char *collection_id = NULL; + + collection_id = flatpak_remote_get_collection_id (remote); + + g_print ("\nRemote: %s %u %d %s %s %s %s %d %d %s\n", + flatpak_remote_get_name (remote), + flatpak_remote_get_remote_type (remote), + flatpak_remote_get_prio (remote), + flatpak_remote_get_url (remote), + collection_id, + flatpak_remote_get_title (remote), + flatpak_remote_get_default_branch (remote), + flatpak_remote_get_gpg_verify (remote), + flatpak_remote_get_noenumerate (remote), + g_file_get_path (flatpak_remote_get_appstream_dir (remote, NULL))); + + g_print ("\n**** Listing remote refs on %s\n", flatpak_remote_get_name (remote)); + refs = flatpak_installation_list_remote_refs_sync (installation, flatpak_remote_get_name (remote), + NULL, NULL); + if (refs) + { + for (j = 0; j < refs->len; j++) + { + FlatpakRemoteRef *ref = g_ptr_array_index (refs, j); + g_print ("%d %s %s %s %s %s\n", + flatpak_ref_get_kind (FLATPAK_REF (ref)), + flatpak_ref_get_name (FLATPAK_REF (ref)), + flatpak_ref_get_arch (FLATPAK_REF (ref)), + flatpak_ref_get_branch (FLATPAK_REF (ref)), + flatpak_ref_get_commit (FLATPAK_REF (ref)), + flatpak_remote_ref_get_remote_name (ref)); + + if (j == 0) + { + guint64 download_size; + guint64 installed_size; + + if (!flatpak_installation_fetch_remote_size_sync (installation, + flatpak_remote_get_name (remote), + FLATPAK_REF (ref), + &download_size, + &installed_size, + NULL, &error)) + { + g_print ("error fetching sizes: %s\n", error->message); + g_clear_error (&error); + } + else + { + g_print ("Download size: %"G_GUINT64_FORMAT " Installed size: %"G_GUINT64_FORMAT "\n", + download_size, installed_size); + } + + } + } + } + + g_print ("\n**** Getting remote platform 3.20 on %s\n", flatpak_remote_get_name (remote)); + error = NULL; + remote_ref = flatpak_installation_fetch_remote_ref_sync (installation, flatpak_remote_get_name (remote), + FLATPAK_REF_KIND_RUNTIME, + "org.gnome.Platform", NULL, "3.20", + NULL, &error); + if (remote_ref) + { + GBytes *metadata; + + g_print ("%d %s %s %s %s %s\n", + flatpak_ref_get_kind (FLATPAK_REF (remote_ref)), + flatpak_ref_get_name (FLATPAK_REF (remote_ref)), + flatpak_ref_get_arch (FLATPAK_REF (remote_ref)), + flatpak_ref_get_branch (FLATPAK_REF (remote_ref)), + flatpak_ref_get_commit (FLATPAK_REF (remote_ref)), + flatpak_remote_ref_get_remote_name (remote_ref)); + + metadata = flatpak_installation_fetch_remote_metadata_sync (installation, flatpak_remote_get_name (remote), + FLATPAK_REF (remote_ref), NULL, &error); + if (metadata) + { + g_print ("metadata: %s\n", (char *) g_bytes_get_data (metadata, NULL)); + } + else + { + g_print ("fetch error\n"); + g_print ("error: %s\n", error->message); + g_clear_error (&error); + } + } + else + { + g_print ("error: %s\n", error->message); + g_clear_error (&error); + } + } + return 0; +} diff -Nru flatpak-0.11.3/common/valgrind-private.h flatpak-1.0.7/common/valgrind-private.h --- flatpak-0.11.3/common/valgrind-private.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/common/valgrind-private.h 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,6644 @@ +/* -*- c -*- + ---------------------------------------------------------------- + + Notice that the following BSD-style license applies to this one + file (valgrind.h) only. The rest of Valgrind is licensed under the + terms of the GNU General Public License, version 2, unless + otherwise indicated. See the COPYING file in the source + distribution for details. + + ---------------------------------------------------------------- + + This file is part of Valgrind, a dynamic binary instrumentation + framework. + + Copyright (C) 2000-2017 Julian Seward. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + ---------------------------------------------------------------- + + Notice that the above BSD-style license applies to this one file + (valgrind.h) only. The entire rest of Valgrind is licensed under + the terms of the GNU General Public License, version 2. See the + COPYING file in the source distribution for details. + + ---------------------------------------------------------------- +*/ + + +/* This file is for inclusion into client (your!) code. + + You can use these macros to manipulate and query Valgrind's + execution inside your own programs. + + The resulting executables will still run without Valgrind, just a + little bit more slowly than they otherwise would, but otherwise + unchanged. When not running on valgrind, each client request + consumes very few (eg. 7) instructions, so the resulting performance + loss is negligible unless you plan to execute client requests + millions of times per second. Nevertheless, if that is still a + problem, you can compile with the NVALGRIND symbol defined (gcc + -DNVALGRIND) so that client requests are not even compiled in. */ + +#ifndef __VALGRIND_H +#define __VALGRIND_H + + +/* ------------------------------------------------------------------ */ +/* VERSION NUMBER OF VALGRIND */ +/* ------------------------------------------------------------------ */ + +/* Specify Valgrind's version number, so that user code can + conditionally compile based on our version number. Note that these + were introduced at version 3.6 and so do not exist in version 3.5 + or earlier. The recommended way to use them to check for "version + X.Y or later" is (eg) + +#if defined(__VALGRIND_MAJOR__) && defined(__VALGRIND_MINOR__) \ + && (__VALGRIND_MAJOR__ > 3 \ + || (__VALGRIND_MAJOR__ == 3 && __VALGRIND_MINOR__ >= 6)) +*/ +#define __VALGRIND_MAJOR__ 3 +#define __VALGRIND_MINOR__ 13 + + +#include + +/* Nb: this file might be included in a file compiled with -ansi. So + we can't use C++ style "//" comments nor the "asm" keyword (instead + use "__asm__"). */ + +/* Derive some tags indicating what the target platform is. Note + that in this file we're using the compiler's CPP symbols for + identifying architectures, which are different to the ones we use + within the rest of Valgrind. Note, __powerpc__ is active for both + 32 and 64-bit PPC, whereas __powerpc64__ is only active for the + latter (on Linux, that is). + + Misc note: how to find out what's predefined in gcc by default: + gcc -Wp,-dM somefile.c +*/ +#undef PLAT_x86_darwin +#undef PLAT_amd64_darwin +#undef PLAT_x86_win32 +#undef PLAT_amd64_win64 +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64be_linux +#undef PLAT_ppc64le_linux +#undef PLAT_arm_linux +#undef PLAT_arm64_linux +#undef PLAT_s390x_linux +#undef PLAT_mips32_linux +#undef PLAT_mips64_linux +#undef PLAT_x86_solaris +#undef PLAT_amd64_solaris + + +#if defined(__APPLE__) && defined(__i386__) +# define PLAT_x86_darwin 1 +#elif defined(__APPLE__) && defined(__x86_64__) +# define PLAT_amd64_darwin 1 +#elif (defined(__MINGW32__) && !defined(__MINGW64__)) \ + || defined(__CYGWIN32__) \ + || (defined(_WIN32) && defined(_M_IX86)) +# define PLAT_x86_win32 1 +#elif defined(__MINGW64__) \ + || (defined(_WIN64) && defined(_M_X64)) +# define PLAT_amd64_win64 1 +#elif defined(__linux__) && defined(__i386__) +# define PLAT_x86_linux 1 +#elif defined(__linux__) && defined(__x86_64__) && !defined(__ILP32__) +# define PLAT_amd64_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && !defined(__powerpc64__) +# define PLAT_ppc32_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF != 2 +/* Big Endian uses ELF version 1 */ +# define PLAT_ppc64be_linux 1 +#elif defined(__linux__) && defined(__powerpc__) && defined(__powerpc64__) && _CALL_ELF == 2 +/* Little Endian uses ELF version 2 */ +# define PLAT_ppc64le_linux 1 +#elif defined(__linux__) && defined(__arm__) && !defined(__aarch64__) +# define PLAT_arm_linux 1 +#elif defined(__linux__) && defined(__aarch64__) && !defined(__arm__) +# define PLAT_arm64_linux 1 +#elif defined(__linux__) && defined(__s390__) && defined(__s390x__) +# define PLAT_s390x_linux 1 +#elif defined(__linux__) && defined(__mips__) && (__mips==64) +# define PLAT_mips64_linux 1 +#elif defined(__linux__) && defined(__mips__) && (__mips!=64) +# define PLAT_mips32_linux 1 +#elif defined(__sun) && defined(__i386__) +# define PLAT_x86_solaris 1 +#elif defined(__sun) && defined(__x86_64__) +# define PLAT_amd64_solaris 1 +#else +/* If we're not compiling for our target platform, don't generate + any inline asms. */ +# if !defined(NVALGRIND) +# define NVALGRIND 1 +# endif +#endif + + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE SPECIFICS for SPECIAL INSTRUCTIONS. There is nothing */ +/* in here of use to end-users -- skip to the next section. */ +/* ------------------------------------------------------------------ */ + +/* + * VALGRIND_DO_CLIENT_REQUEST(): a statement that invokes a Valgrind client + * request. Accepts both pointers and integers as arguments. + * + * VALGRIND_DO_CLIENT_REQUEST_STMT(): a statement that invokes a Valgrind + * client request that does not return a value. + + * VALGRIND_DO_CLIENT_REQUEST_EXPR(): a C expression that invokes a Valgrind + * client request and whose value equals the client request result. Accepts + * both pointers and integers as arguments. Note that such calls are not + * necessarily pure functions -- they may have side effects. + */ + +#define VALGRIND_DO_CLIENT_REQUEST(_zzq_rlval, _zzq_default, \ + _zzq_request, _zzq_arg1, _zzq_arg2, \ + _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + do { (_zzq_rlval) = VALGRIND_DO_CLIENT_REQUEST_EXPR((_zzq_default), \ + (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ + (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) + +#define VALGRIND_DO_CLIENT_REQUEST_STMT(_zzq_request, _zzq_arg1, \ + _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + do { (void) VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + (_zzq_request), (_zzq_arg1), (_zzq_arg2), \ + (_zzq_arg3), (_zzq_arg4), (_zzq_arg5)); } while (0) + +#if defined(NVALGRIND) + +/* Define NVALGRIND to completely remove the Valgrind magic sequence + from the compiled code (analogous to NDEBUG's effects on + assert()) */ +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + (_zzq_default) + +#else /* ! NVALGRIND */ + +/* The following defines the magic code sequences which the JITter + spots and handles magically. Don't look too closely at them as + they will rot your brain. + + The assembly code sequences for all architectures is in this one + file. This is because this file must be stand-alone, and we don't + want to have multiple files. + + For VALGRIND_DO_CLIENT_REQUEST, we must ensure that the default + value gets put in the return slot, so that everything works when + this is executed not under Valgrind. Args are passed in a memory + block, and so there's no intrinsic limit to the number that could + be passed, but it's currently five. + + The macro args are: + _zzq_rlval result lvalue + _zzq_default default value (result returned when running on real CPU) + _zzq_request request code + _zzq_arg1..5 request params + + The other two macros are used to support function wrapping, and are + a lot simpler. VALGRIND_GET_NR_CONTEXT returns the value of the + guest's NRADDR pseudo-register and whatever other information is + needed to safely run the call original from the wrapper: on + ppc64-linux, the R2 value at the divert point is also needed. This + information is abstracted into a user-visible type, OrigFn. + + VALGRIND_CALL_NOREDIR_* behaves the same as the following on the + guest, but guarantees that the branch instruction will not be + redirected: x86: call *%eax, amd64: call *%rax, ppc32/ppc64: + branch-and-link-to-r11. VALGRIND_CALL_NOREDIR is just text, not a + complete inline asm, since it needs to be combined with more magic + inline asm stuff to be useful. +*/ + +/* ----------------- x86-{linux,darwin,solaris} ---------------- */ + +#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ + || (defined(PLAT_x86_win32) && defined(__GNUC__)) \ + || defined(PLAT_x86_solaris) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "roll $3, %%edi ; roll $13, %%edi\n\t" \ + "roll $29, %%edi ; roll $19, %%edi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EDX = client_request ( %EAX ) */ \ + "xchgl %%ebx,%%ebx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + "xchgl %%ecx,%%ecx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%EAX */ \ + "xchgl %%edx,%%edx\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "xchgl %%edi,%%edi\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_x86_linux || PLAT_x86_darwin || (PLAT_x86_win32 && __GNUC__) + || PLAT_x86_solaris */ + +/* ------------------------- x86-Win32 ------------------------- */ + +#if defined(PLAT_x86_win32) && !defined(__GNUC__) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#if defined(_MSC_VER) + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + __asm rol edi, 3 __asm rol edi, 13 \ + __asm rol edi, 29 __asm rol edi, 19 + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + valgrind_do_client_request_expr((uintptr_t)(_zzq_default), \ + (uintptr_t)(_zzq_request), (uintptr_t)(_zzq_arg1), \ + (uintptr_t)(_zzq_arg2), (uintptr_t)(_zzq_arg3), \ + (uintptr_t)(_zzq_arg4), (uintptr_t)(_zzq_arg5)) + +static __inline uintptr_t +valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request, + uintptr_t _zzq_arg1, uintptr_t _zzq_arg2, + uintptr_t _zzq_arg3, uintptr_t _zzq_arg4, + uintptr_t _zzq_arg5) +{ + volatile uintptr_t _zzq_args[6]; + volatile unsigned int _zzq_result; + _zzq_args[0] = (uintptr_t)(_zzq_request); + _zzq_args[1] = (uintptr_t)(_zzq_arg1); + _zzq_args[2] = (uintptr_t)(_zzq_arg2); + _zzq_args[3] = (uintptr_t)(_zzq_arg3); + _zzq_args[4] = (uintptr_t)(_zzq_arg4); + _zzq_args[5] = (uintptr_t)(_zzq_arg5); + __asm { __asm lea eax, _zzq_args __asm mov edx, _zzq_default + __SPECIAL_INSTRUCTION_PREAMBLE + /* %EDX = client_request ( %EAX ) */ + __asm xchg ebx,ebx + __asm mov _zzq_result, edx + } + return _zzq_result; +} + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %EAX = guest_NRADDR */ \ + __asm xchg ecx,ecx \ + __asm mov __addr, eax \ + } \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_EAX ERROR + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm { __SPECIAL_INSTRUCTION_PREAMBLE \ + __asm xchg edi,edi \ + } \ + } while (0) + +#else +#error Unsupported compiler. +#endif + +#endif /* PLAT_x86_win32 */ + +/* ----------------- amd64-{linux,darwin,solaris} --------------- */ + +#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \ + || defined(PLAT_amd64_solaris) \ + || (defined(PLAT_amd64_win64) && defined(__GNUC__)) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rolq $3, %%rdi ; rolq $13, %%rdi\n\t" \ + "rolq $61, %%rdi ; rolq $51, %%rdi\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned long int _zzq_args[6]; \ + volatile unsigned long int _zzq_result; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RDX = client_request ( %RAX ) */ \ + "xchgq %%rbx,%%rbx" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %RAX = guest_NRADDR */ \ + "xchgq %%rcx,%%rcx" \ + : "=a" (__addr) \ + : \ + : "cc", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_RAX \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%RAX */ \ + "xchgq %%rdx,%%rdx\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "xchgq %%rdi,%%rdi\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_amd64_linux || PLAT_amd64_darwin || PLAT_amd64_solaris */ + +/* ------------------------- amd64-Win64 ------------------------- */ + +#if defined(PLAT_amd64_win64) && !defined(__GNUC__) + +#error Unsupported compiler. + +#endif /* PLAT_amd64_win64 */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rlwinm 0,0,3,0,31 ; rlwinm 0,0,13,0,31\n\t" \ + "rlwinm 0,0,29,0,31 ; rlwinm 0,0,19,0,31\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned int _zzq_args[6]; \ + unsigned int _zzq_result; \ + unsigned int* _zzq_ptr; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64be_linux) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + unsigned long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned long int _zzq_args[6]; \ + unsigned long int _zzq_result; \ + unsigned long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R11 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc64be_linux */ + +#if defined(PLAT_ppc64le_linux) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + unsigned long int r2; /* what tocptr do we need? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "rotldi 0,0,3 ; rotldi 0,0,13\n\t" \ + "rotldi 0,0,61 ; rotldi 0,0,51\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({ unsigned long int _zzq_args[6]; \ + unsigned long int _zzq_result; \ + unsigned long int* _zzq_ptr; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + _zzq_ptr = _zzq_args; \ + __asm__ volatile("mr 3,%1\n\t" /*default*/ \ + "mr 4,%2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = client_request ( %R4 ) */ \ + "or 1,1,1\n\t" \ + "mr %0,3" /*result*/ \ + : "=b" (_zzq_result) \ + : "b" (_zzq_default), "b" (_zzq_ptr) \ + : "cc", "memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR */ \ + "or 2,2,2\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %R3 = guest_NRADDR_GPR2 */ \ + "or 4,4,4\n\t" \ + "mr %0,3" \ + : "=b" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->r2 = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R12 */ \ + "or 3,3,3\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or 5,5,5\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_ppc64le_linux */ + +/* ------------------------- arm-linux ------------------------- */ + +#if defined(PLAT_arm_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "mov r12, r12, ror #3 ; mov r12, r12, ror #13 \n\t" \ + "mov r12, r12, ror #29 ; mov r12, r12, ror #19 \n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile("mov r3, %1\n\t" /*default*/ \ + "mov r4, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* R3 = client_request ( R4 ) */ \ + "orr r10, r10, r10\n\t" \ + "mov %0, r3" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "cc","memory", "r3", "r4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* R3 = guest_NRADDR */ \ + "orr r11, r11, r11\n\t" \ + "mov %0, r3" \ + : "=r" (__addr) \ + : \ + : "cc", "memory", "r3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir *%R4 */ \ + "orr r12, r12, r12\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "orr r9, r9, r9\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_arm_linux */ + +/* ------------------------ arm64-linux ------------------------- */ + +#if defined(PLAT_arm64_linux) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + } + OrigFn; + +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "ror x12, x12, #3 ; ror x12, x12, #13 \n\t" \ + "ror x12, x12, #51 ; ror x12, x12, #61 \n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + \ + __extension__ \ + ({volatile unsigned long int _zzq_args[6]; \ + volatile unsigned long int _zzq_result; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + __asm__ volatile("mov x3, %1\n\t" /*default*/ \ + "mov x4, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* X3 = client_request ( X4 ) */ \ + "orr x10, x10, x10\n\t" \ + "mov %0, x3" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" ((unsigned long int)(_zzq_default)), \ + "r" (&_zzq_args[0]) \ + : "cc","memory", "x3", "x4"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* X3 = guest_NRADDR */ \ + "orr x11, x11, x11\n\t" \ + "mov %0, x3" \ + : "=r" (__addr) \ + : \ + : "cc", "memory", "x3" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* branch-and-link-to-noredir X8 */ \ + "orr x12, x12, x12\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "orr x9, x9, x9\n\t" \ + : : : "cc", "memory" \ + ); \ + } while (0) + +#endif /* PLAT_arm64_linux */ + +/* ------------------------ s390x-linux ------------------------ */ + +#if defined(PLAT_s390x_linux) + +typedef + struct { + unsigned long int nraddr; /* where's the code? */ + } + OrigFn; + +/* __SPECIAL_INSTRUCTION_PREAMBLE will be used to identify Valgrind specific + * code. This detection is implemented in platform specific toIR.c + * (e.g. VEX/priv/guest_s390_decoder.c). + */ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "lr 15,15\n\t" \ + "lr 1,1\n\t" \ + "lr 2,2\n\t" \ + "lr 3,3\n\t" + +#define __CLIENT_REQUEST_CODE "lr 2,2\n\t" +#define __GET_NR_CONTEXT_CODE "lr 3,3\n\t" +#define __CALL_NO_REDIR_CODE "lr 4,4\n\t" +#define __VEX_INJECT_IR_CODE "lr 5,5\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({volatile unsigned long int _zzq_args[6]; \ + volatile unsigned long int _zzq_result; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + __asm__ volatile(/* r2 = args */ \ + "lgr 2,%1\n\t" \ + /* r3 = default */ \ + "lgr 3,%2\n\t" \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + __CLIENT_REQUEST_CODE \ + /* results = r3 */ \ + "lgr %0, 3\n\t" \ + : "=d" (_zzq_result) \ + : "a" (&_zzq_args[0]), "0" (_zzq_default) \ + : "cc", "2", "3", "memory" \ + ); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + __GET_NR_CONTEXT_CODE \ + "lgr %0, 3\n\t" \ + : "=a" (__addr) \ + : \ + : "cc", "3", "memory" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_R1 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + __CALL_NO_REDIR_CODE + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + __VEX_INJECT_IR_CODE); \ + } while (0) + +#endif /* PLAT_s390x_linux */ + +/* ------------------------- mips32-linux ---------------- */ + +#if defined(PLAT_mips32_linux) + +typedef + struct { + unsigned int nraddr; /* where's the code? */ + } + OrigFn; + +/* .word 0x342 + * .word 0x742 + * .word 0xC2 + * .word 0x4C2*/ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "srl $0, $0, 13\n\t" \ + "srl $0, $0, 29\n\t" \ + "srl $0, $0, 3\n\t" \ + "srl $0, $0, 19\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned int _zzq_args[6]; \ + volatile unsigned int _zzq_result; \ + _zzq_args[0] = (unsigned int)(_zzq_request); \ + _zzq_args[1] = (unsigned int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned int)(_zzq_arg5); \ + __asm__ volatile("move $11, %1\n\t" /*default*/ \ + "move $12, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* T3 = client_request ( T4 ) */ \ + "or $13, $13, $13\n\t" \ + "move %0, $11\n\t" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "$11", "$12", "memory"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* %t9 = guest_NRADDR */ \ + "or $14, $14, $14\n\t" \ + "move %0, $11" /*result*/ \ + : "=r" (__addr) \ + : \ + : "$11" \ + ); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_T9 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir *%t9 */ \ + "or $15, $15, $15\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or $11, $11, $11\n\t" \ + ); \ + } while (0) + + +#endif /* PLAT_mips32_linux */ + +/* ------------------------- mips64-linux ---------------- */ + +#if defined(PLAT_mips64_linux) + +typedef + struct { + unsigned long nraddr; /* where's the code? */ + } + OrigFn; + +/* dsll $0,$0, 3 + * dsll $0,$0, 13 + * dsll $0,$0, 29 + * dsll $0,$0, 19*/ +#define __SPECIAL_INSTRUCTION_PREAMBLE \ + "dsll $0,$0, 3 ; dsll $0,$0,13\n\t" \ + "dsll $0,$0,29 ; dsll $0,$0,19\n\t" + +#define VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + _zzq_default, _zzq_request, \ + _zzq_arg1, _zzq_arg2, _zzq_arg3, _zzq_arg4, _zzq_arg5) \ + __extension__ \ + ({ volatile unsigned long int _zzq_args[6]; \ + volatile unsigned long int _zzq_result; \ + _zzq_args[0] = (unsigned long int)(_zzq_request); \ + _zzq_args[1] = (unsigned long int)(_zzq_arg1); \ + _zzq_args[2] = (unsigned long int)(_zzq_arg2); \ + _zzq_args[3] = (unsigned long int)(_zzq_arg3); \ + _zzq_args[4] = (unsigned long int)(_zzq_arg4); \ + _zzq_args[5] = (unsigned long int)(_zzq_arg5); \ + __asm__ volatile("move $11, %1\n\t" /*default*/ \ + "move $12, %2\n\t" /*ptr*/ \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* $11 = client_request ( $12 ) */ \ + "or $13, $13, $13\n\t" \ + "move %0, $11\n\t" /*result*/ \ + : "=r" (_zzq_result) \ + : "r" (_zzq_default), "r" (&_zzq_args[0]) \ + : "$11", "$12", "memory"); \ + _zzq_result; \ + }) + +#define VALGRIND_GET_NR_CONTEXT(_zzq_rlval) \ + { volatile OrigFn* _zzq_orig = &(_zzq_rlval); \ + volatile unsigned long int __addr; \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + /* $11 = guest_NRADDR */ \ + "or $14, $14, $14\n\t" \ + "move %0, $11" /*result*/ \ + : "=r" (__addr) \ + : \ + : "$11"); \ + _zzq_orig->nraddr = __addr; \ + } + +#define VALGRIND_CALL_NOREDIR_T9 \ + __SPECIAL_INSTRUCTION_PREAMBLE \ + /* call-noredir $25 */ \ + "or $15, $15, $15\n\t" + +#define VALGRIND_VEX_INJECT_IR() \ + do { \ + __asm__ volatile(__SPECIAL_INSTRUCTION_PREAMBLE \ + "or $11, $11, $11\n\t" \ + ); \ + } while (0) + +#endif /* PLAT_mips64_linux */ + +/* Insert assembly code for other platforms here... */ + +#endif /* NVALGRIND */ + + +/* ------------------------------------------------------------------ */ +/* PLATFORM SPECIFICS for FUNCTION WRAPPING. This is all very */ +/* ugly. It's the least-worst tradeoff I can think of. */ +/* ------------------------------------------------------------------ */ + +/* This section defines magic (a.k.a appalling-hack) macros for doing + guaranteed-no-redirection macros, so as to get from function + wrappers to the functions they are wrapping. The whole point is to + construct standard call sequences, but to do the call itself with a + special no-redirect call pseudo-instruction that the JIT + understands and handles specially. This section is long and + repetitious, and I can't see a way to make it shorter. + + The naming scheme is as follows: + + CALL_FN_{W,v}_{v,W,WW,WWW,WWWW,5W,6W,7W,etc} + + 'W' stands for "word" and 'v' for "void". Hence there are + different macros for calling arity 0, 1, 2, 3, 4, etc, functions, + and for each, the possibility of returning a word-typed result, or + no result. +*/ + +/* Use these to write the name of your wrapper. NOTE: duplicates + VG_WRAP_FUNCTION_Z{U,Z} in pub_tool_redir.h. NOTE also: inserts + the default behaviour equivalance class tag "0000" into the name. + See pub_tool_redir.h for details -- normally you don't need to + think about this, though. */ + +/* Use an extra level of macroisation so as to ensure the soname/fnname + args are fully macro-expanded before pasting them together. */ +#define VG_CONCAT4(_aa,_bb,_cc,_dd) _aa##_bb##_cc##_dd + +#define I_WRAP_SONAME_FNNAME_ZU(soname,fnname) \ + VG_CONCAT4(_vgw00000ZU_,soname,_,fnname) + +#define I_WRAP_SONAME_FNNAME_ZZ(soname,fnname) \ + VG_CONCAT4(_vgw00000ZZ_,soname,_,fnname) + +/* Use this macro from within a wrapper function to collect the + context (address and possibly other info) of the original function. + Once you have that you can then use it in one of the CALL_FN_ + macros. The type of the argument _lval is OrigFn. */ +#define VALGRIND_GET_ORIG_FN(_lval) VALGRIND_GET_NR_CONTEXT(_lval) + +/* Also provide end-user facilities for function replacement, rather + than wrapping. A replacement function differs from a wrapper in + that it has no way to get hold of the original function being + called, and hence no way to call onwards to it. In a replacement + function, VALGRIND_GET_ORIG_FN always returns zero. */ + +#define I_REPLACE_SONAME_FNNAME_ZU(soname,fnname) \ + VG_CONCAT4(_vgr00000ZU_,soname,_,fnname) + +#define I_REPLACE_SONAME_FNNAME_ZZ(soname,fnname) \ + VG_CONCAT4(_vgr00000ZZ_,soname,_,fnname) + +/* Derivatives of the main macros below, for calling functions + returning void. */ + +#define CALL_FN_v_v(fnptr) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_v(_junk,fnptr); } while (0) + +#define CALL_FN_v_W(fnptr, arg1) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_W(_junk,fnptr,arg1); } while (0) + +#define CALL_FN_v_WW(fnptr, arg1,arg2) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WW(_junk,fnptr,arg1,arg2); } while (0) + +#define CALL_FN_v_WWW(fnptr, arg1,arg2,arg3) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWW(_junk,fnptr,arg1,arg2,arg3); } while (0) + +#define CALL_FN_v_WWWW(fnptr, arg1,arg2,arg3,arg4) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_WWWW(_junk,fnptr,arg1,arg2,arg3,arg4); } while (0) + +#define CALL_FN_v_5W(fnptr, arg1,arg2,arg3,arg4,arg5) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_5W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5); } while (0) + +#define CALL_FN_v_6W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_6W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6); } while (0) + +#define CALL_FN_v_7W(fnptr, arg1,arg2,arg3,arg4,arg5,arg6,arg7) \ + do { volatile unsigned long _junk; \ + CALL_FN_W_7W(_junk,fnptr,arg1,arg2,arg3,arg4,arg5,arg6,arg7); } while (0) + +/* ----------------- x86-{linux,darwin,solaris} ---------------- */ + +#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \ + || defined(PLAT_x86_solaris) + +/* These regs are trashed by the hidden call. No need to mention eax + as gcc can already see that, plus causes gcc to bomb. */ +#define __CALLER_SAVED_REGS /*"eax"*/ "ecx", "edx" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "movl %%esp,%%edi\n\t" \ + "andl $0xfffffff0,%%esp\n\t" +#define VALGRIND_RESTORE_STACK \ + "movl %%edi,%%esp\n\t" + +/* These CALL_FN_ macros assume that on x86-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $12, %%esp\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $8, %%esp\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "subl $4, %%esp\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "pushl 48(%%eax)\n\t" \ + "pushl 44(%%eax)\n\t" \ + "pushl 40(%%eax)\n\t" \ + "pushl 36(%%eax)\n\t" \ + "pushl 32(%%eax)\n\t" \ + "pushl 28(%%eax)\n\t" \ + "pushl 24(%%eax)\n\t" \ + "pushl 20(%%eax)\n\t" \ + "pushl 16(%%eax)\n\t" \ + "pushl 12(%%eax)\n\t" \ + "pushl 8(%%eax)\n\t" \ + "pushl 4(%%eax)\n\t" \ + "movl (%%eax), %%eax\n\t" /* target->%eax */ \ + VALGRIND_CALL_NOREDIR_EAX \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "edi" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_x86_linux || PLAT_x86_darwin || PLAT_x86_solaris */ + +/* ---------------- amd64-{linux,darwin,solaris} --------------- */ + +#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \ + || defined(PLAT_amd64_solaris) + +/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS /*"rax",*/ "rcx", "rdx", "rsi", \ + "rdi", "r8", "r9", "r10", "r11" + +/* This is all pretty complex. It's so as to make stack unwinding + work reliably. See bug 243270. The basic problem is the sub and + add of 128 of %rsp in all of the following macros. If gcc believes + the CFA is in %rsp, then unwinding may fail, because what's at the + CFA is not what gcc "expected" when it constructs the CFIs for the + places where the macros are instantiated. + + But we can't just add a CFI annotation to increase the CFA offset + by 128, to match the sub of 128 from %rsp, because we don't know + whether gcc has chosen %rsp as the CFA at that point, or whether it + has chosen some other register (eg, %rbp). In the latter case, + adding a CFI annotation to change the CFA offset is simply wrong. + + So the solution is to get hold of the CFA using + __builtin_dwarf_cfa(), put it in a known register, and add a + CFI annotation to say what the register is. We choose %rbp for + this (perhaps perversely), because: + + (1) %rbp is already subject to unwinding. If a new register was + chosen then the unwinder would have to unwind it in all stack + traces, which is expensive, and + + (2) %rbp is already subject to precise exception updates in the + JIT. If a new register was chosen, we'd have to have precise + exceptions for it too, which reduces performance of the + generated code. + + However .. one extra complication. We can't just whack the result + of __builtin_dwarf_cfa() into %rbp and then add %rbp to the + list of trashed registers at the end of the inline assembly + fragments; gcc won't allow %rbp to appear in that list. Hence + instead we need to stash %rbp in %r15 for the duration of the asm, + and say that %r15 is trashed instead. gcc seems happy to go with + that. + + Oh .. and this all needs to be conditionalised so that it is + unchanged from before this commit, when compiled with older gccs + that don't support __builtin_dwarf_cfa. Furthermore, since + this header file is freestanding, it has to be independent of + config.h, and so the following conditionalisation cannot depend on + configure time checks. + + Although it's not clear from + 'defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM)', + this expression excludes Darwin. + .cfi directives in Darwin assembly appear to be completely + different and I haven't investigated how they work. + + For even more entertainment value, note we have to use the + completely undocumented __builtin_dwarf_cfa(), which appears to + really compute the CFA, whereas __builtin_frame_address(0) claims + to but actually doesn't. See + https://bugs.kde.org/show_bug.cgi?id=243270#c47 +*/ +#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) +# define __FRAME_POINTER \ + ,"r"(__builtin_dwarf_cfa()) +# define VALGRIND_CFI_PROLOGUE \ + "movq %%rbp, %%r15\n\t" \ + "movq %2, %%rbp\n\t" \ + ".cfi_remember_state\n\t" \ + ".cfi_def_cfa rbp, 0\n\t" +# define VALGRIND_CFI_EPILOGUE \ + "movq %%r15, %%rbp\n\t" \ + ".cfi_restore_state\n\t" +#else +# define __FRAME_POINTER +# define VALGRIND_CFI_PROLOGUE +# define VALGRIND_CFI_EPILOGUE +#endif + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "movq %%rsp,%%r14\n\t" \ + "andq $0xfffffffffffffff0,%%rsp\n\t" +#define VALGRIND_RESTORE_STACK \ + "movq %%r14,%%rsp\n\t" + +/* These CALL_FN_ macros assume that on amd64-linux, sizeof(unsigned + long) == 8. */ + +/* NB 9 Sept 07. There is a nasty kludge here in all these CALL_FN_ + macros. In order not to trash the stack redzone, we need to drop + %rsp by 128 before the hidden call, and restore afterwards. The + nastyness is that it is only by luck that the stack still appears + to be unwindable during the hidden call - since then the behaviour + of any routine using this macro does not match what the CFI data + says. Sigh. + + Why is this important? Imagine that a wrapper has a stack + allocated local, and passes to the hidden call, a pointer to it. + Because gcc does not know about the hidden call, it may allocate + that local in the redzone. Unfortunately the hidden call may then + trash it before it comes to use it. So we must step clear of the + redzone, for the duration of the hidden call, to make it safe. + + Probably the same problem afflicts the other redzone-style ABIs too + (ppc64-linux); but for those, the stack is + self describing (none of this CFI nonsense) so at least messing + with the stack pointer doesn't give a danger of non-unwindable + stack. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $136,%%rsp\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + VALGRIND_ALIGN_STACK \ + "subq $128,%%rsp\n\t" \ + "pushq 96(%%rax)\n\t" \ + "pushq 88(%%rax)\n\t" \ + "pushq 80(%%rax)\n\t" \ + "pushq 72(%%rax)\n\t" \ + "pushq 64(%%rax)\n\t" \ + "pushq 56(%%rax)\n\t" \ + "movq 48(%%rax), %%r9\n\t" \ + "movq 40(%%rax), %%r8\n\t" \ + "movq 32(%%rax), %%rcx\n\t" \ + "movq 24(%%rax), %%rdx\n\t" \ + "movq 16(%%rax), %%rsi\n\t" \ + "movq 8(%%rax), %%rdi\n\t" \ + "movq (%%rax), %%rax\n\t" /* target->%rax */ \ + VALGRIND_CALL_NOREDIR_RAX \ + VALGRIND_RESTORE_STACK \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=a" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r14", "r15" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_amd64_linux || PLAT_amd64_darwin || PLAT_amd64_solaris */ + +/* ------------------------ ppc32-linux ------------------------ */ + +#if defined(PLAT_ppc32_linux) + +/* This is useful for finding out about the on-stack stuff: + + extern int f9 ( int,int,int,int,int,int,int,int,int ); + extern int f10 ( int,int,int,int,int,int,int,int,int,int ); + extern int f11 ( int,int,int,int,int,int,int,int,int,int,int ); + extern int f12 ( int,int,int,int,int,int,int,int,int,int,int,int ); + + int g9 ( void ) { + return f9(11,22,33,44,55,66,77,88,99); + } + int g10 ( void ) { + return f10(11,22,33,44,55,66,77,88,99,110); + } + int g11 ( void ) { + return f11(11,22,33,44,55,66,77,88,99,110,121); + } + int g12 ( void ) { + return f12(11,22,33,44,55,66,77,88,99,110,121,132); + } +*/ + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rlwinm 1,1,0,0,27\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc32-linux, + sizeof(unsigned long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-16\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "addi 1,1,-32\n\t" \ + /* arg12 */ \ + "lwz 3,48(11)\n\t" \ + "stw 3,20(1)\n\t" \ + /* arg11 */ \ + "lwz 3,44(11)\n\t" \ + "stw 3,16(1)\n\t" \ + /* arg10 */ \ + "lwz 3,40(11)\n\t" \ + "stw 3,12(1)\n\t" \ + /* arg9 */ \ + "lwz 3,36(11)\n\t" \ + "stw 3,8(1)\n\t" \ + /* args1-8 */ \ + "lwz 3,4(11)\n\t" /* arg1->r3 */ \ + "lwz 4,8(11)\n\t" \ + "lwz 5,12(11)\n\t" \ + "lwz 6,16(11)\n\t" /* arg4->r6 */ \ + "lwz 7,20(11)\n\t" \ + "lwz 8,24(11)\n\t" \ + "lwz 9,28(11)\n\t" \ + "lwz 10,32(11)\n\t" /* arg8->r10 */ \ + "lwz 11,0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + VALGRIND_RESTORE_STACK \ + "mr %0,3" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc32_linux */ + +/* ------------------------ ppc64-linux ------------------------ */ + +#if defined(PLAT_ppc64be_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rldicr 1,1,0,59\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 11,%1\n\t" \ + "std 2,-16(11)\n\t" /* save tocptr */ \ + "ld 2,-8(11)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(11)\n\t" \ + "std 3,136(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(11)\n\t" \ + "std 3,128(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(11)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(11)\n\t" \ + "std 3,112(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(11)\n\t" /* arg1->r3 */ \ + "ld 4, 16(11)\n\t" /* arg2->r4 */ \ + "ld 5, 24(11)\n\t" /* arg3->r5 */ \ + "ld 6, 32(11)\n\t" /* arg4->r6 */ \ + "ld 7, 40(11)\n\t" /* arg5->r7 */ \ + "ld 8, 48(11)\n\t" /* arg6->r8 */ \ + "ld 9, 56(11)\n\t" /* arg7->r9 */ \ + "ld 10, 64(11)\n\t" /* arg8->r10 */ \ + "ld 11, 0(11)\n\t" /* target->r11 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R11 \ + "mr 11,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(11)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64be_linux */ + +/* ------------------------- ppc64le-linux ----------------------- */ +#if defined(PLAT_ppc64le_linux) + +/* ARGREGS: r3 r4 r5 r6 r7 r8 r9 r10 (the rest on stack somewhere) */ + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "lr", "ctr", "xer", \ + "cr0", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7", \ + "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", \ + "r11", "r12", "r13" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +#define VALGRIND_ALIGN_STACK \ + "mr 28,1\n\t" \ + "rldicr 1,1,0,59\n\t" +#define VALGRIND_RESTORE_STACK \ + "mr 1,28\n\t" + +/* These CALL_FN_ macros assume that on ppc64-linux, sizeof(unsigned + long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+0]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+1]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+2]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+3]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+4]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+5]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+6]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+7]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+8]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+9]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+10]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-128\n\t" /* expand stack frame */ \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+11]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg11 */ \ + "ld 3,88(12)\n\t" \ + "std 3,112(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3+12]; \ + volatile unsigned long _res; \ + /* _argvec[0] holds current r2 across the call */ \ + _argvec[1] = (unsigned long)_orig.r2; \ + _argvec[2] = (unsigned long)_orig.nraddr; \ + _argvec[2+1] = (unsigned long)arg1; \ + _argvec[2+2] = (unsigned long)arg2; \ + _argvec[2+3] = (unsigned long)arg3; \ + _argvec[2+4] = (unsigned long)arg4; \ + _argvec[2+5] = (unsigned long)arg5; \ + _argvec[2+6] = (unsigned long)arg6; \ + _argvec[2+7] = (unsigned long)arg7; \ + _argvec[2+8] = (unsigned long)arg8; \ + _argvec[2+9] = (unsigned long)arg9; \ + _argvec[2+10] = (unsigned long)arg10; \ + _argvec[2+11] = (unsigned long)arg11; \ + _argvec[2+12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "mr 12,%1\n\t" \ + "std 2,-16(12)\n\t" /* save tocptr */ \ + "ld 2,-8(12)\n\t" /* use nraddr's tocptr */ \ + "addi 1,1,-144\n\t" /* expand stack frame */ \ + /* arg12 */ \ + "ld 3,96(12)\n\t" \ + "std 3,120(1)\n\t" \ + /* arg11 */ \ + "ld 3,88(12)\n\t" \ + "std 3,112(1)\n\t" \ + /* arg10 */ \ + "ld 3,80(12)\n\t" \ + "std 3,104(1)\n\t" \ + /* arg9 */ \ + "ld 3,72(12)\n\t" \ + "std 3,96(1)\n\t" \ + /* args1-8 */ \ + "ld 3, 8(12)\n\t" /* arg1->r3 */ \ + "ld 4, 16(12)\n\t" /* arg2->r4 */ \ + "ld 5, 24(12)\n\t" /* arg3->r5 */ \ + "ld 6, 32(12)\n\t" /* arg4->r6 */ \ + "ld 7, 40(12)\n\t" /* arg5->r7 */ \ + "ld 8, 48(12)\n\t" /* arg6->r8 */ \ + "ld 9, 56(12)\n\t" /* arg7->r9 */ \ + "ld 10, 64(12)\n\t" /* arg8->r10 */ \ + "ld 12, 0(12)\n\t" /* target->r12 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R12 \ + "mr 12,%1\n\t" \ + "mr %0,3\n\t" \ + "ld 2,-16(12)\n\t" /* restore tocptr */ \ + VALGRIND_RESTORE_STACK \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[2]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r28" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_ppc64le_linux */ + +/* ------------------------- arm-linux ------------------------- */ + +#if defined(PLAT_arm_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "r0", "r1", "r2", "r3","r4", "r12", "r14" + +/* Macros to save and align the stack before making a function + call and restore it afterwards as gcc may not keep the stack + pointer aligned if it doesn't realise calls are being made + to other functions. */ + +/* This is a bit tricky. We store the original stack pointer in r10 + as it is callee-saves. gcc doesn't allow the use of r11 for some + reason. Also, we can't directly "bic" the stack pointer in thumb + mode since r13 isn't an allowed register number in that context. + So use r4 as a temporary, since that is about to get trashed + anyway, just after each use of this macro. Side effect is we need + to be very careful about any future changes, since + VALGRIND_ALIGN_STACK simply assumes r4 is usable. */ +#define VALGRIND_ALIGN_STACK \ + "mov r10, sp\n\t" \ + "mov r4, sp\n\t" \ + "bic r4, r4, #7\n\t" \ + "mov sp, r4\n\t" +#define VALGRIND_RESTORE_STACK \ + "mov sp, r10\n\t" + +/* These CALL_FN_ macros assume that on arm-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "push {r0} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "push {r0, r1} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "push {r0, r1, r2} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "push {r0, r1, r2, r3} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #40] \n\t" \ + "push {r0} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #4 \n\t" \ + "ldr r0, [%1, #40] \n\t" \ + "ldr r1, [%1, #44] \n\t" \ + "push {r0, r1} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr r0, [%1, #40] \n\t" \ + "ldr r1, [%1, #44] \n\t" \ + "ldr r2, [%1, #48] \n\t" \ + "push {r0, r1, r2} \n\t" \ + "ldr r0, [%1, #20] \n\t" \ + "ldr r1, [%1, #24] \n\t" \ + "ldr r2, [%1, #28] \n\t" \ + "ldr r3, [%1, #32] \n\t" \ + "ldr r4, [%1, #36] \n\t" \ + "push {r0, r1, r2, r3, r4} \n\t" \ + "ldr r0, [%1, #4] \n\t" \ + "ldr r1, [%1, #8] \n\t" \ + "ldr r2, [%1, #12] \n\t" \ + "ldr r3, [%1, #16] \n\t" \ + "ldr r4, [%1] \n\t" /* target->r4 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_R4 \ + VALGRIND_RESTORE_STACK \ + "mov %0, r0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "r10" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_arm_linux */ + +/* ------------------------ arm64-linux ------------------------ */ + +#if defined(PLAT_arm64_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS \ + "x0", "x1", "x2", "x3","x4", "x5", "x6", "x7", "x8", "x9", \ + "x10", "x11", "x12", "x13", "x14", "x15", "x16", "x17", \ + "x18", "x19", "x20", "x30", \ + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8", "v9", \ + "v10", "v11", "v12", "v13", "v14", "v15", "v16", "v17", \ + "v18", "v19", "v20", "v21", "v22", "v23", "v24", "v25", \ + "v26", "v27", "v28", "v29", "v30", "v31" + +/* x21 is callee-saved, so we can use it to save and restore SP around + the hidden call. */ +#define VALGRIND_ALIGN_STACK \ + "mov x21, sp\n\t" \ + "bic sp, x21, #15\n\t" +#define VALGRIND_RESTORE_STACK \ + "mov sp, x21\n\t" + +/* These CALL_FN_ macros assume that on arm64-linux, + sizeof(unsigned long) == 8. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x20 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x20 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x30 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1, #88] \n\t" \ + "str x8, [sp, #16] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10,arg11, \ + arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + VALGRIND_ALIGN_STACK \ + "sub sp, sp, #0x30 \n\t" \ + "ldr x0, [%1, #8] \n\t" \ + "ldr x1, [%1, #16] \n\t" \ + "ldr x2, [%1, #24] \n\t" \ + "ldr x3, [%1, #32] \n\t" \ + "ldr x4, [%1, #40] \n\t" \ + "ldr x5, [%1, #48] \n\t" \ + "ldr x6, [%1, #56] \n\t" \ + "ldr x7, [%1, #64] \n\t" \ + "ldr x8, [%1, #72] \n\t" \ + "str x8, [sp, #0] \n\t" \ + "ldr x8, [%1, #80] \n\t" \ + "str x8, [sp, #8] \n\t" \ + "ldr x8, [%1, #88] \n\t" \ + "str x8, [sp, #16] \n\t" \ + "ldr x8, [%1, #96] \n\t" \ + "str x8, [sp, #24] \n\t" \ + "ldr x8, [%1] \n\t" /* target->x8 */ \ + VALGRIND_BRANCH_AND_LINK_TO_NOREDIR_X8 \ + VALGRIND_RESTORE_STACK \ + "mov %0, x0" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS, "x21" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_arm64_linux */ + +/* ------------------------- s390x-linux ------------------------- */ + +#if defined(PLAT_s390x_linux) + +/* Similar workaround as amd64 (see above), but we use r11 as frame + pointer and save the old r11 in r7. r11 might be used for + argvec, therefore we copy argvec in r1 since r1 is clobbered + after the call anyway. */ +#if defined(__GNUC__) && defined(__GCC_HAVE_DWARF2_CFI_ASM) +# define __FRAME_POINTER \ + ,"d"(__builtin_dwarf_cfa()) +# define VALGRIND_CFI_PROLOGUE \ + ".cfi_remember_state\n\t" \ + "lgr 1,%1\n\t" /* copy the argvec pointer in r1 */ \ + "lgr 7,11\n\t" \ + "lgr 11,%2\n\t" \ + ".cfi_def_cfa r11, 0\n\t" +# define VALGRIND_CFI_EPILOGUE \ + "lgr 11, 7\n\t" \ + ".cfi_restore_state\n\t" +#else +# define __FRAME_POINTER +# define VALGRIND_CFI_PROLOGUE \ + "lgr 1,%1\n\t" +# define VALGRIND_CFI_EPILOGUE +#endif + +/* Nb: On s390 the stack pointer is properly aligned *at all times* + according to the s390 GCC maintainer. (The ABI specification is not + precise in this regard.) Therefore, VALGRIND_ALIGN_STACK and + VALGRIND_RESTORE_STACK are not defined here. */ + +/* These regs are trashed by the hidden call. Note that we overwrite + r14 in s390_irgen_noredir (VEX/priv/guest_s390_irgen.c) to give the + function a proper return address. All others are ABI defined call + clobbers. */ +#define __CALLER_SAVED_REGS "0","1","2","3","4","5","14", \ + "f0","f1","f2","f3","f4","f5","f6","f7" + +/* Nb: Although r11 is modified in the asm snippets below (inside + VALGRIND_CFI_PROLOGUE) it is not listed in the clobber section, for + two reasons: + (1) r11 is restored in VALGRIND_CFI_EPILOGUE, so effectively it is not + modified + (2) GCC will complain that r11 cannot appear inside a clobber section, + when compiled with -O -fno-omit-frame-pointer + */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 1, 0(1)\n\t" /* target->r1 */ \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "d" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +/* The call abi has the arguments in r2-r6 and stack */ +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1, arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1, arg2, arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1, arg2, arg3, arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1, arg2, arg3, arg4, arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-160\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,160\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-168\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,168\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-176\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,176\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-184\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,184\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-192\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,192\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-200\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,200\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10, arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-208\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "mvc 200(8,15), 88(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,208\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1, arg2, arg3, arg4, arg5, \ + arg6, arg7 ,arg8, arg9, arg10, arg11, arg12)\ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)arg1; \ + _argvec[2] = (unsigned long)arg2; \ + _argvec[3] = (unsigned long)arg3; \ + _argvec[4] = (unsigned long)arg4; \ + _argvec[5] = (unsigned long)arg5; \ + _argvec[6] = (unsigned long)arg6; \ + _argvec[7] = (unsigned long)arg7; \ + _argvec[8] = (unsigned long)arg8; \ + _argvec[9] = (unsigned long)arg9; \ + _argvec[10] = (unsigned long)arg10; \ + _argvec[11] = (unsigned long)arg11; \ + _argvec[12] = (unsigned long)arg12; \ + __asm__ volatile( \ + VALGRIND_CFI_PROLOGUE \ + "aghi 15,-216\n\t" \ + "lg 2, 8(1)\n\t" \ + "lg 3,16(1)\n\t" \ + "lg 4,24(1)\n\t" \ + "lg 5,32(1)\n\t" \ + "lg 6,40(1)\n\t" \ + "mvc 160(8,15), 48(1)\n\t" \ + "mvc 168(8,15), 56(1)\n\t" \ + "mvc 176(8,15), 64(1)\n\t" \ + "mvc 184(8,15), 72(1)\n\t" \ + "mvc 192(8,15), 80(1)\n\t" \ + "mvc 200(8,15), 88(1)\n\t" \ + "mvc 208(8,15), 96(1)\n\t" \ + "lg 1, 0(1)\n\t" \ + VALGRIND_CALL_NOREDIR_R1 \ + "lgr %0, 2\n\t" \ + "aghi 15,216\n\t" \ + VALGRIND_CFI_EPILOGUE \ + : /*out*/ "=d" (_res) \ + : /*in*/ "a" (&_argvec[0]) __FRAME_POINTER \ + : /*trash*/ "cc", "memory", __CALLER_SAVED_REGS,"6","7" \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + + +#endif /* PLAT_s390x_linux */ + +/* ------------------------- mips32-linux ----------------------- */ + +#if defined(PLAT_mips32_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ +"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ +"$25", "$31" + +/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16\n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" /* arg1*/ \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "subu $29, $29, 16 \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 16 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 24\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 24 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 32\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "nop\n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 32 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 32\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 32 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 40\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 40 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 40\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 40 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 48\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 48 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 48\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 44(%1) \n\t" \ + "sw $4, 40($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 48 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "subu $29, $29, 8 \n\t" \ + "sw $28, 0($29) \n\t" \ + "sw $31, 4($29) \n\t" \ + "lw $4, 20(%1) \n\t" \ + "subu $29, $29, 56\n\t" \ + "sw $4, 16($29) \n\t" \ + "lw $4, 24(%1) \n\t" \ + "sw $4, 20($29) \n\t" \ + "lw $4, 28(%1) \n\t" \ + "sw $4, 24($29) \n\t" \ + "lw $4, 32(%1) \n\t" \ + "sw $4, 28($29) \n\t" \ + "lw $4, 36(%1) \n\t" \ + "sw $4, 32($29) \n\t" \ + "lw $4, 40(%1) \n\t" \ + "sw $4, 36($29) \n\t" \ + "lw $4, 44(%1) \n\t" \ + "sw $4, 40($29) \n\t" \ + "lw $4, 48(%1) \n\t" \ + "sw $4, 44($29) \n\t" \ + "lw $4, 4(%1) \n\t" \ + "lw $5, 8(%1) \n\t" \ + "lw $6, 12(%1) \n\t" \ + "lw $7, 16(%1) \n\t" \ + "lw $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "addu $29, $29, 56 \n\t" \ + "lw $28, 0($29) \n\t" \ + "lw $31, 4($29) \n\t" \ + "addu $29, $29, 8 \n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_mips32_linux */ + +/* ------------------------- mips64-linux ------------------------- */ + +#if defined(PLAT_mips64_linux) + +/* These regs are trashed by the hidden call. */ +#define __CALLER_SAVED_REGS "$2", "$3", "$4", "$5", "$6", \ +"$7", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24", \ +"$25", "$31" + +/* These CALL_FN_ macros assume that on mips-linux, sizeof(unsigned + long) == 4. */ + +#define CALL_FN_W_v(lval, orig) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[1]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + __asm__ volatile( \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "0" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_W(lval, orig, arg1) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[2]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" /* arg1*/ \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WW(lval, orig, arg1,arg2) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[3]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWW(lval, orig, arg1,arg2,arg3) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[4]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_WWWW(lval, orig, arg1,arg2,arg3,arg4) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[5]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_5W(lval, orig, arg1,arg2,arg3,arg4,arg5) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[6]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_6W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[7]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_7W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[8]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_8W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[9]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + __asm__ volatile( \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1) \n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_9W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[10]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + __asm__ volatile( \ + "dsubu $29, $29, 8\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 8\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_10W(lval, orig, arg1,arg2,arg3,arg4,arg5,arg6, \ + arg7,arg8,arg9,arg10) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[11]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + __asm__ volatile( \ + "dsubu $29, $29, 16\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 16\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_11W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[12]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + __asm__ volatile( \ + "dsubu $29, $29, 24\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 88(%1)\n\t" \ + "sd $4, 16($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 24\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#define CALL_FN_W_12W(lval, orig, arg1,arg2,arg3,arg4,arg5, \ + arg6,arg7,arg8,arg9,arg10, \ + arg11,arg12) \ + do { \ + volatile OrigFn _orig = (orig); \ + volatile unsigned long _argvec[13]; \ + volatile unsigned long _res; \ + _argvec[0] = (unsigned long)_orig.nraddr; \ + _argvec[1] = (unsigned long)(arg1); \ + _argvec[2] = (unsigned long)(arg2); \ + _argvec[3] = (unsigned long)(arg3); \ + _argvec[4] = (unsigned long)(arg4); \ + _argvec[5] = (unsigned long)(arg5); \ + _argvec[6] = (unsigned long)(arg6); \ + _argvec[7] = (unsigned long)(arg7); \ + _argvec[8] = (unsigned long)(arg8); \ + _argvec[9] = (unsigned long)(arg9); \ + _argvec[10] = (unsigned long)(arg10); \ + _argvec[11] = (unsigned long)(arg11); \ + _argvec[12] = (unsigned long)(arg12); \ + __asm__ volatile( \ + "dsubu $29, $29, 32\n\t" \ + "ld $4, 72(%1)\n\t" \ + "sd $4, 0($29)\n\t" \ + "ld $4, 80(%1)\n\t" \ + "sd $4, 8($29)\n\t" \ + "ld $4, 88(%1)\n\t" \ + "sd $4, 16($29)\n\t" \ + "ld $4, 96(%1)\n\t" \ + "sd $4, 24($29)\n\t" \ + "ld $4, 8(%1)\n\t" \ + "ld $5, 16(%1)\n\t" \ + "ld $6, 24(%1)\n\t" \ + "ld $7, 32(%1)\n\t" \ + "ld $8, 40(%1)\n\t" \ + "ld $9, 48(%1)\n\t" \ + "ld $10, 56(%1)\n\t" \ + "ld $11, 64(%1)\n\t" \ + "ld $25, 0(%1)\n\t" /* target->t9 */ \ + VALGRIND_CALL_NOREDIR_T9 \ + "daddu $29, $29, 32\n\t" \ + "move %0, $2\n" \ + : /*out*/ "=r" (_res) \ + : /*in*/ "r" (&_argvec[0]) \ + : /*trash*/ "memory", __CALLER_SAVED_REGS \ + ); \ + lval = (__typeof__(lval)) _res; \ + } while (0) + +#endif /* PLAT_mips64_linux */ + +/* ------------------------------------------------------------------ */ +/* ARCHITECTURE INDEPENDENT MACROS for CLIENT REQUESTS. */ +/* */ +/* ------------------------------------------------------------------ */ + +/* Some request codes. There are many more of these, but most are not + exposed to end-user view. These are the public ones, all of the + form 0x1000 + small_number. + + Core ones are in the range 0x00000000--0x0000ffff. The non-public + ones start at 0x2000. +*/ + +/* These macros are used by tools -- they must be public, but don't + embed them into other programs. */ +#define VG_USERREQ_TOOL_BASE(a,b) \ + ((unsigned int)(((a)&0xff) << 24 | ((b)&0xff) << 16)) +#define VG_IS_TOOL_USERREQ(a, b, v) \ + (VG_USERREQ_TOOL_BASE(a,b) == ((v) & 0xffff0000)) + +/* !! ABIWARNING !! ABIWARNING !! ABIWARNING !! ABIWARNING !! + This enum comprises an ABI exported by Valgrind to programs + which use client requests. DO NOT CHANGE THE NUMERIC VALUES OF THESE + ENTRIES, NOR DELETE ANY -- add new ones at the end of the most + relevant group. */ +typedef + enum { VG_USERREQ__RUNNING_ON_VALGRIND = 0x1001, + VG_USERREQ__DISCARD_TRANSLATIONS = 0x1002, + + /* These allow any function to be called from the simulated + CPU but run on the real CPU. Nb: the first arg passed to + the function is always the ThreadId of the running + thread! So CLIENT_CALL0 actually requires a 1 arg + function, etc. */ + VG_USERREQ__CLIENT_CALL0 = 0x1101, + VG_USERREQ__CLIENT_CALL1 = 0x1102, + VG_USERREQ__CLIENT_CALL2 = 0x1103, + VG_USERREQ__CLIENT_CALL3 = 0x1104, + + /* Can be useful in regression testing suites -- eg. can + send Valgrind's output to /dev/null and still count + errors. */ + VG_USERREQ__COUNT_ERRORS = 0x1201, + + /* Allows the client program and/or gdbserver to execute a monitor + command. */ + VG_USERREQ__GDB_MONITOR_COMMAND = 0x1202, + + /* These are useful and can be interpreted by any tool that + tracks malloc() et al, by using vg_replace_malloc.c. */ + VG_USERREQ__MALLOCLIKE_BLOCK = 0x1301, + VG_USERREQ__RESIZEINPLACE_BLOCK = 0x130b, + VG_USERREQ__FREELIKE_BLOCK = 0x1302, + /* Memory pool support. */ + VG_USERREQ__CREATE_MEMPOOL = 0x1303, + VG_USERREQ__DESTROY_MEMPOOL = 0x1304, + VG_USERREQ__MEMPOOL_ALLOC = 0x1305, + VG_USERREQ__MEMPOOL_FREE = 0x1306, + VG_USERREQ__MEMPOOL_TRIM = 0x1307, + VG_USERREQ__MOVE_MEMPOOL = 0x1308, + VG_USERREQ__MEMPOOL_CHANGE = 0x1309, + VG_USERREQ__MEMPOOL_EXISTS = 0x130a, + + /* Allow printfs to valgrind log. */ + /* The first two pass the va_list argument by value, which + assumes it is the same size as or smaller than a UWord, + which generally isn't the case. Hence are deprecated. + The second two pass the vargs by reference and so are + immune to this problem. */ + /* both :: char* fmt, va_list vargs (DEPRECATED) */ + VG_USERREQ__PRINTF = 0x1401, + VG_USERREQ__PRINTF_BACKTRACE = 0x1402, + /* both :: char* fmt, va_list* vargs */ + VG_USERREQ__PRINTF_VALIST_BY_REF = 0x1403, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF = 0x1404, + + /* Stack support. */ + VG_USERREQ__STACK_REGISTER = 0x1501, + VG_USERREQ__STACK_DEREGISTER = 0x1502, + VG_USERREQ__STACK_CHANGE = 0x1503, + + /* Wine support */ + VG_USERREQ__LOAD_PDB_DEBUGINFO = 0x1601, + + /* Querying of debug info. */ + VG_USERREQ__MAP_IP_TO_SRCLOC = 0x1701, + + /* Disable/enable error reporting level. Takes a single + Word arg which is the delta to this thread's error + disablement indicator. Hence 1 disables or further + disables errors, and -1 moves back towards enablement. + Other values are not allowed. */ + VG_USERREQ__CHANGE_ERR_DISABLEMENT = 0x1801, + + /* Some requests used for Valgrind internal, such as + self-test or self-hosting. */ + /* Initialise IR injection */ + VG_USERREQ__VEX_INIT_FOR_IRI = 0x1901, + /* Used by Inner Valgrind to inform Outer Valgrind where to + find the list of inner guest threads */ + VG_USERREQ__INNER_THREADS = 0x1902 + } Vg_ClientRequest; + +#if !defined(__GNUC__) +# define __extension__ /* */ +#endif + + +/* Returns the number of Valgrinds this code is running under. That + is, 0 if running natively, 1 if running under Valgrind, 2 if + running under Valgrind which is running under another Valgrind, + etc. */ +#define RUNNING_ON_VALGRIND \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* if not */, \ + VG_USERREQ__RUNNING_ON_VALGRIND, \ + 0, 0, 0, 0, 0) \ + + +/* Discard translation of code in the range [_qzz_addr .. _qzz_addr + + _qzz_len - 1]. Useful if you are debugging a JITter or some such, + since it provides a way to make sure valgrind will retranslate the + invalidated area. Returns no value. */ +#define VALGRIND_DISCARD_TRANSLATIONS(_qzz_addr,_qzz_len) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DISCARD_TRANSLATIONS, \ + _qzz_addr, _qzz_len, 0, 0, 0) + +#define VALGRIND_INNER_THREADS(_qzz_addr) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__INNER_THREADS, \ + _qzz_addr, 0, 0, 0, 0) + + +/* These requests are for getting Valgrind itself to print something. + Possibly with a backtrace. This is a really ugly hack. The return value + is the number of characters printed, excluding the "**** " part at the + start and the backtrace (if present). */ + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) +/* Modern GCC will optimize the static routine out if unused, + and unused attribute will shut down warnings about it. */ +static int VALGRIND_PRINTF(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +#endif +static int +#if defined(_MSC_VER) +__inline +#endif +VALGRIND_PRINTF(const char *format, ...) +{ +#if defined(NVALGRIND) + (void)format; + return 0; +#else /* NVALGRIND */ +#if defined(_MSC_VER) || defined(__MINGW64__) + uintptr_t _qzz_res; +#else + unsigned long _qzz_res; +#endif + va_list vargs; + va_start(vargs, format); +#if defined(_MSC_VER) || defined(__MINGW64__) + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_VALIST_BY_REF, + (uintptr_t)format, + (uintptr_t)&vargs, + 0, 0, 0); +#else + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_VALIST_BY_REF, + (unsigned long)format, + (unsigned long)&vargs, + 0, 0, 0); +#endif + va_end(vargs); + return (int)_qzz_res; +#endif /* NVALGRIND */ +} + +#if defined(__GNUC__) || defined(__INTEL_COMPILER) && !defined(_MSC_VER) +static int VALGRIND_PRINTF_BACKTRACE(const char *format, ...) + __attribute__((format(__printf__, 1, 2), __unused__)); +#endif +static int +#if defined(_MSC_VER) +__inline +#endif +VALGRIND_PRINTF_BACKTRACE(const char *format, ...) +{ +#if defined(NVALGRIND) + (void)format; + return 0; +#else /* NVALGRIND */ +#if defined(_MSC_VER) || defined(__MINGW64__) + uintptr_t _qzz_res; +#else + unsigned long _qzz_res; +#endif + va_list vargs; + va_start(vargs, format); +#if defined(_MSC_VER) || defined(__MINGW64__) + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, + (uintptr_t)format, + (uintptr_t)&vargs, + 0, 0, 0); +#else + _qzz_res = VALGRIND_DO_CLIENT_REQUEST_EXPR(0, + VG_USERREQ__PRINTF_BACKTRACE_VALIST_BY_REF, + (unsigned long)format, + (unsigned long)&vargs, + 0, 0, 0); +#endif + va_end(vargs); + return (int)_qzz_res; +#endif /* NVALGRIND */ +} + + +/* These requests allow control to move from the simulated CPU to the + real CPU, calling an arbitrary function. + + Note that the current ThreadId is inserted as the first argument. + So this call: + + VALGRIND_NON_SIMD_CALL2(f, arg1, arg2) + + requires f to have this signature: + + Word f(Word tid, Word arg1, Word arg2) + + where "Word" is a word-sized type. + + Note that these client requests are not entirely reliable. For example, + if you call a function with them that subsequently calls printf(), + there's a high chance Valgrind will crash. Generally, your prospects of + these working are made higher if the called function does not refer to + any global variables, and does not refer to any libc or other functions + (printf et al). Any kind of entanglement with libc or dynamic linking is + likely to have a bad outcome, for tricky reasons which we've grappled + with a lot in the past. +*/ +#define VALGRIND_NON_SIMD_CALL0(_qyy_fn) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL0, \ + _qyy_fn, \ + 0, 0, 0, 0) + +#define VALGRIND_NON_SIMD_CALL1(_qyy_fn, _qyy_arg1) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL1, \ + _qyy_fn, \ + _qyy_arg1, 0, 0, 0) + +#define VALGRIND_NON_SIMD_CALL2(_qyy_fn, _qyy_arg1, _qyy_arg2) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL2, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, 0, 0) + +#define VALGRIND_NON_SIMD_CALL3(_qyy_fn, _qyy_arg1, _qyy_arg2, _qyy_arg3) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0 /* default return */, \ + VG_USERREQ__CLIENT_CALL3, \ + _qyy_fn, \ + _qyy_arg1, _qyy_arg2, \ + _qyy_arg3, 0) + + +/* Counts the number of errors that have been recorded by a tool. Nb: + the tool must record the errors with VG_(maybe_record_error)() or + VG_(unique_error)() for them to be counted. */ +#define VALGRIND_COUNT_ERRORS \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR( \ + 0 /* default return */, \ + VG_USERREQ__COUNT_ERRORS, \ + 0, 0, 0, 0, 0) + +/* Several Valgrind tools (Memcheck, Massif, Helgrind, DRD) rely on knowing + when heap blocks are allocated in order to give accurate results. This + happens automatically for the standard allocator functions such as + malloc(), calloc(), realloc(), memalign(), new, new[], free(), delete, + delete[], etc. + + But if your program uses a custom allocator, this doesn't automatically + happen, and Valgrind will not do as well. For example, if you allocate + superblocks with mmap() and then allocates chunks of the superblocks, all + Valgrind's observations will be at the mmap() level and it won't know that + the chunks should be considered separate entities. In Memcheck's case, + that means you probably won't get heap block overrun detection (because + there won't be redzones marked as unaddressable) and you definitely won't + get any leak detection. + + The following client requests allow a custom allocator to be annotated so + that it can be handled accurately by Valgrind. + + VALGRIND_MALLOCLIKE_BLOCK marks a region of memory as having been allocated + by a malloc()-like function. For Memcheck (an illustrative case), this + does two things: + + - It records that the block has been allocated. This means any addresses + within the block mentioned in error messages will be + identified as belonging to the block. It also means that if the block + isn't freed it will be detected by the leak checker. + + - It marks the block as being addressable and undefined (if 'is_zeroed' is + not set), or addressable and defined (if 'is_zeroed' is set). This + controls how accesses to the block by the program are handled. + + 'addr' is the start of the usable block (ie. after any + redzone), 'sizeB' is its size. 'rzB' is the redzone size if the allocator + can apply redzones -- these are blocks of padding at the start and end of + each block. Adding redzones is recommended as it makes it much more likely + Valgrind will spot block overruns. `is_zeroed' indicates if the memory is + zeroed (or filled with another predictable value), as is the case for + calloc(). + + VALGRIND_MALLOCLIKE_BLOCK should be put immediately after the point where a + heap block -- that will be used by the client program -- is allocated. + It's best to put it at the outermost level of the allocator if possible; + for example, if you have a function my_alloc() which calls + internal_alloc(), and the client request is put inside internal_alloc(), + stack traces relating to the heap block will contain entries for both + my_alloc() and internal_alloc(), which is probably not what you want. + + For Memcheck users: if you use VALGRIND_MALLOCLIKE_BLOCK to carve out + custom blocks from within a heap block, B, that has been allocated with + malloc/calloc/new/etc, then block B will be *ignored* during leak-checking + -- the custom blocks will take precedence. + + VALGRIND_FREELIKE_BLOCK is the partner to VALGRIND_MALLOCLIKE_BLOCK. For + Memcheck, it does two things: + + - It records that the block has been deallocated. This assumes that the + block was annotated as having been allocated via + VALGRIND_MALLOCLIKE_BLOCK. Otherwise, an error will be issued. + + - It marks the block as being unaddressable. + + VALGRIND_FREELIKE_BLOCK should be put immediately after the point where a + heap block is deallocated. + + VALGRIND_RESIZEINPLACE_BLOCK informs a tool about reallocation. For + Memcheck, it does four things: + + - It records that the size of a block has been changed. This assumes that + the block was annotated as having been allocated via + VALGRIND_MALLOCLIKE_BLOCK. Otherwise, an error will be issued. + + - If the block shrunk, it marks the freed memory as being unaddressable. + + - If the block grew, it marks the new area as undefined and defines a red + zone past the end of the new block. + + - The V-bits of the overlap between the old and the new block are preserved. + + VALGRIND_RESIZEINPLACE_BLOCK should be put after allocation of the new block + and before deallocation of the old block. + + In many cases, these three client requests will not be enough to get your + allocator working well with Memcheck. More specifically, if your allocator + writes to freed blocks in any way then a VALGRIND_MAKE_MEM_UNDEFINED call + will be necessary to mark the memory as addressable just before the zeroing + occurs, otherwise you'll get a lot of invalid write errors. For example, + you'll need to do this if your allocator recycles freed blocks, but it + zeroes them before handing them back out (via VALGRIND_MALLOCLIKE_BLOCK). + Alternatively, if your allocator reuses freed blocks for allocator-internal + data structures, VALGRIND_MAKE_MEM_UNDEFINED calls will also be necessary. + + Really, what's happening is a blurring of the lines between the client + program and the allocator... after VALGRIND_FREELIKE_BLOCK is called, the + memory should be considered unaddressable to the client program, but the + allocator knows more than the rest of the client program and so may be able + to safely access it. Extra client requests are necessary for Valgrind to + understand the distinction between the allocator and the rest of the + program. + + Ignored if addr == 0. +*/ +#define VALGRIND_MALLOCLIKE_BLOCK(addr, sizeB, rzB, is_zeroed) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MALLOCLIKE_BLOCK, \ + addr, sizeB, rzB, is_zeroed, 0) + +/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details. + Ignored if addr == 0. +*/ +#define VALGRIND_RESIZEINPLACE_BLOCK(addr, oldSizeB, newSizeB, rzB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__RESIZEINPLACE_BLOCK, \ + addr, oldSizeB, newSizeB, rzB, 0) + +/* See the comment for VALGRIND_MALLOCLIKE_BLOCK for details. + Ignored if addr == 0. +*/ +#define VALGRIND_FREELIKE_BLOCK(addr, rzB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__FREELIKE_BLOCK, \ + addr, rzB, 0, 0, 0) + +/* Create a memory pool. */ +#define VALGRIND_CREATE_MEMPOOL(pool, rzB, is_zeroed) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ + pool, rzB, is_zeroed, 0, 0) + +/* Create a memory pool with some flags specifying extended behaviour. + When flags is zero, the behaviour is identical to VALGRIND_CREATE_MEMPOOL. + + The flag VALGRIND_MEMPOOL_METAPOOL specifies that the pieces of memory + associated with the pool using VALGRIND_MEMPOOL_ALLOC will be used + by the application as superblocks to dole out MALLOC_LIKE blocks using + VALGRIND_MALLOCLIKE_BLOCK. In other words, a meta pool is a "2 levels" + pool : first level is the blocks described by VALGRIND_MEMPOOL_ALLOC. + The second level blocks are described using VALGRIND_MALLOCLIKE_BLOCK. + Note that the association between the pool and the second level blocks + is implicit : second level blocks will be located inside first level + blocks. It is necessary to use the VALGRIND_MEMPOOL_METAPOOL flag + for such 2 levels pools, as otherwise valgrind will detect overlapping + memory blocks, and will abort execution (e.g. during leak search). + + Such a meta pool can also be marked as an 'auto free' pool using the flag + VALGRIND_MEMPOOL_AUTO_FREE, which must be OR-ed together with the + VALGRIND_MEMPOOL_METAPOOL. For an 'auto free' pool, VALGRIND_MEMPOOL_FREE + will automatically free the second level blocks that are contained + inside the first level block freed with VALGRIND_MEMPOOL_FREE. + In other words, calling VALGRIND_MEMPOOL_FREE will cause implicit calls + to VALGRIND_FREELIKE_BLOCK for all the second level blocks included + in the first level block. + Note: it is an error to use the VALGRIND_MEMPOOL_AUTO_FREE flag + without the VALGRIND_MEMPOOL_METAPOOL flag. +*/ +#define VALGRIND_MEMPOOL_AUTO_FREE 1 +#define VALGRIND_MEMPOOL_METAPOOL 2 +#define VALGRIND_CREATE_MEMPOOL_EXT(pool, rzB, is_zeroed, flags) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CREATE_MEMPOOL, \ + pool, rzB, is_zeroed, flags, 0) + +/* Destroy a memory pool. */ +#define VALGRIND_DESTROY_MEMPOOL(pool) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__DESTROY_MEMPOOL, \ + pool, 0, 0, 0, 0) + +/* Associate a piece of memory with a memory pool. */ +#define VALGRIND_MEMPOOL_ALLOC(pool, addr, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_ALLOC, \ + pool, addr, size, 0, 0) + +/* Disassociate a piece of memory from a memory pool. */ +#define VALGRIND_MEMPOOL_FREE(pool, addr) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_FREE, \ + pool, addr, 0, 0, 0) + +/* Disassociate any pieces outside a particular range. */ +#define VALGRIND_MEMPOOL_TRIM(pool, addr, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_TRIM, \ + pool, addr, size, 0, 0) + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MOVE_MEMPOOL(poolA, poolB) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MOVE_MEMPOOL, \ + poolA, poolB, 0, 0, 0) + +/* Resize and/or move a piece associated with a memory pool. */ +#define VALGRIND_MEMPOOL_CHANGE(pool, addrA, addrB, size) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__MEMPOOL_CHANGE, \ + pool, addrA, addrB, size, 0) + +/* Return 1 if a mempool exists, else 0. */ +#define VALGRIND_MEMPOOL_EXISTS(pool) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__MEMPOOL_EXISTS, \ + pool, 0, 0, 0, 0) + +/* Mark a piece of memory as being a stack. Returns a stack id. + start is the lowest addressable stack byte, end is the highest + addressable stack byte. */ +#define VALGRIND_STACK_REGISTER(start, end) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__STACK_REGISTER, \ + start, end, 0, 0, 0) + +/* Unmark the piece of memory associated with a stack id as being a + stack. */ +#define VALGRIND_STACK_DEREGISTER(id) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_DEREGISTER, \ + id, 0, 0, 0, 0) + +/* Change the start and end address of the stack id. + start is the new lowest addressable stack byte, end is the new highest + addressable stack byte. */ +#define VALGRIND_STACK_CHANGE(id, start, end) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__STACK_CHANGE, \ + id, start, end, 0, 0) + +/* Load PDB debug info for Wine PE image_map. */ +#define VALGRIND_LOAD_PDB_DEBUGINFO(fd, ptr, total_size, delta) \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__LOAD_PDB_DEBUGINFO, \ + fd, ptr, total_size, delta, 0) + +/* Map a code address to a source file name and line number. buf64 + must point to a 64-byte buffer in the caller's address space. The + result will be dumped in there and is guaranteed to be zero + terminated. If no info is found, the first byte is set to zero. */ +#define VALGRIND_MAP_IP_TO_SRCLOC(addr, buf64) \ + (unsigned)VALGRIND_DO_CLIENT_REQUEST_EXPR(0, \ + VG_USERREQ__MAP_IP_TO_SRCLOC, \ + addr, buf64, 0, 0, 0) + +/* Disable error reporting for this thread. Behaves in a stack like + way, so you can safely call this multiple times provided that + VALGRIND_ENABLE_ERROR_REPORTING is called the same number of times + to re-enable reporting. The first call of this macro disables + reporting. Subsequent calls have no effect except to increase the + number of VALGRIND_ENABLE_ERROR_REPORTING calls needed to re-enable + reporting. Child threads do not inherit this setting from their + parents -- they are always created with reporting enabled. */ +#define VALGRIND_DISABLE_ERROR_REPORTING \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ + 1, 0, 0, 0, 0) + +/* Re-enable error reporting, as per comments on + VALGRIND_DISABLE_ERROR_REPORTING. */ +#define VALGRIND_ENABLE_ERROR_REPORTING \ + VALGRIND_DO_CLIENT_REQUEST_STMT(VG_USERREQ__CHANGE_ERR_DISABLEMENT, \ + -1, 0, 0, 0, 0) + +/* Execute a monitor command from the client program. + If a connection is opened with GDB, the output will be sent + according to the output mode set for vgdb. + If no connection is opened, output will go to the log output. + Returns 1 if command not recognised, 0 otherwise. */ +#define VALGRIND_MONITOR_COMMAND(command) \ + VALGRIND_DO_CLIENT_REQUEST_EXPR(0, VG_USERREQ__GDB_MONITOR_COMMAND, \ + command, 0, 0, 0, 0) + + +#undef PLAT_x86_darwin +#undef PLAT_amd64_darwin +#undef PLAT_x86_win32 +#undef PLAT_amd64_win64 +#undef PLAT_x86_linux +#undef PLAT_amd64_linux +#undef PLAT_ppc32_linux +#undef PLAT_ppc64be_linux +#undef PLAT_ppc64le_linux +#undef PLAT_arm_linux +#undef PLAT_s390x_linux +#undef PLAT_mips32_linux +#undef PLAT_mips64_linux +#undef PLAT_x86_solaris +#undef PLAT_amd64_solaris + +#endif /* __VALGRIND_H */ diff -Nru flatpak-0.11.3/compile flatpak-1.0.7/compile --- flatpak-0.11.3/compile 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/compile 2019-02-10 17:12:18.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -255,7 +255,8 @@ echo "compile $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -339,9 +340,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru flatpak-0.11.3/completion/flatpak flatpak-1.0.7/completion/flatpak --- flatpak-0.11.3/completion/flatpak 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/completion/flatpak 2018-08-08 14:56:20.000000000 +0000 @@ -13,9 +13,9 @@ if [[ "${RES[$i]}" = "__FLATPAK_FILE" ]]; then declare -a COMPGEN_OPTS=('-f') elif [[ "${RES[$i]}" = "__FLATPAK_BUNDLE_FILE" ]]; then - declare -a COMPGEN_OPTS=('-f' '-G' '*.flatpak') + declare -a COMPGEN_OPTS=('-f' '-X' '!*.flatpak') elif [[ "${RES[$i]}" = "__FLATPAK_BUNDLE_OR_REF_FILE" ]]; then - declare -a COMPGEN_OPTS=('-f' '-G' '*.flatpak@(|ref)') + declare -a COMPGEN_OPTS=('-f' '-X' '!*.flatpak@(|ref)') elif [[ "${RES[$i]}" = "__FLATPAK_DIR" ]]; then declare -a COMPGEN_OPTS=('-d') else diff -Nru flatpak-0.11.3/completion/_flatpak flatpak-1.0.7/completion/_flatpak --- flatpak-0.11.3/completion/_flatpak 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/completion/_flatpak 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,27 @@ +#compdef flatpak + +emulate -L zsh + +local index +(( index = ${(c)#words[0,CURRENT]} + $#PREFIX + 1 )) + + +local resp=($(flatpak complete "$words" $index "$words[CURRENT]")) + +_description options opt_expl option +_description arguments arg_expl argument + +local match +for match in $resp; do + case $match in + __FLATPAK_FILE) _files;; + __FLATPAK_BUNDLE_FILE) _path_files -g '*.flatpak';; + __FLATPAK_BUNDLE_OR_REF_FILE) _path_files -g '*.flatpak(|ref)';; + __FLATPAK_DIR) _path_files -/;; + -*=) compadd $opt_expl[@] -S "" -- $match;; + -*) compadd $opt_expl[@] -- $match;; + *) compadd $arg_expl[@] $match;; + esac +done + +# vim: ft=zsh diff -Nru flatpak-0.11.3/config.guess flatpak-1.0.7/config.guess --- flatpak-0.11.3/config.guess 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/config.guess 2019-02-10 17:12:18.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2016 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2016-10-02' +timestamp='2018-03-08' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,7 +27,7 @@ # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -39,7 +39,7 @@ Output the configuration name of the system \`$me' is run on. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2016 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -107,9 +107,9 @@ dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; + ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; @@ -132,14 +132,14 @@ UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown -case "${UNAME_SYSTEM}" in +case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu - eval $set_cc_for_build - cat <<-EOF > $dummy.c + eval "$set_cc_for_build" + cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc @@ -149,13 +149,20 @@ LIBC=gnu #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi ;; esac # Note: order is significant - the case branches are not exclusive. -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in +case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, @@ -169,30 +176,30 @@ # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - /sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || \ + "/sbin/$sysctl" 2>/dev/null || \ + "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) - arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` - machine=${arch}${endian}-unknown + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then @@ -208,10 +215,10 @@ ;; esac # Determine ABI tags. - case "${UNAME_MACHINE_ARCH}" in + case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release @@ -219,46 +226,55 @@ # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in + case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}${abi}" + echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) - echo ${UNAME_MACHINE}-unknown-sortix + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -310,28 +326,19 @@ # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos + echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos + echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition @@ -343,7 +350,7 @@ echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} + echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos @@ -370,19 +377,19 @@ sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} + echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. @@ -395,13 +402,13 @@ SUN_ARCH=x86_64 fi fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in @@ -410,25 +417,25 @@ ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) - echo m68k-sun-sunos${UNAME_RELEASE} + echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) - echo sparc-sun-sunos${UNAME_RELEASE} + echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} + echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not @@ -439,44 +446,44 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} + echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} + echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} + echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} + echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} + echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} + echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} + echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} + echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { @@ -485,23 +492,23 @@ #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && + dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} + echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax @@ -527,17 +534,17 @@ AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] + if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ + [ "$TARGET_BINARY_INTERFACE"x = x ] then - echo m88k-dg-dgux${UNAME_RELEASE} + echo m88k-dg-dgux"$UNAME_RELEASE" else - echo m88k-dg-dguxbcs${UNAME_RELEASE} + echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else - echo i586-dg-dgux${UNAME_RELEASE} + echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -554,7 +561,7 @@ echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id @@ -566,14 +573,14 @@ if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include main() @@ -584,7 +591,7 @@ exit(0); } EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else @@ -598,7 +605,7 @@ exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -607,18 +614,18 @@ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} + echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) + ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx @@ -633,28 +640,28 @@ echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + case "$UNAME_MACHINE" in + 9000/31?) HP_ARCH=m68000 ;; + 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in + case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in + case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + if [ "$HP_ARCH" = "" ]; then + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include @@ -687,13 +694,13 @@ exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = hppa2.0w ] + if [ "$HP_ARCH" = hppa2.0w ] then - eval $set_cc_for_build + eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler @@ -712,15 +719,15 @@ HP_ARCH=hppa64 fi fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} + echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} + HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #include int main () @@ -745,11 +752,11 @@ exit (0); } EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) @@ -758,7 +765,7 @@ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) @@ -766,9 +773,9 @@ exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk + echo "$UNAME_MACHINE"-unknown-osf1mk else - echo ${UNAME_MACHINE}-unknown-osf1 + echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) @@ -793,127 +800,109 @@ echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} + echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in + case "$UNAME_PROCESSOR" in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin + echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) - echo ${UNAME_MACHINE}-pc-mingw64 + echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 + echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 + echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) - case ${UNAME_MACHINE} in + case "$UNAME_MACHINE" in x86) - echo i586-pc-interix${UNAME_RELEASE} + echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} + echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) - echo ia64-unknown-interix${UNAME_RELEASE} + echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin + echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix + echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in @@ -927,63 +916,63 @@ esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) - eval $set_cc_for_build + eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else - echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-${LIBC} + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + eval "$set_cc_for_build" + sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el @@ -997,70 +986,70 @@ #endif #endif EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" + test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) - echo or1k-unknown-linux-${LIBC} + echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) - echo sparc-unknown-linux-${LIBC} + echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-${LIBC} + echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; - PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; - *) echo hppa-unknown-linux-${LIBC} ;; + PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) - echo powerpc64-unknown-linux-${LIBC} + echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) - echo powerpc-unknown-linux-${LIBC} + echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-${LIBC} + echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) - echo powerpcle-unknown-linux-${LIBC} + echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-${LIBC} + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-pc-linux-${LIBC} + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. @@ -1074,34 +1063,34 @@ # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx + echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop + echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos + echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable + echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} + echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp + echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + i*86:*:4.*:*) + UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) @@ -1111,12 +1100,12 @@ *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 @@ -1126,9 +1115,9 @@ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else - echo ${UNAME_MACHINE}-pc-sysv32 + echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) @@ -1148,9 +1137,9 @@ exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) @@ -1170,9 +1159,9 @@ test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; @@ -1181,28 +1170,28 @@ test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} + echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} + echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} + echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} + echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} + echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 @@ -1213,7 +1202,7 @@ *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 + echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi @@ -1233,23 +1222,23 @@ exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos + echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} + echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv"$UNAME_RELEASE" else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. @@ -1268,49 +1257,56 @@ echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} + echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} + echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} + echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} + echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} + echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux${UNAME_RELEASE} + echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} + echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval $set_cc_for_build + eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi - if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1321,7 +1317,7 @@ # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` @@ -1329,19 +1325,25 @@ UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} + NEO-*:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} + echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} + NSR-*:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux @@ -1350,7 +1352,7 @@ echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 @@ -1361,7 +1363,7 @@ else UNAME_MACHINE="$cputype" fi - echo ${UNAME_MACHINE}-unknown-plan9 + echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 @@ -1382,14 +1384,14 @@ echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in + case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; @@ -1398,32 +1400,44 @@ echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos + echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros + echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx + echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&2 </dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} +UNAME_MACHINE = "$UNAME_MACHINE" +UNAME_RELEASE = "$UNAME_RELEASE" +UNAME_SYSTEM = "$UNAME_SYSTEM" +UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff -Nru flatpak-0.11.3/config.h.in flatpak-1.0.7/config.h.in --- flatpak-0.11.3/config.h.in 2018-02-19 13:20:10.000000000 +0000 +++ flatpak-1.0.7/config.h.in 2019-02-11 12:42:29.000000000 +0000 @@ -19,9 +19,6 @@ /* Define if using xauth */ #undef ENABLE_XAUTH -/* Define if peer to peer support should be enabled */ -#undef FLATPAK_ENABLE_P2P - /* defines how to decorate public symbols while building */ #undef FLATPAK_EXTERN @@ -97,9 +94,6 @@ /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR -/* Define if libostree experimental API should be enabled */ -#undef OSTREE_ENABLE_EXPERIMENTAL_API - /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT diff -Nru flatpak-0.11.3/config.sub flatpak-1.0.7/config.sub --- flatpak-0.11.3/config.sub 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/config.sub 2019-02-10 17:12:18.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2016 Free Software Foundation, Inc. +# Copyright 1992-2018 Free Software Foundation, Inc. -timestamp='2016-09-05' +timestamp='2018-05-05' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -15,7 +15,7 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, see . +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -33,7 +33,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases @@ -57,7 +57,7 @@ Canonicalize a configuration name. -Operation modes: +Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit @@ -67,7 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2016 Free Software Foundation, Inc. +Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -94,7 +94,7 @@ *local*) # First pass through any local machine types. - echo $1 + echo "$1" exit ;; * ) @@ -110,28 +110,48 @@ exit 1;; esac -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo $1 | sed 's/-[^-]*$//'` - if [ $basic_machine != $1 ] - then os=`echo $1 | sed 's/.*-/-/'` - else os=; fi - ;; +# Spilt fields of configuration type +IFS="-" read -r field1 field2 field3 field4 <&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. @@ -380,14 +403,14 @@ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ + | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ @@ -421,6 +444,7 @@ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ + | nfp-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ @@ -428,6 +452,7 @@ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ @@ -444,6 +469,7 @@ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ + | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -457,7 +483,7 @@ # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) - basic_machine=i386-unknown + basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) @@ -491,7 +517,7 @@ basic_machine=x86_64-pc ;; amd64-*) - basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl @@ -536,7 +562,7 @@ os=-linux ;; blackfin-*) - basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) @@ -544,13 +570,13 @@ os=-cnk ;; c54x-*) - basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) - basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) - basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray @@ -639,7 +665,7 @@ basic_machine=rs6000-bull os=-bosx ;; - dpx2* | dpx2*-bull) + dpx2*) basic_machine=m68k-bull os=-sysv3 ;; @@ -648,7 +674,7 @@ os=$os"spe" ;; e500v[12]-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) @@ -740,9 +766,6 @@ hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; - hppa-next) - os=-nextstep3 - ;; hppaosf) basic_machine=hppa1.1-hp os=-osf @@ -755,26 +778,26 @@ basic_machine=i370-ibm ;; i*86v32) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) - basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; - i386-vsta | vsta) + vsta) basic_machine=i386-unknown os=-vsta ;; @@ -793,19 +816,16 @@ os=-sysv ;; leon-*|leon[3-9]-*) - basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) - basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; - m88k-omron*) - basic_machine=m88k-omron - ;; magnum | m3230) basic_machine=mips-mips os=-sysv @@ -837,10 +857,10 @@ os=-mint ;; mips3*-*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) - basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k @@ -859,7 +879,7 @@ os=-msdos ;; ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc @@ -901,7 +921,7 @@ basic_machine=v70-nec os=-sysv ;; - next | m*-next ) + next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) @@ -946,6 +966,12 @@ nsr-tandem) basic_machine=nsr-tandem ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf @@ -978,7 +1004,7 @@ os=-linux ;; parisc-*) - basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) @@ -994,7 +1020,7 @@ basic_machine=i386-pc ;; pc98-*) - basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc @@ -1009,16 +1035,16 @@ basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) - basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould @@ -1028,23 +1054,23 @@ ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) - basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; - ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm @@ -1098,17 +1124,10 @@ sequent) basic_machine=i386-sequent ;; - sh) - basic_machine=sh-hitachi - os=-hms - ;; sh5el) basic_machine=sh5le-unknown ;; - sh64) - basic_machine=sh64-unknown - ;; - sparclite-wrs | simso-wrs) + simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; @@ -1127,7 +1146,7 @@ os=-sysv4 ;; strongarm-* | thumb-*) - basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun @@ -1249,6 +1268,9 @@ basic_machine=hppa1.1-winbond os=-proelf ;; + x64) + basic_machine=x86_64-pc + ;; xbox) basic_machine=i686-pc os=-mingw32 @@ -1257,20 +1279,12 @@ basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) - basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; - z8k-*-coff) - basic_machine=z8k-unknown - os=-sim - ;; - z80-*-coff) - basic_machine=z80-unknown - os=-sim - ;; none) basic_machine=none-none os=-none @@ -1299,10 +1313,6 @@ vax) basic_machine=vax-dec ;; - pdp10) - # there are many clones, so DEC is not a safe bet - basic_machine=pdp10-unknown - ;; pdp11) basic_machine=pdp11-dec ;; @@ -1312,9 +1322,6 @@ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; - sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) - basic_machine=sparc-sun - ;; cydra) basic_machine=cydra-cydrome ;; @@ -1334,7 +1341,7 @@ # Make sure to match an already-canonicalized machine name. ;; *) - echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac @@ -1342,10 +1349,10 @@ # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) - basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) - basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; @@ -1353,11 +1360,11 @@ # Decode manufacturer-specific aliases for certain operating systems. -if [ x"$os" != x"" ] +if [ x$os != x ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases that might get confused + # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux @@ -1368,18 +1375,19 @@ -solaris) os=-solaris2 ;; - -svr4*) - os=-sysv4 - ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; - # First accept the basic system types. + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now accept the basic system types. # The portable systems comes first. - # Each alternative MUST END IN A *, to match a version number. + # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ @@ -1389,25 +1397,26 @@ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix*) + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1424,12 +1433,12 @@ -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; - -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + -sim | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) - os=`echo $os | sed -e 's|mac|macos|'` + os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc @@ -1438,10 +1447,10 @@ os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) - os=`echo $os | sed -e 's|sunos5|solaris2|'` + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) - os=`echo $os | sed -e 's|sunos6|solaris3|'` + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition @@ -1452,12 +1461,6 @@ -wince*) os=-wince ;; - -osfrose*) - os=-osfrose - ;; - -osf*) - os=-osf - ;; -utek*) os=-bsd ;; @@ -1482,7 +1485,7 @@ -nova*) os=-rtmk-nova ;; - -ns2 ) + -ns2) os=-nextstep2 ;; -nsk*) @@ -1504,7 +1507,7 @@ -oss*) os=-sysv3 ;; - -svr4) + -svr4*) os=-sysv4 ;; -svr3) @@ -1519,34 +1522,44 @@ -ose*) os=-ose ;; - -es1800*) - os=-ose - ;; - -xenix) - os=-xenix - ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; - -aros*) - os=-aros - ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; -nacl*) ;; -ios) ;; -none) ;; + -*-eabi) + case $basic_machine in + arm*) + ;; + esac + ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac @@ -1636,12 +1649,12 @@ sparc-* | *-sun) os=-sunos4.1.1 ;; + pru-*) + os=-elf + ;; *-be) os=-beos ;; - *-haiku) - os=-haiku - ;; *-ibm) os=-aix ;; @@ -1681,7 +1694,7 @@ m88k-omron*) os=-luna ;; - *-next ) + *-next) os=-nextstep ;; *-sequent) @@ -1696,9 +1709,6 @@ i370-*) os=-mvs ;; - *-next) - os=-nextstep3 - ;; *-gould) os=-sysv ;; @@ -1808,15 +1818,15 @@ vendor=stratus ;; esac - basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac -echo $basic_machine$os +echo "$basic_machine$os" exit # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" diff -Nru flatpak-0.11.3/configure flatpak-1.0.7/configure --- flatpak-0.11.3/configure 2018-02-19 13:20:06.000000000 +0000 +++ flatpak-1.0.7/configure 2019-02-11 12:42:26.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Flatpak 0.11.3. +# Generated by GNU Autoconf 2.69 for Flatpak 1.0.7. # # Report bugs to . # @@ -590,8 +590,8 @@ # Identity of this package. PACKAGE_NAME='Flatpak' PACKAGE_TARNAME='flatpak' -PACKAGE_VERSION='0.11.3' -PACKAGE_STRING='Flatpak 0.11.3' +PACKAGE_VERSION='1.0.7' +PACKAGE_STRING='Flatpak 1.0.7' PACKAGE_BUGREPORT='https://github.com/flatpak/flatpak/issues' PACKAGE_URL='http://flatpak.org/' @@ -692,8 +692,6 @@ XML_CATALOG_FILE XSLTPROC SYSTEM_INSTALL_DIR -ENABLE_P2P_FALSE -ENABLE_P2P_TRUE SUDO_BIN PRIV_MODE_SETUID_FALSE PRIV_MODE_SETUID_TRUE @@ -723,6 +721,10 @@ GDBUS_CODEGEN GLIB_COMPILE_RESOURCES GLIB_MKENUMS +WITH_SYSTEM_DBUS_PROXY_FALSE +WITH_SYSTEM_DBUS_PROXY_TRUE +DBUS_PROXY +CAP_LIB WITH_SYSTEM_BWRAP_FALSE WITH_SYSTEM_BWRAP_TRUE BWRAP @@ -764,6 +766,8 @@ MSGFMT GETTEXT_MACRO_VERSION USE_NLS +YFLAGS +YACC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V @@ -775,7 +779,6 @@ AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE -am__quote am__include DEPDIR am__untar @@ -876,7 +879,8 @@ PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR -SHELL' +SHELL +am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking @@ -906,6 +910,7 @@ with_system_font_cache_dirs with_profile_dir with_system_bubblewrap +with_system_dbus_proxy enable_otmpfile enable_wrpseudo_compat with_gpgme_prefix @@ -915,7 +920,6 @@ enable_seccomp with_priv_mode enable_sudo -enable_p2p with_system_install_dir enable_documentation with_xml_catalog @@ -939,10 +943,13 @@ CPPFLAGS CPP LT_SYS_LIBRARY_PATH +YACC +YFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR BWRAP +DBUS_PROXY BASE_CFLAGS BASE_LIBS SOUP_CFLAGS @@ -1505,7 +1512,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Flatpak 0.11.3 to adapt to many kinds of systems. +\`configure' configures Flatpak 1.0.7 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1575,7 +1582,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Flatpak 0.11.3:";; + short | recursive ) echo "Configuration of Flatpak 1.0.7:";; esac cat <<\_ACEOF @@ -1612,7 +1619,6 @@ --disable-seccomp Disable seccomp --enable-sudo Use sudo to set setuid flags on binaries during install (only needed if userns disabled) - --enable-p2p Enable unstable peer to peer support [default=no] --enable-documentation Build documentation --enable-introspection=[no/auto/yes] Enable introspection for this build @@ -1666,6 +1672,9 @@ [default=SYSCONFDIR/profile.d] --with-system-bubblewrap Use system bwrap executable [default=check $BWRAP] + --with-system-dbus-proxy + Use system xdg-dbus-proxy executable [default=check + $DBUS_PROXY] --with-gpgme-prefix=PFX prefix where GPGME is installed (optional) --with-priv-mode=setuid/none How to set privilege-raising during install (only @@ -1688,12 +1697,19 @@ CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. + YACC The `Yet Another Compiler Compiler' implementation to use. + Defaults to the first program found out of: `bison -y', `byacc', + `yacc'. + YFLAGS The list of arguments that will be passed by default to $YACC. + This script will default YFLAGS to the empty string to avoid a + default value of `-d' given by some make applications. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path BWRAP Bubblewrap executable + DBUS_PROXY dbus-proxy executable BASE_CFLAGS C compiler flags for BASE, overriding pkg-config BASE_LIBS linker flags for BASE, overriding pkg-config SOUP_CFLAGS C compiler flags for SOUP, overriding pkg-config @@ -1795,7 +1811,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Flatpak configure 0.11.3 +Flatpak configure 1.0.7 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2210,7 +2226,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Flatpak $as_me 0.11.3, which was +It was created by Flatpak $as_me 1.0.7, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2561,9 +2577,9 @@ GLIB_REQS=2.44 -SYSTEM_BWRAP_REQS=0.1.8 -OSTREE_REQS=2017.14 -OSTREE_P2P_REQS=2018.2 +SYSTEM_BWRAP_REQS=0.2.1 +SYSTEM_DBUS_PROXY_REQS=0.1.0 +OSTREE_REQS=2018.7 ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do @@ -4735,6 +4751,298 @@ + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if ${ac_cv_prog_cc_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac + case `pwd` in @@ -12454,7 +12762,7 @@ ac_config_headers="$ac_config_headers config.h" -am__api_version='1.15' +am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -12838,45 +13146,45 @@ ac_config_commands="$ac_config_commands depfiles" - -am_make=${MAKE-make} -cat > confinc << 'END' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 +$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } +cat > confinc.mk << 'END' am__doit: - @echo this is the am__doit target + @echo this is the am__doit target >confinc.out .PHONY: am__doit END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD +# BSD make does it like this. +echo '.include "confinc.mk" # ignored' > confmf.BSD +# Other make implementations (GNU, Solaris 10, AIX) do it like this. +echo 'include confinc.mk # ignored' > confmf.GNU +_am_result=no +for s in GNU BSD; do + { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 + (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + case $?:`cat confinc.out 2>/dev/null` in #( + '0:this is the am__doit target') : + case $s in #( + BSD) : + am__include='.include' am__quote='"' ;; #( + *) : + am__include='include' am__quote='' ;; +esac ;; #( + *) : ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf +esac + if test "$am__include" != "#"; then + _am_result="yes ($s style)" + break + fi +done +rm -f confinc.* confmf.* +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 +$as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : @@ -12958,7 +13266,7 @@ # Define the identity of the package. PACKAGE='flatpak' - VERSION='0.11.3' + VERSION='1.0.7' # Some tools Automake needs. @@ -12979,8 +13287,8 @@ # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: -# -# +# +# mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The @@ -13275,7 +13583,7 @@ Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation -that behaves properly: . +that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM @@ -13355,6 +13663,49 @@ SED="$ac_cv_path_SED" rm -f conftest.sed +for ac_prog in 'bison -y' byacc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_YACC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$YACC"; then + ac_cv_prog_YACC="$YACC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_YACC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +YACC=$ac_cv_prog_YACC +if test -n "$YACC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$YACC" && break +done +test -n "$YACC" || YACC="yacc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 @@ -15951,6 +16302,7 @@ BWRAP="${BWRAP:-false}" fi +CAP_LIB= case $BWRAP in #( yes) : BWRAP=bwrap ;; #( @@ -16044,6 +16396,50 @@ fi else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_from_text in -lcap" >&5 +$as_echo_n "checking for cap_from_text in -lcap... " >&6; } +if ${ac_cv_lib_cap_cap_from_text+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcap $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cap_from_text (); +int +main () +{ +return cap_from_text (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_cap_cap_from_text=yes +else + ac_cv_lib_cap_cap_from_text=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_from_text" >&5 +$as_echo "$ac_cv_lib_cap_cap_from_text" >&6; } +if test "x$ac_cv_lib_cap_cap_from_text" = xyes; then : + CAP_LIB=-lcap +fi + + if test "$ac_cv_lib_cap_cap_from_text" != "yes"; then + as_fn_error $? "*** libcap needed by bubblewrap but not found" "$LINENO" 5 + fi + if false; then WITH_SYSTEM_BWRAP_TRUE= WITH_SYSTEM_BWRAP_FALSE='#' @@ -16054,6 +16450,120 @@ fi + + + +# Check whether --with-system-dbus-proxy was given. +if test "${with_system_dbus_proxy+set}" = set; then : + withval=$with_system_dbus_proxy; DBUS_PROXY="$withval" +else + DBUS_PROXY="${DBUS_PROXY:-false}" +fi + +case $DBUS_PROXY in #( + yes) : + DBUS_PROXY=xdg-dbus-proxy ;; #( + no) : + DBUS_PROXY=false ;; #( + auto) : + # Extract the first word of "xdg-dbus-proxy", so it can be a program name with args. +set dummy xdg-dbus-proxy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DBUS_PROXY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DBUS_PROXY"; then + ac_cv_prog_DBUS_PROXY="$DBUS_PROXY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DBUS_PROXY="xdg-dbus-proxy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_prog_DBUS_PROXY" && ac_cv_prog_DBUS_PROXY="false" +fi +fi +DBUS_PROXY=$ac_cv_prog_DBUS_PROXY +if test -n "$DBUS_PROXY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBUS_PROXY" >&5 +$as_echo "$DBUS_PROXY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + ;; #( + *) : + ;; +esac +if test "x$DBUS_PROXY" != xfalse; then + DBUS_PROXY_VERSION=$( $DBUS_PROXY --version | sed 's,.*\ \([0-9]*\.[0-9]*\.[0-9]*\)$,\1,') + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo "$SYSTEM_DBUS_PROXY_REQS" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "$DBUS_PROXY_VERSION" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/false/;s/x${ax_compare_version_B}/true/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + as_fn_error $? "You need at least version $SYSTEM_DBUS_PROXY_REQS of xdg-dbus-proxy to use the system installed version (have $DBUS_PROXY_VERSION)" "$LINENO" 5 + fi + + if true; then + WITH_SYSTEM_DBUS_PROXY_TRUE= + WITH_SYSTEM_DBUS_PROXY_FALSE='#' +else + WITH_SYSTEM_DBUS_PROXY_TRUE='#' + WITH_SYSTEM_DBUS_PROXY_FALSE= +fi + +else + if false; then + WITH_SYSTEM_DBUS_PROXY_TRUE= + WITH_SYSTEM_DBUS_PROXY_FALSE='#' +else + WITH_SYSTEM_DBUS_PROXY_TRUE='#' + WITH_SYSTEM_DBUS_PROXY_FALSE= +fi + +fi + + for ac_func in fdwalk do : ac_fn_c_check_func "$LINENO" "fdwalk" "ac_cv_func_fdwalk" @@ -16069,6 +16579,7 @@ ac_fn_c_check_decl "$LINENO" "renameat2" "ac_cv_have_decl_renameat2" " #include #include +#include #include #include #include @@ -16089,6 +16600,7 @@ ac_fn_c_check_decl "$LINENO" "memfd_create" "ac_cv_have_decl_memfd_create" " #include #include +#include #include #include #include @@ -16109,6 +16621,7 @@ ac_fn_c_check_decl "$LINENO" "copy_file_range" "ac_cv_have_decl_copy_file_range" " #include #include +#include #include #include #include @@ -17374,139 +17887,6 @@ -# Do we enable building peer to peer support using libostree’s experimental (non-stable) API? -# If so, OSTREE_ENABLE_EXPERIMENTAL_API needs to be #defined before ostree.h is -# included. -# Check whether --enable-p2p was given. -if test "${enable_p2p+set}" = set; then : - enableval=$enable_p2p; -else - enable_p2p=no -fi - -if test x$enable_p2p = xyes; then : - - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OSTREE" >&5 -$as_echo_n "checking for OSTREE... " >&6; } - -if test -n "$OSTREE_CFLAGS"; then - pkg_cv_OSTREE_CFLAGS="$OSTREE_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ostree-1 >= \$OSTREE_P2P_REQS\""; } >&5 - ($PKG_CONFIG --exists --print-errors "ostree-1 >= $OSTREE_P2P_REQS") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_OSTREE_CFLAGS=`$PKG_CONFIG --cflags "ostree-1 >= $OSTREE_P2P_REQS" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$OSTREE_LIBS"; then - pkg_cv_OSTREE_LIBS="$OSTREE_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ostree-1 >= \$OSTREE_P2P_REQS\""; } >&5 - ($PKG_CONFIG --exists --print-errors "ostree-1 >= $OSTREE_P2P_REQS") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_OSTREE_LIBS=`$PKG_CONFIG --libs "ostree-1 >= $OSTREE_P2P_REQS" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - OSTREE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ostree-1 >= $OSTREE_P2P_REQS" 2>&1` - else - OSTREE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ostree-1 >= $OSTREE_P2P_REQS" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$OSTREE_PKG_ERRORS" >&5 - - as_fn_error $? "Package requirements (ostree-1 >= $OSTREE_P2P_REQS) were not met: - -$OSTREE_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -Alternatively, you may set the environment variables OSTREE_CFLAGS -and OSTREE_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details." "$LINENO" 5 -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables OSTREE_CFLAGS -and OSTREE_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see . -See \`config.log' for more details" "$LINENO" 5; } -else - OSTREE_CFLAGS=$pkg_cv_OSTREE_CFLAGS - OSTREE_LIBS=$pkg_cv_OSTREE_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -fi - - ostree_features=$($PKG_CONFIG --variable=features ostree-1) - case "$ostree_features" in #( - *experimental*) : - have_ostree_experimental=yes ;; #( - *) : - ;; -esac - - if test "x$have_ostree_experimental" != "xyes"; then : - as_fn_error $? "Experimental API not found in ostree-1, which is needed for --enable-p2p. OSTree must be compiled with --enable-experimental-api." "$LINENO" 5 -fi - - -$as_echo "#define OSTREE_ENABLE_EXPERIMENTAL_API 1" >>confdefs.h - - -$as_echo "#define FLATPAK_ENABLE_P2P 1" >>confdefs.h - - -fi - if test x$enable_p2p = xyes; then - ENABLE_P2P_TRUE= - ENABLE_P2P_FALSE='#' -else - ENABLE_P2P_TRUE='#' - ENABLE_P2P_FALSE= -fi - - # Check whether --with-system-install-dir was given. if test "${with_system_install_dir+set}" = set; then : @@ -18364,12 +18744,12 @@ fi -FLATPAK_MAJOR_VERSION=0 -FLATPAK_MINOR_VERSION=11 -FLATPAK_MICRO_VERSION=3 +FLATPAK_MAJOR_VERSION=1 +FLATPAK_MINOR_VERSION=0 +FLATPAK_MICRO_VERSION=7 FLATPAK_EXTRA_VERSION= FLATPAK_INTERFACE_AGE=0 -FLATPAK_VERSION=0.11.3 +FLATPAK_VERSION=1.0.7 @@ -18406,12 +18786,12 @@ -LT_VERSION_INFO="1103:0:1103" +LT_VERSION_INFO="10007:0:10007" LT_CURRENT_MINUS_AGE=0 -ac_config_files="$ac_config_files Makefile doc/Makefile doc/reference/Makefile flatpak.pc lib/flatpak-version-macros.h doc/reference/version.xml doc/flatpak-docs.xml po/Makefile.in" +ac_config_files="$ac_config_files Makefile doc/Makefile doc/reference/Makefile flatpak.pc common/flatpak-version-macros.h doc/reference/version.xml doc/flatpak-docs.xml po/Makefile.in" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -18562,6 +18942,14 @@ as_fn_error $? "conditional \"WITH_SYSTEM_BWRAP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${WITH_SYSTEM_DBUS_PROXY_TRUE}" && test -z "${WITH_SYSTEM_DBUS_PROXY_FALSE}"; then + as_fn_error $? "conditional \"WITH_SYSTEM_DBUS_PROXY\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${WITH_SYSTEM_DBUS_PROXY_TRUE}" && test -z "${WITH_SYSTEM_DBUS_PROXY_FALSE}"; then + as_fn_error $? "conditional \"WITH_SYSTEM_DBUS_PROXY\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${BUILD_SYSTEM_HELPER_TRUE}" && test -z "${BUILD_SYSTEM_HELPER_FALSE}"; then as_fn_error $? "conditional \"BUILD_SYSTEM_HELPER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -18570,10 +18958,6 @@ as_fn_error $? "conditional \"PRIV_MODE_SETUID\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${ENABLE_P2P_TRUE}" && test -z "${ENABLE_P2P_FALSE}"; then - as_fn_error $? "conditional \"ENABLE_P2P\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${BUILD_DOCUMENTATION_TRUE}" && test -z "${BUILD_DOCUMENTATION_FALSE}"; then as_fn_error $? "conditional \"BUILD_DOCUMENTATION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -19019,7 +19403,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Flatpak $as_me 0.11.3, which was +This file was extended by Flatpak $as_me 1.0.7, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19086,7 +19470,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Flatpak config.status 0.11.3 +Flatpak config.status 1.0.7 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -19488,7 +19872,7 @@ -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" +AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. @@ -19513,7 +19897,7 @@ "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/reference/Makefile") CONFIG_FILES="$CONFIG_FILES doc/reference/Makefile" ;; "flatpak.pc") CONFIG_FILES="$CONFIG_FILES flatpak.pc" ;; - "lib/flatpak-version-macros.h") CONFIG_FILES="$CONFIG_FILES lib/flatpak-version-macros.h" ;; + "common/flatpak-version-macros.h") CONFIG_FILES="$CONFIG_FILES common/flatpak-version-macros.h" ;; "doc/reference/version.xml") CONFIG_FILES="$CONFIG_FILES doc/reference/version.xml" ;; "doc/flatpak-docs.xml") CONFIG_FILES="$CONFIG_FILES doc/flatpak-docs.xml" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; @@ -20659,29 +21043,35 @@ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac + # TODO: see whether this extra hack can be removed once we start + # requiring Autoconf 2.70 or later. + case $CONFIG_FILES in #( + *\'*) : + eval set x "$CONFIG_FILES" ;; #( + *) : + set x $CONFIG_FILES ;; #( + *) : + ;; +esac shift - for mf + # Used to flag and report bootstrapping failures. + am_rc=0 + for am_mf do # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line + am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile which includes + # dependency-tracking related rules and includes. + # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | + sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ + || continue + am_dirpart=`$as_dirname -- "$am_mf" || +$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$am_mf" : 'X\(//\)[^/]' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -20699,53 +21089,48 @@ q } s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ + am_filepart=`$as_basename -- "$am_mf" || +$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ + X"$am_mf" : 'X\(//\)$' \| \ + X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$am_mf" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } - /^X\(\/\/\)$/{ + /^X\/\(\/\/\)$/{ s//\1/ q } - /^X\(\/\).*/{ + /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done + { echo "$as_me:$LINENO: cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles" >&5 + (cd "$am_dirpart" \ + && sed -e '/# am--include-marker/d' "$am_filepart" \ + | $MAKE -f - am--depfiles) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } || am_rc=$? done + if test $am_rc -ne 0; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Something went wrong bootstrapping makefile fragments + for automatic dependency tracking. Try re-running configure with the + '--disable-dependency-tracking' option to at least be able to build + the package (albeit without support for automatic dependency tracking). +See \`config.log' for more details" "$LINENO" 5; } + fi + { am_dirpart=; unset am_dirpart;} + { am_filepart=; unset am_filepart;} + { am_mf=; unset am_mf;} + { am_rc=; unset am_rc;} + rm -f conftest-deps.mk } ;; "po-directories":C) @@ -20907,15 +21292,21 @@ build_bwrap="no" fi +if test x$DBUS_PROXY = xfalse ; then + build_dbus_proxy="yes" +else + build_dbus_proxy="no" +fi + echo "" echo " Flatpak $FLATPAK_VERSION" echo " =============" echo "" echo " Build system helper: $enable_system_helper" echo " Build bubblewrap: $build_bwrap" +echo " Build dbus-proxy: $build_dbus_proxy" echo " Use sandboxed triggers: $enable_sandboxed_triggers" echo " Use seccomp: $enable_seccomp" echo " Privileged group: $PRIVILEGED_GROUP" echo " Privilege mode: $with_priv_mode" -echo " Peer to peer support: $enable_p2p" echo "" diff -Nru flatpak-0.11.3/configure.ac flatpak-1.0.7/configure.ac --- flatpak-0.11.3/configure.ac 2018-02-19 13:18:46.000000000 +0000 +++ flatpak-1.0.7/configure.ac 2019-02-11 12:42:20.000000000 +0000 @@ -13,9 +13,9 @@ # on the stable branch, interface age == micro # on the unstable (ie master), interface age = 0 -m4_define([flatpak_major_version], [0]) -m4_define([flatpak_minor_version], [11]) -m4_define([flatpak_micro_version], [3]) +m4_define([flatpak_major_version], [1]) +m4_define([flatpak_minor_version], [0]) +m4_define([flatpak_micro_version], [7]) m4_define([flatpak_extra_version], []) m4_define([flatpak_interface_age], [0]) m4_define([flatpak_binary_age], @@ -30,9 +30,9 @@ [http://flatpak.org/]) GLIB_REQS=2.44 -SYSTEM_BWRAP_REQS=0.1.8 -OSTREE_REQS=2017.14 -OSTREE_P2P_REQS=2018.2 +SYSTEM_BWRAP_REQS=0.2.1 +SYSTEM_DBUS_PROXY_REQS=0.1.0 +OSTREE_REQS=2018.7 AC_USE_SYSTEM_EXTENSIONS AC_SYS_LARGEFILE @@ -40,6 +40,7 @@ AC_PROG_CC AM_PROG_CC_C_O AC_DISABLE_STATIC +AC_PROG_CC_STDC LT_PREREQ([2.2.6]) LT_INIT([disable-static]) @@ -49,6 +50,7 @@ AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([1.13.4 no-define no-dist-gzip dist-xz tar-ustar foreign subdir-objects]) AC_PROG_SED +AC_PROG_YACC AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.18.2]) @@ -142,6 +144,7 @@ [AS_HELP_STRING([--with-system-bubblewrap], [Use system bwrap executable [default=check $BWRAP]])], [BWRAP="$withval"], [BWRAP="${BWRAP:-false}"]) +CAP_LIB= AS_CASE([$BWRAP], [yes], [BWRAP=bwrap], @@ -155,8 +158,36 @@ [AC_MSG_ERROR([You need at least version $SYSTEM_BWRAP_REQS of bubblewrap to use the system installed version])]) AM_CONDITIONAL([WITH_SYSTEM_BWRAP], [true]) else + AC_CHECK_LIB(cap, cap_from_text, CAP_LIB=-lcap) + if test "$ac_cv_lib_cap_cap_from_text" != "yes"; then + AC_MSG_ERROR([*** libcap needed by bubblewrap but not found]) + fi + AM_CONDITIONAL([WITH_SYSTEM_BWRAP], [false]) fi +AC_SUBST([CAP_LIB]) + +AC_ARG_VAR([DBUS_PROXY], [dbus-proxy executable]) +AC_ARG_WITH([system-dbus-proxy], + [AS_HELP_STRING([--with-system-dbus-proxy], [Use system xdg-dbus-proxy executable [default=check $DBUS_PROXY]])], + [DBUS_PROXY="$withval"], + [DBUS_PROXY="${DBUS_PROXY:-false}"]) +AS_CASE([$DBUS_PROXY], + [yes], + [DBUS_PROXY=xdg-dbus-proxy], + [no], + [DBUS_PROXY=false], + [auto], + [AC_CHECK_PROG([DBUS_PROXY], [xdg-dbus-proxy], [xdg-dbus-proxy], [false])]) +if test "x$DBUS_PROXY" != xfalse; then + DBUS_PROXY_VERSION=[$( $DBUS_PROXY --version | sed 's,.*\ \([0-9]*\.[0-9]*\.[0-9]*\)$,\1,')] + AX_COMPARE_VERSION([$SYSTEM_DBUS_PROXY_REQS],[gt],[$DBUS_PROXY_VERSION], + [AC_MSG_ERROR([You need at least version $SYSTEM_DBUS_PROXY_REQS of xdg-dbus-proxy to use the system installed version (have $DBUS_PROXY_VERSION)])]) + AM_CONDITIONAL([WITH_SYSTEM_DBUS_PROXY], [true]) +else + AM_CONDITIONAL([WITH_SYSTEM_DBUS_PROXY], [false]) +fi + AC_CHECK_FUNCS(fdwalk) LIBGLNX_CONFIGURE @@ -252,28 +283,6 @@ [SUDO_BIN="sudo"], [SUDO_BIN=""]) AC_SUBST([SUDO_BIN]) -# Do we enable building peer to peer support using libostree’s experimental (non-stable) API? -# If so, OSTREE_ENABLE_EXPERIMENTAL_API needs to be #defined before ostree.h is -# included. -AC_ARG_ENABLE([p2p], - [AS_HELP_STRING([--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_P2P_REQS]) - - ostree_features=$($PKG_CONFIG --variable=features ostree-1) - AS_CASE(["$ostree_features"], - [*experimental*],[have_ostree_experimental=yes]) - - AS_IF([test "x$have_ostree_experimental" != "xyes"], - [AC_MSG_ERROR([Experimental API not found in ostree-1, which is needed for --enable-p2p. OSTree must be compiled with --enable-experimental-api.])]) - - AC_DEFINE([OSTREE_ENABLE_EXPERIMENTAL_API],[1],[Define if libostree experimental API should be enabled]) - AC_DEFINE([FLATPAK_ENABLE_P2P],[1],[Define if peer to peer support should be enabled]) -]) -AM_CONDITIONAL([ENABLE_P2P],[test x$enable_p2p = xyes]) - AC_ARG_WITH(system-install-dir, [AS_HELP_STRING([--with-system-install-dir=DIR], [Location of system installation [LOCALSTATEDIR/lib/flatpak]])], @@ -424,7 +433,7 @@ doc/Makefile doc/reference/Makefile flatpak.pc -lib/flatpak-version-macros.h +common/flatpak-version-macros.h doc/reference/version.xml doc/flatpak-docs.xml po/Makefile.in @@ -437,15 +446,21 @@ build_bwrap="no" fi +if test x$DBUS_PROXY = xfalse ; then + build_dbus_proxy="yes" +else + build_dbus_proxy="no" +fi + echo "" echo " Flatpak $FLATPAK_VERSION" echo " =============" echo "" echo " Build system helper: $enable_system_helper" echo " Build bubblewrap: $build_bwrap" +echo " Build dbus-proxy: $build_dbus_proxy" echo " Use sandboxed triggers: $enable_sandboxed_triggers" echo " Use seccomp: $enable_seccomp" echo " Privileged group: $PRIVILEGED_GROUP" echo " Privilege mode: $with_priv_mode" -echo " Peer to peer support: $enable_p2p" echo "" diff -Nru flatpak-0.11.3/data/Makefile.am.inc flatpak-1.0.7/data/Makefile.am.inc --- flatpak-0.11.3/data/Makefile.am.inc 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/data/Makefile.am.inc 2018-08-08 14:56:20.000000000 +0000 @@ -1,10 +1,13 @@ introspectiondir = $(datadir)/dbus-1/interfaces introspection_DATA = \ data/org.freedesktop.Flatpak.xml \ + data/org.freedesktop.portal.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 \ + data/org.freedesktop.portal.Flatpak.xml \ $(NULL) diff -Nru flatpak-0.11.3/data/org.freedesktop.Flatpak.xml flatpak-1.0.7/data/org.freedesktop.Flatpak.xml --- flatpak-0.11.3/data/org.freedesktop.Flatpak.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/data/org.freedesktop.Flatpak.xml 2019-02-11 12:42:20.000000000 +0000 @@ -30,6 +30,10 @@ + + + + @@ -128,6 +132,18 @@ + + + + + + + + + + + + diff -Nru flatpak-0.11.3/data/org.freedesktop.impl.portal.PermissionStore.xml flatpak-1.0.7/data/org.freedesktop.impl.portal.PermissionStore.xml --- flatpak-0.11.3/data/org.freedesktop.impl.portal.PermissionStore.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/data/org.freedesktop.impl.portal.PermissionStore.xml 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru flatpak-0.11.3/data/org.freedesktop.portal.Documents.xml flatpak-1.0.7/data/org.freedesktop.portal.Documents.xml --- flatpak-0.11.3/data/org.freedesktop.portal.Documents.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/data/org.freedesktop.portal.Documents.xml 2018-09-12 08:41:11.000000000 +0000 @@ -45,6 +45,12 @@ The permissions that the application has for a document store entry (see org.freedesktop.portal.Documents.GrantPermissions()) are reflected in the POSIX mode bits in the fuse filesystem. + + The D-Bus interface for the document portal is available under the + bus name org.freedesktop.portal.Documents and the object path + /org/freedesktop/portal/documents. + + This documentation describes version 3 of this interface. --> @@ -101,7 +107,7 @@ diff -Nru flatpak-0.11.3/data/org.freedesktop.portal.Flatpak.xml flatpak-1.0.7/data/org.freedesktop.portal.Flatpak.xml --- flatpak-0.11.3/data/org.freedesktop.portal.Flatpak.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/data/org.freedesktop.portal.Flatpak.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru flatpak-0.11.3/dbus-proxy/backport-autoptr.h flatpak-1.0.7/dbus-proxy/backport-autoptr.h --- flatpak-0.11.3/dbus-proxy/backport-autoptr.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/dbus-proxy/backport-autoptr.h 2018-09-13 08:54:51.000000000 +0000 @@ -0,0 +1,234 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- + * + * Copyright (C) 2015 Colin Walters + * + * GLIB - Library of useful routines for C programming + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#pragma once + +#include + +G_BEGIN_DECLS + +#if !GLIB_CHECK_VERSION(2, 43, 4) + +#define _GLIB_AUTOPTR_FUNC_NAME(TypeName) glib_autoptr_cleanup_##TypeName +#define _GLIB_AUTOPTR_TYPENAME(TypeName) TypeName##_autoptr +#define _GLIB_AUTO_FUNC_NAME(TypeName) glib_auto_cleanup_##TypeName +#define _GLIB_CLEANUP(func) __attribute__((cleanup(func))) +#define _GLIB_DEFINE_AUTOPTR_CHAINUP(ModuleObjName, ParentName) \ + typedef ModuleObjName *_GLIB_AUTOPTR_TYPENAME(ModuleObjName); \ + static inline void _GLIB_AUTOPTR_FUNC_NAME(ModuleObjName) (ModuleObjName **_ptr) { \ + _GLIB_AUTOPTR_FUNC_NAME(ParentName) ((ParentName **) _ptr); } \ + + +/* these macros are API */ +#define G_DEFINE_AUTOPTR_CLEANUP_FUNC(TypeName, func) \ + typedef TypeName *_GLIB_AUTOPTR_TYPENAME(TypeName); \ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ + static inline void _GLIB_AUTOPTR_FUNC_NAME(TypeName) (TypeName **_ptr) { if (*_ptr) (func) (*_ptr); } \ + G_GNUC_END_IGNORE_DEPRECATIONS +#define G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(TypeName, func) \ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ + static inline void _GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { (func) (_ptr); } \ + G_GNUC_END_IGNORE_DEPRECATIONS +#define G_DEFINE_AUTO_CLEANUP_FREE_FUNC(TypeName, func, none) \ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ + static inline void _GLIB_AUTO_FUNC_NAME(TypeName) (TypeName *_ptr) { if (*_ptr != none) (func) (*_ptr); } \ + G_GNUC_END_IGNORE_DEPRECATIONS +#define g_autoptr(TypeName) _GLIB_CLEANUP(_GLIB_AUTOPTR_FUNC_NAME(TypeName)) _GLIB_AUTOPTR_TYPENAME(TypeName) +#define g_auto(TypeName) _GLIB_CLEANUP(_GLIB_AUTO_FUNC_NAME(TypeName)) TypeName +#define g_autofree _GLIB_CLEANUP(g_autoptr_cleanup_generic_gfree) + +/** + * g_steal_pointer: + * @pp: a pointer to a pointer + * + * Sets @pp to %NULL, returning the value that was there before. + * + * Conceptually, this transfers the ownership of the pointer from the + * referenced variable to the "caller" of the macro (ie: "steals" the + * reference). + * + * The return value will be properly typed, according to the type of + * @pp. + * + * This can be very useful when combined with g_autoptr() to prevent the + * return value of a function from being automatically freed. Consider + * the following example (which only works on GCC and clang): + * + * |[ + * GObject * + * create_object (void) + * { + * g_autoptr(GObject) obj = g_object_new (G_TYPE_OBJECT, NULL); + * + * if (early_error_case) + * return NULL; + * + * return g_steal_pointer (&obj); + * } + * ]| + * + * It can also be used in similar ways for 'out' parameters and is + * particularly useful for dealing with optional out parameters: + * + * |[ + * gboolean + * get_object (GObject **obj_out) + * { + * g_autoptr(GObject) obj = g_object_new (G_TYPE_OBJECT, NULL); + * + * if (early_error_case) + * return FALSE; + * + * if (obj_out) + * *obj_out = g_steal_pointer (&obj); + * + * return TRUE; + * } + * ]| + * + * In the above example, the object will be automatically freed in the + * early error case and also in the case that %NULL was given for + * @obj_out. + * + * Since: 2.44 + */ +static inline gpointer +(g_steal_pointer) (gpointer pp) +{ + gpointer *ptr = (gpointer *) pp; + gpointer ref; + + ref = *ptr; + *ptr = NULL; + + return ref; +} + +/* type safety */ +#define g_steal_pointer(pp) \ + (0 ? (*(pp)) : (g_steal_pointer) (pp)) + +static inline void +g_autoptr_cleanup_generic_gfree (void *p) +{ + void **pp = (void**)p; + if (*pp) + g_free (*pp); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GAsyncQueue, g_async_queue_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBookmarkFile, g_bookmark_file_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GBytes, g_bytes_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GChecksum, g_checksum_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDateTime, g_date_time_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDir, g_dir_close) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GError, g_error_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHashTable, g_hash_table_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GHmac, g_hmac_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GIOChannel, g_io_channel_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GKeyFile, g_key_file_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GList, g_list_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GArray, g_array_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPtrArray, g_ptr_array_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainContext, g_main_context_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMainLoop, g_main_loop_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSource, g_source_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMappedFile, g_mapped_file_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMarkupParseContext, g_markup_parse_context_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(gchar, g_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GNode, g_node_destroy) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionContext, g_option_context_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOptionGroup, g_option_group_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GPatternSpec, g_pattern_spec_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GQueue, g_queue_free) +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GQueue, g_queue_clear) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRand, g_rand_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRegex, g_regex_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMatchInfo, g_match_info_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GScanner, g_scanner_destroy) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSequence, g_sequence_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSList, g_slist_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GStringChunk, g_string_chunk_free) +G_DEFINE_AUTO_CLEANUP_FREE_FUNC(GStrv, g_strfreev, NULL) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GThread, g_thread_unref) +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GMutex, g_mutex_clear) +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GCond, g_cond_clear) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimer, g_timer_destroy) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTimeZone, g_time_zone_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTree, g_tree_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariant, g_variant_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantBuilder, g_variant_builder_unref) +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantBuilder, g_variant_builder_clear) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantIter, g_variant_iter_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantDict, g_variant_dict_unref) +G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GVariantDict, g_variant_dict_clear) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVariantType, g_variant_type_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSubprocess, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSubprocessLauncher, g_object_unref) + +/* Add GObject-based types as needed. */ +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GAsyncResult, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GCancellable, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GConverter, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GConverterOutputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDataInputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFile, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileEnumerator, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileIOStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileInfo, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileInputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileMonitor, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GFileOutputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GInputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMemoryInputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMemoryOutputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMount, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOutputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSocket, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSocketAddress, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTask, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTlsCertificate, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTlsDatabase, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTlsInteraction, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDBusConnection, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDBusMessage, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVolumeMonitor, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GZlibCompressor, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GZlibDecompressor, g_object_unref) + +#endif /* !GLIB_CHECK_VERSION(2, 43, 3) */ + +#if !GLIB_CHECK_VERSION(2, 45, 8) + +static inline void +g_autoptr_cleanup_gstring_free (GString *string) +{ + if (string) + g_string_free (string, TRUE); +} + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GString, g_autoptr_cleanup_gstring_free) + +#endif + +G_END_DECLS diff -Nru flatpak-0.11.3/dbus-proxy/dbus-proxy.c flatpak-1.0.7/dbus-proxy/dbus-proxy.c --- flatpak-0.11.3/dbus-proxy/dbus-proxy.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/dbus-proxy/dbus-proxy.c 2018-09-13 08:54:51.000000000 +0000 @@ -25,20 +25,115 @@ #include #include #include - -#include "libglnx/libglnx.h" +#include +#include +#include #include "flatpak-proxy.h" static GList *proxies; static int sync_fd = -1; -static int -parse_generic_args (int n_args, const char *args[]) +static GBytes * +fd_readall_bytes (int fd, + GError **error) { - if (g_str_has_prefix (args[0], "--fd=")) + const guint maxreadlen = 4096; + struct stat stbuf; + gsize buf_allocated; + g_autofree guint8* buf = NULL; + gsize buf_size = 0; + + if (TEMP_FAILURE_RETRY (fstat (fd, &stbuf)) != 0) + { + int errsv = errno; + g_set_error_literal (error, + G_IO_ERROR, + g_io_error_from_errno (errsv), + g_strerror (errsv)); + return NULL; + } + + if (S_ISREG (stbuf.st_mode) && stbuf.st_size > 0) + buf_allocated = stbuf.st_size; + else + buf_allocated = 16; + + buf = g_malloc (buf_allocated); + + while (TRUE) { - const char *fd_s = args[0] + strlen ("--fd="); + gsize readlen = MIN (buf_allocated - buf_size, maxreadlen); + gssize bytes_read; + + do + bytes_read = read (fd, buf + buf_size, readlen); + while (G_UNLIKELY (bytes_read == -1 && errno == EINTR)); + + if (G_UNLIKELY (bytes_read == -1)) + { + int errsv = errno; + g_set_error_literal (error, + G_IO_ERROR, + g_io_error_from_errno (errsv), + g_strerror (errsv)); + return NULL; + } + if (bytes_read == 0) + break; + + buf_size += bytes_read; + if (buf_allocated - buf_size < maxreadlen) + buf = g_realloc (buf, buf_allocated *= 2); + } + + return g_bytes_new_take (g_steal_pointer (&buf), buf_size); +} + +static void +add_args (GBytes *bytes, + GPtrArray *args, + int pos) +{ + gsize data_len, remainder_len; + const guchar *data = g_bytes_get_data (bytes, &data_len); + guchar *s; + const guchar *remainder; + + remainder = data; + remainder_len = data_len; + s = memchr (remainder, 0, remainder_len); + while (s) + { + gsize len = s - remainder; + char *arg = g_strndup ((char *) remainder, len); + g_ptr_array_insert (args, pos++, arg); + remainder = s + 1; + remainder_len -= len + 1; + s = memchr (remainder, 0, remainder_len); + } + + if (remainder_len) + { + char *arg = g_strndup ((char *) remainder, remainder_len); + g_ptr_array_insert (args, pos++, arg); + } +} + + +static gboolean +parse_generic_args (GPtrArray *args, int *args_i) +{ + const char *arg = g_ptr_array_index (args, *args_i); + + if (g_str_has_prefix (arg, "--version")) + { + g_print ("%s %s\n", PACKAGE_NAME, PACKAGE_VERSION); + exit (0); + } + else if (g_str_has_prefix (arg, "--fd=")) + { + const char *fd_s = arg + strlen ("--fd="); char *endptr; int fd; @@ -46,131 +141,178 @@ if (fd < 0 || endptr == fd_s || *endptr != 0) { g_printerr ("Invalid fd %s\n", fd_s); - return -1; + return FALSE; } sync_fd = fd; - return 1; + *args_i += 1; + + return TRUE; + } + else if (g_str_has_prefix (arg, "--args=")) + { + const char *fd_s = arg + strlen ("--args="); + char *endptr; + int fd; + g_autoptr(GBytes) data = NULL; + g_autoptr(GError) error = NULL; + + fd = strtol (fd_s, &endptr, 10); + if (fd < 0 || endptr == fd_s || *endptr != 0) + { + g_printerr ("Invalid --args fd %s\n", fd_s); + return FALSE; + } + + data = fd_readall_bytes (fd, &error); + + if (data == NULL) + { + g_printerr ("Failed to load --args: %s\n", error->message); + return FALSE; + } + + *args_i += 1; + + add_args (data, args, *args_i); + + return TRUE; } else { - g_printerr ("Unknown argument %s\n", args[0]); - return -1; + g_printerr ("Unknown argument %s\n", arg); + return FALSE; } } -static int -start_proxy (int n_args, const char *args[]) +static gboolean +start_proxy (GPtrArray *args, int *args_i) { g_autoptr(FlatpakProxy) proxy = NULL; g_autoptr(GError) error = NULL; const char *bus_address, *socket_path; - int n; + const char *arg; - n = 0; - if (n_args < n + 1 || args[n][0] == '-') + if (*args_i >= args->len || ((char *) g_ptr_array_index (args, *args_i))[0] == '-') { g_printerr ("No bus address given\n"); - return -1; + return FALSE; } - bus_address = args[n++]; - if (n_args < n + 1 || args[n][0] == '-') + bus_address = g_ptr_array_index (args, *args_i); + *args_i += 1; + + if (*args_i >= args->len || ((char *) g_ptr_array_index (args, *args_i))[0] == '-') { g_printerr ("No socket path given\n"); - return -1; + return FALSE; } - socket_path = args[n++]; + + socket_path = g_ptr_array_index (args, *args_i); + *args_i += 1; proxy = flatpak_proxy_new (bus_address, socket_path); - while (n < n_args) + while (*args_i < args->len) { - if (args[n][0] != '-') + arg = g_ptr_array_index (args, *args_i); + + if (arg[0] != '-') break; - if (g_str_has_prefix (args[n], "--see=") || - g_str_has_prefix (args[n], "--talk=") || - g_str_has_prefix (args[n], "--filter=") || - g_str_has_prefix (args[n], "--own=")) + if (g_str_has_prefix (arg, "--see=") || + g_str_has_prefix (arg, "--talk=") || + g_str_has_prefix (arg, "--own=")) { FlatpakPolicy policy = FLATPAK_POLICY_SEE; - g_autofree char *name = NULL; + g_autofree char *name = g_strdup (strchr (arg, '=') + 1); gboolean wildcard = FALSE; - if (args[n][2] == 't') + if (arg[2] == 't') policy = FLATPAK_POLICY_TALK; - else if (args[n][2] == 'f') - policy = FLATPAK_POLICY_FILTERED; - else if (args[n][2] == 'o') + else if (arg[2] == 'o') policy = FLATPAK_POLICY_OWN; - name = g_strdup (strchr (args[n], '=') + 1); + if (g_str_has_suffix (name, ".*")) + { + name[strlen (name) - 2] = 0; + wildcard = TRUE; + } - if (policy == FLATPAK_POLICY_FILTERED) + if (name[0] == ':' || !g_dbus_is_name (name)) { - char *rule = strchr (name, '='); - if (rule != NULL) - { - *rule++ = 0; - flatpak_proxy_add_filter (proxy, name, rule); - } + g_printerr ("'%s' is not a valid dbus name\n", name); + return FALSE; } - else + + flatpak_proxy_add_policy (proxy, name, wildcard, policy); + + *args_i += 1; + } + else if (g_str_has_prefix (arg, "--call=") || + g_str_has_prefix (arg, "--broadcast=")) + { + g_autofree char *rest = g_strdup (strchr (arg, '=') + 1); + char *name = rest; + char *rule; + char *name_end = strchr (rest, '='); + gboolean wildcard = FALSE; + + if (name_end == NULL) { - if (g_str_has_suffix (name, ".*")) - { - name[strlen (name) - 2] = 0; - wildcard = TRUE; - } + g_printerr ("'%s' is not a valid name + rule\n", rest); + return FALSE; } - if (name[0] == ':' || !g_dbus_is_name (name)) + *name_end = 0; + rule = name_end + 1; + + if (g_str_has_suffix (name, ".*")) { - g_printerr ("'%s' is not a valid dbus name\n", name); - return -1; + name[strlen (name) - 2] = 0; + wildcard = TRUE; } - if (wildcard) - flatpak_proxy_add_wildcarded_policy (proxy, name, policy); + if (g_str_has_prefix (arg, "--call=")) + flatpak_proxy_add_call_rule (proxy, name, wildcard, rule); else - flatpak_proxy_add_policy (proxy, name, policy); + flatpak_proxy_add_broadcast_rule (proxy, name, wildcard, rule); + + *args_i += 1; } - else if (g_str_equal (args[n], "--log")) + else if (g_str_equal (arg, "--log")) { flatpak_proxy_set_log_messages (proxy, TRUE); + *args_i += 1; } - else if (g_str_equal (args[n], "--filter")) + else if (g_str_equal (arg, "--filter")) { flatpak_proxy_set_filter (proxy, TRUE); + *args_i += 1; } - else if (g_str_equal (args[n], "--sloppy-names")) + else if (g_str_equal (arg, "--sloppy-names")) { /* This means we're reporing the name changes for all unique names, which is needed for the a11y bus */ flatpak_proxy_set_sloppy_names (proxy, TRUE); + *args_i += 1; } else { - int res = parse_generic_args (n_args - n, &args[n]); - if (res == -1) - return -1; - - n += res - 1; /* res - 1, because we ++ below */ + if (!parse_generic_args (args, args_i)) + return FALSE; } - - n++; } if (!flatpak_proxy_start (proxy, &error)) { g_printerr ("Failed to start proxy for %s: %s\n", bus_address, error->message); - return -1; + return FALSE; } proxies = g_list_prepend (proxies, g_object_ref (proxy)); - return n; + return TRUE; } static gboolean @@ -191,30 +333,27 @@ main (int argc, const char *argv[]) { GMainLoop *service_loop; - int n_args, res; - const char **args; + int i, args_i; - n_args = argc - 1; - args = &argv[1]; + g_autoptr(GPtrArray) args = g_ptr_array_new_with_free_func (g_free); - while (n_args > 0) + for (i = 1; i < argc; i++) + g_ptr_array_add (args, g_strdup ((char *) argv[i])); + + args_i = 0; + while (args_i < args->len) { - if (args[0][0] == '-') + const char *arg = g_ptr_array_index (args, args_i); + if (arg[0] == '-') { - res = parse_generic_args (n_args, &args[0]); - if (res == -1) + if (!parse_generic_args (args, &args_i)) return 1; } else { - res = start_proxy (n_args, args); - if (res == -1) + if (!start_proxy (args, &args_i)) return 1; } - - g_assert (res > 0); - n_args -= res; - args += res; } if (proxies == NULL) diff -Nru flatpak-0.11.3/dbus-proxy/flatpak-proxy.c flatpak-1.0.7/dbus-proxy/flatpak-proxy.c --- flatpak-0.11.3/dbus-proxy/flatpak-proxy.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/dbus-proxy/flatpak-proxy.c 2018-09-13 08:54:51.000000000 +0000 @@ -47,9 +47,9 @@ * initial policy is that the the user is only allowed to TALK to the * bus itself (org.freedesktop.DBus, or no destination specified), and * TALK to its own unique id. All other clients are invisible. The - * well-known names can be specified exactly, or as a simple one-level - * wildcard like "org.foo.*" which matches "org.foo.bar", but not - * "org.foobar" or "org.foo.bar.gazonk". + * well-known names can be specified exactly, or as a arg0namespace + * wildcards like "org.foo.*" which matches "org.foo", "org.foo.bar", + * and "org.foo.bar.gazonk", but not "org.foobar". * * Polices are specified for well-known names, but they also affect * the owner of that name, so that the policy for a unique id is the @@ -73,9 +73,6 @@ * You can call the GetXXX methods on the name/id to get e.g. the peer pid * You get AccessDenied rather than NameHasNoOwner when sending messages to the name/id * - * FILTERED: - * You can send *some* method calls to the name (not id) - * * TALK: * You can send any method calls and signals to the name/id * You will receive broadcast signals from the name/id (if you have a match rule for them) @@ -84,14 +81,22 @@ * OWN: * You are allowed to call RequestName/ReleaseName/ListQueuedOwners on the name. * - * The policy applies only to signals and method calls. All replies - * (errors or method returns) are allowed once for an outstanding - * method call, and never otherwise. + * Additionally, there can be more detailed filters installed that + * limits what messages you can send to and receive broadcasts from. + * However, if you can *ever* call or recieve broadcasts from a name (even if + * filtered to some subset of paths/interfaces) its visibility is considered + * to be as TALK. + * + * The policy applies only to outgoing signals and method calls and + * incoming broadcast. All replies (errors or method returns) are + * allowed once for an outstanding method call, and never + * otherwise. * * Every peer on the bus is considered priviledged, and we thus trust - * it. So we rely on similar proxies to be running for all untrusted - * clients. Any such priviledged peer is allowed to send method call - * or unicast signal messages to the proxied client. Once another peer + * it and don't apply any filtering (except broadcasts). So we rely on + * similar proxies to be running for all untrusted clients. Any such + * priviledged peer is allowed to send method call or unicast signal + * messages to the proxied client. Once another peer * sends you a message the unique id of that peer is now made visible * (policy SEE) to the proxied client, allowing the client to track * caller lifetimes via NameOwnerChanged signals. @@ -155,6 +160,10 @@ * * When we get a reply to the initial Hello request we give * our own assigned unique id policy TALK. * + * There is also a mode called "sloppy-names" where you automatically get + * SEE access to all the unique names on the bus. This is used only for + * the a11y bus. + * * All messages sent to the bus itself are fully demarshalled * and handled on a per-method basis: * @@ -222,11 +231,25 @@ guint32 unix_fds; } Header; +typedef enum { + FILTER_TYPE_CALL = 1 << 0, + FILTER_TYPE_BROADCAST = 1 << 1, +} FilterTypeMask; + +#define FILTER_TYPE_ALL (FILTER_TYPE_CALL | FILTER_TYPE_BROADCAST) + typedef struct { - char *path; - char *interface; - char *member; + char *name; + gboolean name_is_subtree; + FlatpakPolicy policy; + + /* More detailed filter */ + FilterTypeMask types; + char *path; + gboolean path_is_subtree; + char *interface; + char *member; } Filter; static void header_free (Header *header); @@ -272,6 +295,7 @@ GHashTable *get_owner_reply; GHashTable *unique_id_policy; + GHashTable *unique_id_owned_names; }; typedef struct @@ -292,8 +316,6 @@ gboolean filter; gboolean sloppy_names; - GHashTable *wildcard_policy; - GHashTable *policy; GHashTable *filters; }; @@ -328,6 +350,12 @@ static void stop_reading (ProxySide *side); static void +string_list_free (GList *filters) +{ + g_list_free_full (filters, (GDestroyNotify) g_free); +} + +static void buffer_unref (Buffer *buffer) { g_assert (buffer->refcount > 0); @@ -377,6 +405,7 @@ g_hash_table_destroy (client->rewrite_reply); g_hash_table_destroy (client->get_owner_reply); g_hash_table_destroy (client->unique_id_policy); + g_hash_table_destroy (client->unique_id_owned_names); free_side (&client->client_side); free_side (&client->bus_side); @@ -413,6 +442,7 @@ client->rewrite_reply = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); client->get_owner_reply = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); client->unique_id_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); + client->unique_id_owned_names = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) string_list_free); } static FlatpakProxyClient * @@ -431,39 +461,6 @@ return client; } -static FlatpakPolicy -flatpak_proxy_get_wildcard_policy (FlatpakProxy *proxy, - const char *_name) -{ - guint policy, wildcard_policy = 0; - char *dot; - g_autofree char *name = g_strdup (_name); - - dot = name + strlen (name); - while (dot) - { - *dot = 0; - policy = GPOINTER_TO_INT (g_hash_table_lookup (proxy->wildcard_policy, name)); - wildcard_policy = MAX (wildcard_policy, policy); - dot = strrchr (name, '.'); - } - - return wildcard_policy; -} - -static FlatpakPolicy -flatpak_proxy_get_policy (FlatpakProxy *proxy, - const char *name) -{ - guint policy, wildcard_policy; - - policy = GPOINTER_TO_INT (g_hash_table_lookup (proxy->policy, name)); - - wildcard_policy = flatpak_proxy_get_wildcard_policy (proxy, name); - - return MAX (policy, wildcard_policy); -} - void flatpak_proxy_set_filter (FlatpakProxy *proxy, gboolean filter) @@ -485,29 +482,10 @@ proxy->log_messages = log; } -void -flatpak_proxy_add_policy (FlatpakProxy *proxy, - const char *name, - FlatpakPolicy policy) -{ - guint current_policy = GPOINTER_TO_INT (g_hash_table_lookup (proxy->policy, name)); - - current_policy = MAX (policy, current_policy); - - g_hash_table_replace (proxy->policy, g_strdup (name), GINT_TO_POINTER (current_policy)); -} - -void -flatpak_proxy_add_wildcarded_policy (FlatpakProxy *proxy, - const char *name, - FlatpakPolicy policy) -{ - g_hash_table_replace (proxy->wildcard_policy, g_strdup (name), GINT_TO_POINTER (policy)); -} - static void filter_free (Filter *filter) { + g_free (filter->name); g_free (filter->path); g_free (filter->interface); g_free (filter->member); @@ -517,54 +495,143 @@ static void filter_list_free (GList *filters) { - g_list_free_full (filters, (GDestroyNotify)filter_free); + g_list_free_full (filters, (GDestroyNotify) filter_free); } -/* rules are of the form [org.the.interface.[method|*]][@/obj/path] */ + static Filter * -filter_new (const char *rule) +filter_new (const char *name, + gboolean name_is_subtree, + FlatpakPolicy policy) { Filter *filter = g_new0 (Filter, 1); + + filter->name = g_strdup (name); + filter->name_is_subtree = name_is_subtree; + filter->policy = policy; + filter->types = FILTER_TYPE_ALL; + + return filter; +} + +// rules are of the form [*|org.the.interface.[method|*]]|[@/obj/path[/*]] +static Filter * +filter_new_from_rule (const char *name, + gboolean name_is_subtree, + FilterTypeMask types, + const char *rule) +{ + Filter *filter; const char *obj_path_start = NULL; const char *method_end = NULL; + filter = filter_new (name, name_is_subtree, FLATPAK_POLICY_TALK); + filter->types = types; + obj_path_start = strchr (rule, '@'); if (obj_path_start && obj_path_start[1] != 0) - filter->path = g_strdup (obj_path_start + 1); + { + filter->path = g_strdup (obj_path_start + 1); + + if (g_str_has_suffix (filter->path, "/*")) + { + filter->path_is_subtree = TRUE; + filter->path[strlen (filter->path) - 2] = 0; + } + } if (obj_path_start != NULL) method_end = obj_path_start; else - method_end = rule + strlen(rule); + method_end = rule + strlen (rule); - if (rule[0] != '@') + if (method_end != rule) { - filter->interface = g_strndup (rule, method_end - rule); - char *dot = strrchr (filter->interface, '.'); - if (dot != NULL) + if (rule[0] == '*') { - *dot = 0; - if (strcmp (dot+1, "*") != 0) - filter->member = g_strdup (dot + 1); - } + /* Both interface and method wildcarded */ + } + else + { + filter->interface = g_strndup (rule, method_end - rule); + char *dot = strrchr (filter->interface, '.'); + if (dot != NULL) + { + *dot = 0; + if (strcmp (dot + 1, "*") != 0) + filter->member = g_strdup (dot + 1); + } + } } return filter; } +static gboolean +filter_matches (Filter *filter, + FilterTypeMask type, + const char *path, + const char *interface, + const char *member) +{ + if (filter->policy < FLATPAK_POLICY_TALK || + (filter->types & type) == 0) + return FALSE; -void + if (filter->path) + { + if (path == NULL) + return FALSE; + + if (filter->path_is_subtree) + { + gsize filter_path_len = strlen (filter->path); + if (strncmp (path, filter->path, filter_path_len) != 0 || + (path[filter_path_len] != 0 && path[filter_path_len] != '/')) + return FALSE; + } + else if (strcmp (filter->path, path) != 0) + return FALSE; + } + + if (filter->interface && g_strcmp0 (filter->interface, interface) != 0) + return FALSE; + + if (filter->member && g_strcmp0 (filter->member, member) != 0) + return FALSE; + + return TRUE; +} + +static gboolean +any_filter_matches (GList *filters, + FilterTypeMask type, + const char *path, + const char *interface, + const char *member) +{ + GList *l; + + for (l = filters; l != NULL; l = l->next) + { + Filter *filter = l->data; + if (filter_matches (filter, type, path, interface, member)) + return TRUE; + } + + return FALSE; +} + + +static void flatpak_proxy_add_filter (FlatpakProxy *proxy, - const char *name, - const char *rule) + Filter *filter) { - Filter *filter; GList *filters, *new_filters; - filter = filter_new (rule); if (g_hash_table_lookup_extended (proxy->filters, - name, - NULL, (void **)&filters)) + filter->name, + NULL, (void **) &filters)) { new_filters = g_list_append (filters, filter); g_assert (new_filters == filters); @@ -572,10 +639,43 @@ else { filters = g_list_append (NULL, filter); - g_hash_table_insert (proxy->filters, g_strdup (name), filters); + g_hash_table_insert (proxy->filters, g_strdup (filter->name), filters); } } +void +flatpak_proxy_add_policy (FlatpakProxy *proxy, + const char *name, + gboolean name_is_subtree, + FlatpakPolicy policy) +{ + Filter *filter = filter_new (name, name_is_subtree, policy); + + flatpak_proxy_add_filter (proxy, filter); +} + +void +flatpak_proxy_add_call_rule (FlatpakProxy *proxy, + const char *name, + gboolean name_is_subtree, + const char *rule) +{ + Filter *filter = filter_new_from_rule (name, name_is_subtree, FILTER_TYPE_CALL, rule); + + flatpak_proxy_add_filter (proxy, filter); +} + +void +flatpak_proxy_add_broadcast_rule (FlatpakProxy *proxy, + const char *name, + gboolean name_is_subtree, + const char *rule) +{ + Filter *filter = filter_new_from_rule (name, name_is_subtree, FILTER_TYPE_BROADCAST, rule); + + flatpak_proxy_add_filter (proxy, filter); +} + static void flatpak_proxy_finalize (GObject *object) { @@ -586,8 +686,6 @@ g_assert (proxy->clients == NULL); - g_hash_table_destroy (proxy->policy); - g_hash_table_destroy (proxy->wildcard_policy); g_hash_table_destroy (proxy->filters); g_free (proxy->socket_path); @@ -1037,6 +1135,7 @@ guint8 header_type; guint32 reply_serial_pos = 0; const char *signature; + g_autoptr(Header) header = g_new0 (Header, 1); header->buffer = buffer_ref (buffer); @@ -1304,16 +1403,88 @@ } } + +static Filter *match_all[FLATPAK_POLICY_OWN + 1] = { NULL }; + + static FlatpakPolicy -flatpak_proxy_client_get_policy (FlatpakProxyClient *client, const char *source) -{ +flatpak_proxy_client_get_max_policy_and_matched (FlatpakProxyClient *client, + const char *source, + GList **matched_filters) +{ + GList *names, *filters, *l; + FlatpakPolicy max_policy = FLATPAK_POLICY_NONE; + g_autofree char *name = NULL; + gboolean exact_name_match; + char *dot; + + if (match_all[FLATPAK_POLICY_SEE] == NULL) + { + match_all[FLATPAK_POLICY_SEE] = filter_new ("", FALSE, FLATPAK_POLICY_SEE); + match_all[FLATPAK_POLICY_TALK] = filter_new ("", FALSE, FLATPAK_POLICY_TALK); + match_all[FLATPAK_POLICY_OWN] = filter_new ("", FALSE, FLATPAK_POLICY_OWN); + } + if (source == NULL) - return FLATPAK_POLICY_TALK; /* All clients can talk to the bus itself */ + { + if (matched_filters) + *matched_filters = g_list_append (*matched_filters, match_all[FLATPAK_POLICY_TALK]); + + return FLATPAK_POLICY_TALK; /* All clients can talk to the bus itself */ + } if (source[0] == ':') - return GPOINTER_TO_UINT (g_hash_table_lookup (client->unique_id_policy, source)); + { + /* Default to the unique id policy, i.e. TALK for self, and SEE for trusted peers */ + max_policy = GPOINTER_TO_UINT (g_hash_table_lookup (client->unique_id_policy, source)); + if (max_policy > FLATPAK_POLICY_NONE && matched_filters) + *matched_filters = g_list_append (*matched_filters, match_all[max_policy]); - return flatpak_proxy_get_policy (client->proxy, source); + /* Treat this as the merged list of filters for all the names the unique id ever owned */ + names = g_hash_table_lookup (client->unique_id_owned_names, source); + for (l = names; l != NULL; l = l->next) + { + const char *owned_name = l->data; + max_policy = MAX (max_policy, flatpak_proxy_client_get_max_policy_and_matched (client, owned_name, matched_filters)); + } + + + return max_policy; + } + + name = g_strdup (source); + exact_name_match = TRUE; + do + { + filters = g_hash_table_lookup (client->proxy->filters, name); + + for (l = filters; l != NULL; l = l->next) + { + Filter *filter = l->data; + + if (exact_name_match || filter->name_is_subtree) + { + max_policy = MAX (max_policy, filter->policy); + if (matched_filters) + *matched_filters = g_list_append (*matched_filters, filter); + } + } + + exact_name_match = FALSE; + dot = strrchr (name, '.'); + if (dot != NULL) + *dot = 0; + } + while (dot != NULL); + + return max_policy; +} + +static FlatpakPolicy +flatpak_proxy_client_get_max_policy (FlatpakProxyClient *client, + const char *source) +{ + return flatpak_proxy_client_get_max_policy_and_matched (client, source, NULL); } static void @@ -1330,14 +1501,23 @@ } } + static void -flatpak_proxy_client_update_unique_id_policy_from_name (FlatpakProxyClient *client, - const char *unique_id, - const char *as_name) +flatpak_proxy_client_add_unique_id_owned_name (FlatpakProxyClient *client, + const char *unique_id, + const char *owned_name) { - flatpak_proxy_client_update_unique_id_policy (client, + GList *names; + gboolean already_added; + + names = NULL; + already_added = g_hash_table_lookup_extended (client->unique_id_owned_names, unique_id, - flatpak_proxy_get_policy (client->proxy, as_name)); + NULL, (void **) &names); + names = g_list_append (names, g_strdup (owned_name)); + + if (!already_added) + g_hash_table_insert (client->unique_id_owned_names, g_strdup (unique_id), names); } @@ -1483,6 +1663,8 @@ FlatpakPolicy policy; const char *method; + g_autoptr(GList) filters = NULL; + if (header->has_reply_serial) { ExpectedReplyType expected_reply = @@ -1494,34 +1676,25 @@ return HANDLE_PASS; } - policy = flatpak_proxy_client_get_policy (client, header->destination); + policy = flatpak_proxy_client_get_max_policy_and_matched (client, header->destination, &filters); if (policy < FLATPAK_POLICY_SEE) return HANDLE_HIDE; - if (policy < FLATPAK_POLICY_FILTERED) + if (policy < FLATPAK_POLICY_TALK) return HANDLE_DENY; - if (policy == FLATPAK_POLICY_FILTERED) + if (!is_for_bus (header)) { - GList *filters = NULL, *l; - - if (header->destination) - filters = g_hash_table_lookup (client->proxy->filters, header->destination); - for (l = filters; l != NULL; l = l->next) - { - Filter *filter = l->data; - - if (header->type == G_DBUS_MESSAGE_TYPE_METHOD_CALL && - (filter->path == NULL || g_strcmp0 (filter->path, header->path) == 0) && - (filter->interface == NULL || g_strcmp0 (filter->interface, header->interface) == 0) && - (filter->member == NULL || g_strcmp0 (filter->member, header->member) == 0)) - return HANDLE_PASS; - } + if (policy == FLATPAK_POLICY_OWN || + any_filter_matches (filters, FILTER_TYPE_CALL, + header->path, + header->interface, + header->member)) + return HANDLE_PASS; return HANDLE_DENY; } - if (!is_for_bus (header)) - return HANDLE_PASS; + /* Its a bus call */ if (is_introspection_call (header)) { @@ -1603,6 +1776,7 @@ { GDBusMessage *message = g_dbus_message_new_from_blob (buffer->data, buffer->size, 0, NULL); GVariant *body; + g_autoptr(GVariant) arg0 = NULL; char *name = NULL; @@ -1657,7 +1831,7 @@ g_variant_is_of_type (arg0, G_VARIANT_TYPE_STRING)) { name = g_variant_get_string (arg0, NULL); - name_policy = flatpak_proxy_client_get_policy (client, name); + name_policy = flatpak_proxy_client_get_max_policy (client, name); if (has_policy) *has_policy = name_policy; @@ -1693,7 +1867,7 @@ g_variant_builder_init (&builder, G_VARIANT_TYPE_STRING_ARRAY); for (i = 0; names[i] != NULL; i++) { - if (flatpak_proxy_client_get_policy (client, names[i]) >= FLATPAK_POLICY_SEE) + if (flatpak_proxy_client_get_max_policy (client, names[i]) >= FLATPAK_POLICY_SEE) g_variant_builder_add (&builder, "s", names[i]); } g_free (names); @@ -1723,7 +1897,7 @@ { GDBusMessage *message = g_dbus_message_new_from_blob (buffer->data, buffer->size, 0, NULL); GVariant *body, *arg0, *arg1, *arg2; - const gchar *name, *old, *new; + const gchar *name, *new; gboolean filter = TRUE; if (message == NULL || @@ -1737,19 +1911,15 @@ return TRUE; name = g_variant_get_string (arg0, NULL); - old = g_variant_get_string (arg1, NULL); new = g_variant_get_string (arg2, NULL); - if (flatpak_proxy_client_get_policy (client, name) >= FLATPAK_POLICY_SEE || + if (flatpak_proxy_client_get_max_policy (client, name) >= FLATPAK_POLICY_SEE || (client->proxy->sloppy_names && name[0] == ':')) { if (name[0] != ':') { - if (old[0] != 0) - flatpak_proxy_client_update_unique_id_policy_from_name (client, old, name); - if (new[0] != 0) - flatpak_proxy_client_update_unique_id_policy_from_name (client, new, name); + flatpak_proxy_client_add_unique_id_owned_name (client, new, name); } filter = FALSE; @@ -1845,12 +2015,25 @@ gpointer key, value; gboolean has_wildcards = FALSE; - g_hash_table_iter_init (&iter, client->proxy->policy); + g_hash_table_iter_init (&iter, client->proxy->filters); while (g_hash_table_iter_next (&iter, &key, &value)) { const char *name = key; + GList *filters = value; + gboolean name_needs_subtree = FALSE; GDBusMessage *message; GVariant *match; + GList *l; + + for (l = filters; l != NULL; l = l->next) + { + Filter *filter = l->data; + if (filter->name_is_subtree) + { + name_needs_subtree = TRUE; + break; + } + } if (strcmp (name, "org.freedesktop.DBus") == 0) continue; @@ -1858,45 +2041,32 @@ /* AddMatch the name so we get told about ownership changes. Do it before the GetNameOwner to avoid races */ message = g_dbus_message_new_method_call ("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "AddMatch"); - match = g_variant_new_printf ("type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='%s'", name); + if (name_needs_subtree) + match = g_variant_new_printf ("type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0namespace='%s'", name); + else + match = g_variant_new_printf ("type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='%s'", name); g_dbus_message_set_body (message, g_variant_new_tuple (&match, 1)); queue_fake_message (client, message, EXPECTED_REPLY_FILTER); if (client->proxy->log_messages) - g_print ("C%d: -> org.freedesktop.DBus fake AddMatch for %s\n", client->last_serial, name); + g_print ("C%d: -> org.freedesktop.DBus fake %sAddMatch for %s\n", client->last_serial, name_needs_subtree ? "wildcarded " : "", name); - /* Get the current owner of the name (if any) so we can apply policy to it */ - message = g_dbus_message_new_method_call ("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "GetNameOwner"); - g_dbus_message_set_body (message, g_variant_new ("(s)", name)); - queue_fake_message (client, message, EXPECTED_REPLY_FAKE_GET_NAME_OWNER); - g_hash_table_replace (client->get_owner_reply, GINT_TO_POINTER (client->last_serial), g_strdup (name)); - - if (client->proxy->log_messages) - g_print ("C%d: -> org.freedesktop.DBus fake GetNameOwner for %s\n", client->last_serial, name); - } - - /* Same for wildcard proxies. Only here we don't know the actual names to GetNameOwner for, so we have to - list all current names */ - g_hash_table_iter_init (&iter, client->proxy->wildcard_policy); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *name = key; - GDBusMessage *message; - GVariant *match; - - has_wildcards = TRUE; - - /* AddMatch the name with arg0namespace so we get told about ownership changes to all subnames. - Do it before the GetNameOwner to avoid races */ - message = g_dbus_message_new_method_call ("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "AddMatch"); - match = g_variant_new_printf ("type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0namespace='%s'", name); - g_dbus_message_set_body (message, g_variant_new_tuple (&match, 1)); - queue_fake_message (client, message, EXPECTED_REPLY_FILTER); + if (!name_needs_subtree) + { + /* Get the current owner of the name (if any) so we can apply policy to it */ + message = g_dbus_message_new_method_call ("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "GetNameOwner"); + g_dbus_message_set_body (message, g_variant_new ("(s)", name)); + queue_fake_message (client, message, EXPECTED_REPLY_FAKE_GET_NAME_OWNER); + g_hash_table_replace (client->get_owner_reply, GINT_TO_POINTER (client->last_serial), g_strdup (name)); - if (client->proxy->log_messages) - g_print ("C%d: -> org.freedesktop.DBus fake AddMatch for %s.*\n", client->last_serial, name); + if (client->proxy->log_messages) + g_print ("C%d: -> org.freedesktop.DBus fake GetNameOwner for %s\n", client->last_serial, name); + } + else + has_wildcards = TRUE; /* Send ListNames below */ } + /* For wildcarded rules we don't know the actual names to GetNameOwner for, so we have to list all current names */ if (has_wildcards) { GDBusMessage *message; @@ -1913,6 +2083,8 @@ /* Stop reading from the client, to avoid incoming messages fighting with the ListNames roundtrip. We will start it again once we have handled the ListNames reply */ stop_reading (&client->client_side); + + /* Once we get the reply to this queue_wildcard_initial_name_ops() will be called and we continue there */ } } @@ -1931,14 +2103,14 @@ const gchar **names = g_variant_get_strv (arg0, NULL); int i; - /* Loop over all current names and get the owner for all the ones that match our wildcard + /* Loop over all current names and get the owner for all the ones that match our rules policies so that we can update the unique id policies for those */ for (i = 0; names[i] != NULL; i++) { const char *name = names[i]; if (name[0] != ':' && - flatpak_proxy_get_wildcard_policy (client->proxy, name) != FLATPAK_POLICY_NONE) + flatpak_proxy_client_get_max_policy (client, name) != FLATPAK_POLICY_NONE) { /* Get the current owner of the name (if any) so we can apply policy to it */ GDBusMessage *message = g_dbus_message_new_method_call ("org.freedesktop.DBus", "/", "org.freedesktop.DBus", "GetNameOwner"); @@ -1964,7 +2136,8 @@ if (client->authenticated && client->proxy->filter) { - g_autoptr(Header) header = NULL;; + g_autoptr(Header) header = NULL; + ; BusHandler handler; /* Filter and rewrite outgoing messages as needed */ @@ -2132,7 +2305,8 @@ { if (client->authenticated && client->proxy->filter) { - g_autoptr(Header) header = NULL;; + g_autoptr(Header) header = NULL; + ; GDBusMessage *rewritten; FlatpakPolicy policy; ExpectedReplyType expected_reply; @@ -2222,7 +2396,7 @@ if (header->type == G_DBUS_MESSAGE_TYPE_METHOD_RETURN) { g_autofree char *owner = get_arg0_string (buffer); - flatpak_proxy_client_update_unique_id_policy_from_name (client, owner, requested_name); + flatpak_proxy_client_add_unique_id_owned_name (client, owner, requested_name); } g_hash_table_remove (client->get_owner_reply, GINT_TO_POINTER (header->reply_serial)); @@ -2284,8 +2458,20 @@ /* All incoming broadcast signals are filtered according to policy */ if (header->type == G_DBUS_MESSAGE_TYPE_SIGNAL && header->destination == NULL) { - policy = flatpak_proxy_client_get_policy (client, header->sender); - if (policy < FLATPAK_POLICY_TALK) + g_autoptr(GList) filters = NULL; + gboolean filtered = TRUE; + + policy = flatpak_proxy_client_get_max_policy_and_matched (client, header->sender, &filters); + + if (policy == FLATPAK_POLICY_OWN || + (policy == FLATPAK_POLICY_TALK && + any_filter_matches (filters, FILTER_TYPE_BROADCAST, + header->path, + header->interface, + header->member))) + filtered = FALSE; + + if (filtered) { if (client->proxy->log_messages) g_print ("*FILTERED IN*\n"); @@ -2326,7 +2512,7 @@ for (p = line; p < line_end; p++) { - if (!_DBUS_ISASCII(*p)) + if (!_DBUS_ISASCII (*p)) return FALSE; /* Technically, the dbus spec allows all ASCII characters, but for robustness we also @@ -2351,14 +2537,14 @@ { guint8 next_char; - if (!g_str_has_prefix ((char *)line, AUTH_BEGIN)) + if (!g_str_has_prefix ((char *) line, AUTH_BEGIN)) return FALSE; /* dbus-daemon accepts either nothing, or a whitespace followed by anything as end of auth */ next_char = line[strlen (AUTH_BEGIN)]; - return (next_char == 0 || - next_char == ' ' || - next_char == '\t'); + return next_char == 0 || + next_char == ' ' || + next_char == '\t'; } static gssize @@ -2397,7 +2583,7 @@ g_byte_array_remove_range (client->auth_buffer, 0, offset); /* Abort if more than 16k before newline, similar to what dbus-daemon does */ - if (client->auth_buffer->len >= 16*1024) + if (client->auth_buffer->len >= 16 * 1024) return FIND_AUTH_END_ABORT; return FIND_AUTH_END_CONTINUE; @@ -2428,7 +2614,7 @@ if (!buffer_read (side, buffer, socket)) { if (buffer != side->current_read_buffer) - buffer_unref (buffer); + buffer_unref (buffer); break; } @@ -2586,10 +2772,8 @@ static void flatpak_proxy_init (FlatpakProxy *proxy) { - proxy->policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - proxy->filters = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)filter_list_free); - proxy->wildcard_policy = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - flatpak_proxy_add_policy (proxy, "org.freedesktop.DBus", FLATPAK_POLICY_TALK); + proxy->filters = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) filter_list_free); + flatpak_proxy_add_policy (proxy, "org.freedesktop.DBus", FALSE, FLATPAK_POLICY_TALK); } static void diff -Nru flatpak-0.11.3/dbus-proxy/flatpak-proxy.h flatpak-1.0.7/dbus-proxy/flatpak-proxy.h --- flatpak-0.11.3/dbus-proxy/flatpak-proxy.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/dbus-proxy/flatpak-proxy.h 2018-09-13 08:54:51.000000000 +0000 @@ -22,12 +22,11 @@ #define __FLATPAK_PROXY_H__ #include -#include "libglnx/libglnx.h" +#include "backport-autoptr.h" typedef enum { FLATPAK_POLICY_NONE, FLATPAK_POLICY_SEE, - FLATPAK_POLICY_FILTERED, FLATPAK_POLICY_TALK, FLATPAK_POLICY_OWN } FlatpakPolicy; @@ -52,13 +51,16 @@ gboolean sloppy_names); void flatpak_proxy_add_policy (FlatpakProxy *proxy, const char *name, + gboolean name_is_subtree, FlatpakPolicy policy); -void flatpak_proxy_add_wildcarded_policy (FlatpakProxy *proxy, - const char *name, - FlatpakPolicy policy); -void flatpak_proxy_add_filter (FlatpakProxy *proxy, - const char *name, - const char *rule); +void flatpak_proxy_add_call_rule (FlatpakProxy *proxy, + const char *name, + gboolean name_is_subtree, + const char *rule); +void flatpak_proxy_add_broadcast_rule (FlatpakProxy *proxy, + const char *name, + gboolean name_is_subtree, + const char *rule); gboolean flatpak_proxy_start (FlatpakProxy *proxy, GError **error); void flatpak_proxy_stop (FlatpakProxy *proxy); diff -Nru flatpak-0.11.3/dbus-proxy/Makefile.am.inc flatpak-1.0.7/dbus-proxy/Makefile.am.inc --- flatpak-0.11.3/dbus-proxy/Makefile.am.inc 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/dbus-proxy/Makefile.am.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -libexec_PROGRAMS += \ - flatpak-dbus-proxy \ - $(NULL) - -flatpak_dbus_proxy_SOURCES = \ - dbus-proxy/flatpak-proxy.c \ - dbus-proxy/flatpak-proxy.h \ - dbus-proxy/dbus-proxy.c \ - $(NULL) - -flatpak_dbus_proxy_LDADD = $(AM_LDADD) $(BASE_LIBS) libglnx.la -flatpak_dbus_proxy_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -I$(srcdir)/dbus-proxy diff -Nru flatpak-0.11.3/debian/changelog flatpak-1.0.7/debian/changelog --- flatpak-0.11.3/debian/changelog 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/changelog 2019-02-13 21:24:42.000000000 +0000 @@ -1,3 +1,79 @@ +flatpak (1.0.7-0ubuntu0.18.04.1) bionic-security; urgency=medium + + * Update to 1.0.7 (LP: #1815528) + * New upstream release + - SECURITY UPDATE: do not let the apply_extra script for a system + installation modify the host-side executable via /proc/self/exe, + similar to CVE-2019-5736 in runc + - CVE-2019-8308 + + -- Andrew Hayzen Wed, 13 Feb 2019 21:24:42 +0000 + +flatpak (1.0.6-0ubuntu0.1) bionic; urgency=medium + + [ Andrew Hayzen ] + * Update to 1.0.6 (LP: #1806220) + + [ Ondřej Nový ] + * debian/tests: Use AUTOPKGTEST_TMP instead of ADTTMP + + [ Simon McVittie ] + * New upstream release + - Avoid apply_extra scripts being able to create non-canonical + permissions such as setuid + * debian/watch: Only watch for stable-branch versions + * debian/tests/control: Mark build test as superficial (see #904979) + * debian/patches/debian/patches/test-webserver-Fix-race-condition.patch: + Drop patch, applied upstream + * Install upstream NEWS and README.md into flatpak and libflatpak-doc + * debian/libflatpak0.symbols: Update + * debian/flatpak-tests.lintian-overrides: Silence some + package-contains-documentation-outside-usr-share-doc false positives + * debian/patches/debian/patches/test-webserver-Fix-race-condition.patch: + Mark as forwarded + * debian/libflatpak0.symbols: Update + + -- Andrew Hayzen Fri, 30 Nov 2018 01:01:39 +0000 + +flatpak (1.0.1-0ubuntu0.1) bionic; urgency=medium + + * Update to 1.0.1 (LP: #1787917) + * New upstream stable release + - Update symbols file for new ABI + - Bump ostree (build)dependencies to 2018.7 + - Install new flatpak-coredumpctl script as an example + - Install zsh completion functions + - debian/copyright: Update + - debian/control: Update bubblewrap and ostree dependencies + - debian/control: Depend on python3 for build-time tests + - debian/control: flatpak Recommends p11-kit, for p11-kit-server + * debian/test.sh: Output test logs in the build log, even on success + * Remove --disable-document-portal, no longer necessary since 0.11.0 + * Version the ostree command-line tool dependency for the tests. + * debian/tests/gnome-desktop-testing: Enable full test coverage on machines + where the login name is "user" and the hostname is "host" + * debian/tests: Mark OCI tests as flaky for now, since hangs do not appear + to have been completely addressed + * debian/patches/test-webserver-Fix-race-condition.patch: + Fix a race condition in test setup + * debian/patches/debian/Use-Python-3-for-test-web-server.patch: + Rebase and expand to cover more test code + + -- Andrew Hayzen Sun, 02 Sep 2018 00:12:41 +0100 + +flatpak (0.11.7-0ubuntu0.1) bionic-proposed; urgency=medium + + * Update to 0.11.7 (LP: #1767215) + * New upstream release + - Drop patches that were applied upstream + - d/copyright: Update + - Build-depend on bison + - Add new flatpak-portal to flatpak.deb + - Update symbols file for new ABI + * Standards-Version: 4.1.4 (no changes required) + + -- Andrew Hayzen Thu, 03 May 2018 22:19:31 +0100 + flatpak (0.11.3-3) unstable; urgency=medium * Add Recommends: policykit-1. This is required when installing apps and diff -Nru flatpak-0.11.3/debian/control flatpak-1.0.7/debian/control --- flatpak-0.11.3/debian/control 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/control 2018-09-01 23:12:41.000000000 +0000 @@ -1,14 +1,16 @@ Source: flatpak Section: admin Priority: optional -Maintainer: Utopia Maintenance Team +Maintainer: Ubuntu Developers +XSBC-Original-Maintainer: Utopia Maintenance Team Uploaders: Matthias Klumpp , Simon McVittie , Build-Depends: attr , automake (>= 1.14.1), - bubblewrap (>= 0.1.8), + bison, + bubblewrap (>= 0.2.1), ca-certificates , dbus, debhelper (>= 10~), @@ -31,22 +33,23 @@ libglib2.0-dev (>= 2.44), libgpgme-dev (>= 1.1.8), libjson-glib-dev, - libostree-dev (>= 2017.14), + libostree-dev (>= 2018.7), libpolkit-gobject-1-dev, libseccomp-dev, libsoup2.4-dev, libxau-dev, libxml2-dev (>= 2.4), libxml2-utils, - ostree , + ostree (>= 2018.7) , procps, + python3 , shared-mime-info , xmlto , xsltproc , Build-Depends-Indep: libglib2.0-doc, libostree-doc, -Standards-Version: 4.1.3 +Standards-Version: 4.1.4 Homepage: http://flatpak.org/ Vcs-Git: https://salsa.debian.org/debian/flatpak.git Vcs-Browser: https://salsa.debian.org/debian/flatpak @@ -55,7 +58,7 @@ Package: flatpak Architecture: linux-any Depends: - bubblewrap (>= 0.1.8), + bubblewrap (>= 0.2.1), xdg-desktop-portal (>= 0.10), ${misc:Depends}, ${shlibs:Depends}, @@ -64,6 +67,7 @@ hicolor-icon-theme, gtk-update-icon-cache, libpam-systemd, + p11-kit, policykit-1, shared-mime-info, xdg-desktop-portal-gtk | xdg-desktop-portal-backend, @@ -100,7 +104,7 @@ gnupg, gtk-update-icon-cache, hicolor-icon-theme, - ostree (>= 2017.14), + ostree (>= 2018.7), shared-mime-info, ${misc:Depends}, ${shlibs:Depends}, @@ -134,7 +138,7 @@ gir1.2-flatpak-1.0 (= ${binary:Version}), libflatpak0 (= ${binary:Version}), libglib2.0-dev, - libostree-dev (>= 2017.14), + libostree-dev (>= 2018.7), libxml2-dev (>= 2.4), pkg-config, ${misc:Depends}, @@ -164,7 +168,7 @@ Architecture: linux-any Section: libs Depends: - bubblewrap (>= 0.1.8), + bubblewrap (>= 0.2.1), ${misc:Depends}, ${shlibs:Depends}, Pre-Depends: diff -Nru flatpak-0.11.3/debian/copyright flatpak-1.0.7/debian/copyright --- flatpak-0.11.3/debian/copyright 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/copyright 2018-09-01 23:12:41.000000000 +0000 @@ -11,7 +11,7 @@ © 2010 Lennart Poettering © 2011-2015 Colin Walters © 2014-2016 Alexander Larsson - © 2014-2017 Red Hat, Inc + © 2014-2018 Red Hat, Inc © 2016-2017 Free Software Foundation, Inc. © 2016 Piotr Drag © 2016 Aviary.pl @@ -24,6 +24,19 @@ License: LGPL-2.1+ Files: + app/parse-datetime.h + app/parse-datetime.y + data/org.freedesktop.portal.Flatpak.xml + tests/make-multi-collection-id-repo.sh + tests/test-build-update-repo.sh +Copyright: + © 1995-2015 Free Software Foundation, Inc. + © 2017 Endless, Inc. + © 2018 Red Hat, Inc + © 2018 Endless Mobile, Inc. +License: LGPL-2+ + +Files: acinclude.m4 Copyright: © 2008 Tim Toolan @@ -39,6 +52,12 @@ License: GPL-2+ with Autoconf exception Files: + common/valgrind-private.h +Copyright: + © 2000-2017 Julian Seward +License: bzip2-1.0.6 + +Files: debian/* Copyright: © 2015 David King @@ -82,6 +101,20 @@ License version 2 can be found in the file '/usr/share/common-licenses/GPL-2'. +License: LGPL-2+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. +Comment: + On Debian systems, the full text of the GNU Lesser General Public License + version 2 can be found in the file '/usr/share/common-licenses/LGPL-2'. + License: LGPL-2.1+ This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -105,3 +138,36 @@ permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. + +License: bzip2-1.0.6 + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + . + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + 2. The origin of this software must not be misrepresented; you must + not claim that you wrote the original software. If you use this + software in a product, an acknowledgment in the product + documentation would be appreciated but is not required. + . + 3. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + . + 4. The name of the author may not be used to endorse or promote + products derived from this software without specific prior written + permission. + . + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff -Nru flatpak-0.11.3/debian/flatpak.docs flatpak-1.0.7/debian/flatpak.docs --- flatpak-0.11.3/debian/flatpak.docs 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/debian/flatpak.docs 2018-11-30 01:01:39.000000000 +0000 @@ -0,0 +1,3 @@ +NEWS +README.md + diff -Nru flatpak-0.11.3/debian/flatpak.examples flatpak-1.0.7/debian/flatpak.examples --- flatpak-0.11.3/debian/flatpak.examples 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/flatpak.examples 2018-09-01 23:12:41.000000000 +0000 @@ -1 +1,2 @@ debian/tmp/usr/bin/flatpak-bisect +debian/tmp/usr/bin/flatpak-coredumpctl diff -Nru flatpak-0.11.3/debian/flatpak.install flatpak-1.0.7/debian/flatpak.install --- flatpak-0.11.3/debian/flatpak.install 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/flatpak.install 2018-09-01 23:12:41.000000000 +0000 @@ -7,9 +7,11 @@ lib/systemd/system/flatpak-system-helper.service usr/bin/flatpak usr/lib/flatpak/flatpak-dbus-proxy +usr/lib/flatpak/flatpak-portal usr/lib/flatpak/flatpak-session-helper usr/lib/flatpak/flatpak-system-helper usr/lib/systemd/user/dbus.service.d/flatpak.conf +usr/lib/systemd/user/flatpak-portal.service usr/lib/systemd/user/flatpak-session-helper.service usr/share/bash-completion usr/share/dbus-1/services @@ -19,6 +21,7 @@ usr/share/locale/*/LC_MESSAGES/flatpak.mo usr/share/polkit-1/actions usr/share/polkit-1/rules.d +usr/share/zsh/site-functions/_flatpak usr/share/zsh/vendor-completions usr/share/man/man1 usr/share/man/man5 usr/share/doc/flatpak/docbook.css diff -Nru flatpak-0.11.3/debian/flatpak-tests.lintian-overrides flatpak-1.0.7/debian/flatpak-tests.lintian-overrides --- flatpak-0.11.3/debian/flatpak-tests.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/debian/flatpak-tests.lintian-overrides 2018-11-30 01:01:39.000000000 +0000 @@ -0,0 +1,3 @@ +# Documentation about the directory it's in +flatpak-tests: package-contains-documentation-outside-usr-share-doc usr/libexec/installed-tests/*/README + diff -Nru flatpak-0.11.3/debian/.gitignore flatpak-1.0.7/debian/.gitignore --- flatpak-0.11.3/debian/.gitignore 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/.gitignore 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -/*.debhelper -/*.substvars -/flatpak-tests/ -/flatpak/ -/gir1.2-flatpak-1.0/ -/libflatpak-dev/ -/libflatpak-doc/ -/libflatpak0/ diff -Nru flatpak-0.11.3/debian/libflatpak0.symbols flatpak-1.0.7/debian/libflatpak0.symbols --- flatpak-0.11.3/debian/libflatpak0.symbols 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/libflatpak0.symbols 2018-11-30 01:01:39.000000000 +0000 @@ -44,6 +44,7 @@ flatpak_installation_list_remote_refs_sync@Base 0.5.2 flatpak_installation_list_remote_related_refs_sync@Base 0.6.7 flatpak_installation_list_remotes@Base 0.5.2 + flatpak_installation_list_remotes_by_type@Base 0.11.4 flatpak_installation_load_app_overrides@Base 0.5.2 flatpak_installation_modify_remote@Base 0.5.2+git20160516 flatpak_installation_new_for_path@Base 0.5.2 @@ -53,14 +54,18 @@ flatpak_installation_prune_local_repo@Base 0.9.99 flatpak_installation_remove_local_ref_sync@Base 0.9.99 flatpak_installation_remove_remote@Base 0.5.2+git20160516 + flatpak_installation_run_triggers@Base 1.0.3 flatpak_installation_set_config_sync@Base 0.10.0 flatpak_installation_uninstall@Base 0.5.2 + flatpak_installation_uninstall_full@Base 0.11.8 flatpak_installation_update@Base 0.5.2 flatpak_installation_update_appstream_full_sync@Base 0.9.4 flatpak_installation_update_appstream_sync@Base 0.5.2 flatpak_installation_update_full@Base 0.6.5 flatpak_installation_update_remote_sync@Base 0.6.13 flatpak_installed_ref_get_deploy_dir@Base 0.5.2 + flatpak_installed_ref_get_eol@Base 0.11.4 + flatpak_installed_ref_get_eol_rebase@Base 0.11.4 flatpak_installed_ref_get_installed_size@Base 0.5.2 flatpak_installed_ref_get_is_current@Base 0.5.2 flatpak_installed_ref_get_latest_commit@Base 0.5.2 @@ -68,7 +73,21 @@ flatpak_installed_ref_get_subpaths@Base 0.5.2+git20160516 flatpak_installed_ref_get_type@Base 0.5.2 flatpak_installed_ref_load_metadata@Base 0.5.2 + flatpak_instance_get_all@Base 1.0.2 + flatpak_instance_get_app@Base 1.0.2 + flatpak_instance_get_arch@Base 1.0.2 + flatpak_instance_get_branch@Base 1.0.2 + flatpak_instance_get_child_pid@Base 1.0.2 + flatpak_instance_get_commit@Base 1.0.2 + flatpak_instance_get_id@Base 1.0.2 + flatpak_instance_get_info@Base 1.0.2 + flatpak_instance_get_pid@Base 1.0.2 + flatpak_instance_get_runtime@Base 1.0.2 + flatpak_instance_get_runtime_commit@Base 1.0.2 + flatpak_instance_get_type@Base 1.0.2 + flatpak_instance_is_running@Base 1.0.2 flatpak_oci_error_quark@Base 0.9.1 + flatpak_portal_error_get_type@Base 0.11.8 flatpak_portal_error_quark@Base 0.5.2+git20160516 flatpak_ref_format_ref@Base 0.5.2 flatpak_ref_get_arch@Base 0.5.2 @@ -82,6 +101,7 @@ flatpak_ref_parse@Base 0.5.2 flatpak_related_ref_get_subpaths@Base 0.6.7 flatpak_related_ref_get_type@Base 0.6.7 + flatpak_related_ref_should_autoprune@Base 0.11.8 flatpak_related_ref_should_delete@Base 0.6.7 flatpak_related_ref_should_download@Base 0.6.7 flatpak_remote_get_appstream_dir@Base 0.5.2 @@ -99,6 +119,11 @@ flatpak_remote_get_type@Base 0.5.2 flatpak_remote_get_url@Base 0.5.2 flatpak_remote_new@Base 0.5.2+git20160516 + flatpak_remote_ref_get_download_size@Base 0.11.4 + flatpak_remote_ref_get_eol@Base 0.11.4 + flatpak_remote_ref_get_eol_rebase@Base 0.11.4 + flatpak_remote_ref_get_installed_size@Base 0.11.4 + flatpak_remote_ref_get_metadata@Base 0.11.4 flatpak_remote_ref_get_remote_name@Base 0.5.2 flatpak_remote_ref_get_type@Base 0.5.2 flatpak_remote_set_collection_id@Base 0.9.8 @@ -113,4 +138,47 @@ flatpak_remote_set_url@Base 0.5.2+git20160516 flatpak_remote_type_get_type@Base 0.9.8 flatpak_storage_type_get_type@Base 0.8.0 + flatpak_transaction_add_default_dependency_sources@Base 0.99.1 + flatpak_transaction_add_dependency_source@Base 0.99.1 + flatpak_transaction_add_install@Base 0.11.8 + flatpak_transaction_add_install_bundle@Base 0.11.8 + flatpak_transaction_add_install_flatpakref@Base 0.99.3 + flatpak_transaction_add_uninstall@Base 0.11.8 + flatpak_transaction_add_update@Base 0.11.8 + flatpak_transaction_error_details_get_type@Base 0.11.8 + flatpak_transaction_get_current_operation@Base 0.99.1 + flatpak_transaction_get_installation@Base 0.99.3 + flatpak_transaction_get_operations@Base 0.99.1 + flatpak_transaction_get_type@Base 0.11.8 + flatpak_transaction_is_empty@Base 0.11.8 + flatpak_transaction_new_for_installation@Base 0.11.8 + flatpak_transaction_operation_get_bundle_path@Base 0.99.1 + flatpak_transaction_operation_get_commit@Base 0.99.1 + flatpak_transaction_operation_get_metadata@Base 0.99.1 + flatpak_transaction_operation_get_old_metadata@Base 0.99.1 + flatpak_transaction_operation_get_operation_type@Base 0.99.1 + flatpak_transaction_operation_get_ref@Base 0.99.1 + flatpak_transaction_operation_get_remote@Base 0.99.1 + flatpak_transaction_operation_get_type@Base 0.99.1 + flatpak_transaction_operation_type_get_type@Base 0.11.8 + flatpak_transaction_operation_type_to_string@Base 0.99.3 + flatpak_transaction_progress_get_is_estimating@Base 0.11.8 + flatpak_transaction_progress_get_progress@Base 0.11.8 + flatpak_transaction_progress_get_status@Base 0.11.8 + flatpak_transaction_progress_get_type@Base 0.11.8 + flatpak_transaction_progress_set_update_frequency@Base 0.11.8 + flatpak_transaction_remote_reason_get_type@Base 0.99.3 + flatpak_transaction_result_get_type@Base 0.11.8 + flatpak_transaction_run@Base 0.11.8 + flatpak_transaction_set_default_arch@Base 0.99.3 + flatpak_transaction_set_disable_dependencies@Base 0.11.8 + flatpak_transaction_set_disable_prune@Base 0.11.8 + flatpak_transaction_set_disable_related@Base 0.11.8 + flatpak_transaction_set_disable_static_deltas@Base 0.11.8 + flatpak_transaction_set_force_uninstall@Base 0.11.8 + flatpak_transaction_set_no_deploy@Base 0.11.8 + flatpak_transaction_set_no_pull@Base 0.11.8 + flatpak_transaction_set_reinstall@Base 0.11.8 + flatpak_uninstall_flags_get_type@Base 0.11.8 flatpak_update_flags_get_type@Base 0.5.2 + diff -Nru flatpak-0.11.3/debian/libflatpak-doc.docs flatpak-1.0.7/debian/libflatpak-doc.docs --- flatpak-0.11.3/debian/libflatpak-doc.docs 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/debian/libflatpak-doc.docs 2018-11-30 01:01:39.000000000 +0000 @@ -0,0 +1,3 @@ +NEWS +README.md + diff -Nru flatpak-0.11.3/debian/patches/debian/Use-Python-3-for-test-web-server.patch flatpak-1.0.7/debian/patches/debian/Use-Python-3-for-test-web-server.patch --- flatpak-0.11.3/debian/patches/debian/Use-Python-3-for-test-web-server.patch 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/patches/debian/Use-Python-3-for-test-web-server.patch 2018-11-30 01:01:39.000000000 +0000 @@ -1,31 +1,93 @@ From: Simon McVittie Date: Wed, 17 Jan 2018 14:20:46 +0000 -Subject: Use Python 3 for test web server - -The parts of libtest.sh and tests/make-test-runtime.sh that deal with -Python 2 are unaffected: they are only used in the flatpak-builder -tests. +Subject: Use Python 3 for tests Forwarded: not-needed --- - tests/test-webserver.sh | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) + tests/http-utils-test-server.py | 2 +- + tests/oci-registry-client.py | 2 +- + tests/oci-registry-server.py | 2 +- + tests/test-http-utils.sh | 2 +- + tests/test-oci-registry.sh | 4 ++-- + tests/test-webserver.sh | 4 ++-- + 6 files changed, 8 insertions(+), 8 deletions(-) +diff --git a/tests/http-utils-test-server.py b/tests/http-utils-test-server.py +index ec3826d..03f0ac3 100644 +--- a/tests/http-utils-test-server.py ++++ b/tests/http-utils-test-server.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + + from wsgiref.handlers import format_date_time + from email.utils import parsedate +diff --git a/tests/oci-registry-client.py b/tests/oci-registry-client.py +index 2312a99..06db4cc 100644 +--- a/tests/oci-registry-client.py ++++ b/tests/oci-registry-client.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + + from __future__ import print_function + +diff --git a/tests/oci-registry-server.py b/tests/oci-registry-server.py +index aa3045e..fa46358 100644 +--- a/tests/oci-registry-server.py ++++ b/tests/oci-registry-server.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/python ++#!/usr/bin/python3 + + from __future__ import print_function + +diff --git a/tests/test-http-utils.sh b/tests/test-http-utils.sh +index c4107ea..2247d2b 100755 +--- a/tests/test-http-utils.sh ++++ b/tests/test-http-utils.sh +@@ -21,7 +21,7 @@ set -euo pipefail + + . $(dirname $0)/libtest.sh + +-$(dirname $0)/test-webserver.sh "" "python $test_srcdir/http-utils-test-server.py 0" ++$(dirname $0)/test-webserver.sh "" "python3 $test_srcdir/http-utils-test-server.py 0" + FLATPAK_HTTP_PID=$(cat httpd-pid) + mv httpd-port httpd-port-main + port=$(cat httpd-port-main) +diff --git a/tests/test-oci-registry.sh b/tests/test-oci-registry.sh +index d32f7e6..623e55d 100755 +--- a/tests/test-oci-registry.sh ++++ b/tests/test-oci-registry.sh +@@ -27,11 +27,11 @@ echo "1..13" + + # Start the fake registry server + +-$(dirname $0)/test-webserver.sh "" "python $test_srcdir/oci-registry-server.py 0" ++$(dirname $0)/test-webserver.sh "" "python3 $test_srcdir/oci-registry-server.py 0" + FLATPAK_HTTP_PID=$(cat httpd-pid) + mv httpd-port httpd-port-main + port=$(cat httpd-port-main) +-client="python $test_srcdir/oci-registry-client.py 127.0.0.1:$port" ++client="python3 $test_srcdir/oci-registry-client.py 127.0.0.1:$port" + + setup_repo_no_add oci + diff --git a/tests/test-webserver.sh b/tests/test-webserver.sh -index 2964ce9..c1f26d0 100755 +index 6d10b01..1b0fb8b 100755 --- a/tests/test-webserver.sh +++ b/tests/test-webserver.sh -@@ -6,7 +6,7 @@ dir=$1 +@@ -3,7 +3,7 @@ + set -euo pipefail + + dir=$1 +-cmd=${2:-python -m SimpleHTTPServer 0} ++cmd=${2:-python3 -m http.server 0} test_tmpdir=$(pwd) - cd ${dir} --env PYTHONUNBUFFERED=1 setsid python -m SimpleHTTPServer 0 >${test_tmpdir}/httpd-output & -+env PYTHONUNBUFFERED=1 setsid python3 -m http.server 0 >${test_tmpdir}/httpd-output & - child_pid=$! - - for x in $(seq 50); do -@@ -14,7 +14,7 @@ for x in $(seq 50); do - cp ${test_tmpdir}/httpd-output{,.tmp} + [ "$dir" != "" ] && cd ${dir} +@@ -21,7 +21,7 @@ for x in $(seq 300); do + echo >&2 # If it's non-empty, see whether it matches our regexp if test -s ${test_tmpdir}/httpd-output.tmp; then - sed -e 's,Serving HTTP on 0.0.0.0 port \([0-9]*\) \.\.\.,\1,' < ${test_tmpdir}/httpd-output.tmp > ${test_tmpdir}/httpd-port @@ -33,3 +95,4 @@ if ! cmp ${test_tmpdir}/httpd-output.tmp ${test_tmpdir}/httpd-port 1>/dev/null; then # If so, we've successfully extracted the port break + diff -Nru flatpak-0.11.3/debian/patches/Fix-assertion-when-no-gsettings-schema-installed.patch flatpak-1.0.7/debian/patches/Fix-assertion-when-no-gsettings-schema-installed.patch --- flatpak-0.11.3/debian/patches/Fix-assertion-when-no-gsettings-schema-installed.patch 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/patches/Fix-assertion-when-no-gsettings-schema-installed.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,54 +0,0 @@ -From: Patrick Griffis -Date: Sun, 25 Feb 2018 20:18:41 -0500 -Subject: Fix assertion when no gsettings schema installed - -Fixes #1455 - -Closes: #1456 -Approved by: mwleeds -Applied-upstream: 1.11.4, commit:82f993e1c79911f5241c67f2347136156bf9909c ---- - common/flatpak-utils.c | 27 +++++++++++++++++---------- - 1 file changed, 17 insertions(+), 10 deletions(-) - -diff --git a/common/flatpak-utils.c b/common/flatpak-utils.c -index 9b18be3..afa1590 100644 ---- a/common/flatpak-utils.c -+++ b/common/flatpak-utils.c -@@ -524,19 +524,26 @@ flatpak_get_gtk_theme (void) - { - /* The schema may not be installed so check first */ - GSettingsSchemaSource *source = g_settings_schema_source_get_default (); -- g_autoptr(GSettingsSchema) schema = g_settings_schema_source_lookup (source, -- "org.gnome.desktop.interface", FALSE); -+ g_autoptr(GSettingsSchema) schema = NULL; - -- if (schema == NULL) -- g_once_init_leave (>k_theme, g_strdup ("")); -+ if (source == 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")); -+ 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")); -+ } - } - } - diff -Nru flatpak-0.11.3/debian/patches/series flatpak-1.0.7/debian/patches/series --- flatpak-0.11.3/debian/patches/series 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/patches/series 2018-11-30 01:01:39.000000000 +0000 @@ -1,4 +1 @@ -Update-Indonesian-translation.patch -Fix-assertion-when-no-gsettings-schema-installed.patch -Update-Czech-translation.patch debian/Use-Python-3-for-test-web-server.patch diff -Nru flatpak-0.11.3/debian/patches/Update-Czech-translation.patch flatpak-1.0.7/debian/patches/Update-Czech-translation.patch --- flatpak-0.11.3/debian/patches/Update-Czech-translation.patch 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/patches/Update-Czech-translation.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -From: AsciiWolf -Date: Fri, 23 Feb 2018 21:08:05 +0100 -Subject: Update Czech translation - -Fix small typo - -Applied-upstream: 1.11.4, commit:56e40530510495062b1a2b87d01014d2f595187a ---- - po/cs.po | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/po/cs.po b/po/cs.po -index 67e4304..09e028f 100644 ---- a/po/cs.po -+++ b/po/cs.po -@@ -1883,7 +1883,7 @@ msgid "" - " Finding applications and runtimes" - msgstr "" - "\n" --" Vyhledávají se aplikace a prostředí" -+" Vyhledávání aplikací a prostředí" - - #: app/flatpak-main.c:72 - msgid "Search for remote apps/runtimes" diff -Nru flatpak-0.11.3/debian/patches/Update-Indonesian-translation.patch flatpak-1.0.7/debian/patches/Update-Indonesian-translation.patch --- flatpak-0.11.3/debian/patches/Update-Indonesian-translation.patch 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/patches/Update-Indonesian-translation.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,460 +0,0 @@ -From: Kukuh Syafaat -Date: Thu, 22 Feb 2018 16:01:45 +0700 -Subject: Update Indonesian translation - -Applied-upstream: 1.11.4, commit:92b78122958e694f4b9faec5272954b2d6afdb77 ---- - po/id.po | 154 ++++++++++++++++++++++++++++++--------------------------------- - 1 file changed, 74 insertions(+), 80 deletions(-) - -diff --git a/po/id.po b/po/id.po -index 50a940d..c78b213 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: 2018-02-19 14:20+0100\n" --"PO-Revision-Date: 2018-01-18 17:44+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.5\n" -+"X-Generator: Poedit 2.0.6\n" - - #: app/flatpak-builtins-add-remote.c:57 - msgid "Do nothing if the provided remote exists" -@@ -285,7 +285,7 @@ msgstr "HOMEDIR" - - #: app/flatpak-builtins-build-bundle.c:64 - msgid "OSTree commit to create a delta bundle from" --msgstr "" -+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 -@@ -1143,16 +1143,12 @@ msgid "Show metadata" - msgstr "Tampilkan metadata" - - #: app/flatpak-builtins-info.c:60 --#, fuzzy - msgid "Show permissions" --msgstr "Tampilkan ekstensi" -+msgstr "Tampilkan izin" - - #: app/flatpak-builtins-info.c:61 --#, fuzzy - msgid "Query file access" --msgstr "" --"\n" --" Kelola akses berkas" -+msgstr "Akses berkas kueri" - - #: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 - #: app/flatpak-builtins-update.c:64 -@@ -1175,7 +1171,7 @@ msgstr "ref tidak ada di asal" - - #: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 - msgid "Warning: Commit has no flatpak metadata\n" --msgstr "" -+msgstr "Peringatan: Komit tidak memiliki metadata flatpak\n" - - #: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 - msgid "Ref:" -@@ -1199,9 +1195,8 @@ msgid "Origin:" - msgstr "Asal:" - - #: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 --#, fuzzy - msgid "Collection ID:" --msgstr "ID Koleksi" -+msgstr "ID Koleksi:" - - #: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 - msgid "Date:" -@@ -1307,7 +1302,7 @@ msgstr " Komit:" - #: app/flatpak-builtins-info-remote.c:292 - #, c-format - msgid "Warning: Commit %s has no flatpak metadata\n" --msgstr "" -+msgstr "Peringatan: Komit %s tidak memiliki metadata flatpak\n" - - #: app/flatpak-builtins-install.c:58 - msgid "Don't pull, only install from local cache" -@@ -2006,9 +2001,8 @@ msgid "Export a build dir to a repository" - msgstr "Ekspor direktori bangun ke repositori" - - #: app/flatpak-main.c:104 --#, fuzzy - msgid "Create a bundle file from a ref in a local repository" --msgstr "Buat berkas bundel dari direktori bangun" -+msgstr "Buat berkas bundel dari ref pada repositori lokal" - - #: app/flatpak-main.c:105 - msgid "Import a bundle file" -@@ -2134,7 +2128,7 @@ msgstr "" - - #: 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-dir.c:1524 common/flatpak-dir.c:10656 - #: common/flatpak-utils.c:1312 common/flatpak-utils.c:1406 - #, c-format - msgid "%s not installed" -@@ -2414,281 +2408,281 @@ msgstr "Tidak ada penimpaan yang ditemukan untuk %s" - msgid "While opening repository %s: " - msgstr "Saat membuka repositori %s: " - --#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 -+#: 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:2122 common/flatpak-dir.c:2125 -+#: 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 "" -+msgstr "Gagal menemukan revisi terbaru untuk %s dari %s: %s\n" - --#: common/flatpak-dir.c:2761 -+#: 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:2766 -+#: 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:2773 -+#: 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:2787 -+#: 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:2790 -+#: 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:2805 -+#: common/flatpak-dir.c:2806 - #, c-format - msgid "While downloading %s: " - msgstr "Saat mengunduh %s: " - --#: common/flatpak-dir.c:2812 -+#: 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:2823 -+#: 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:2882 -+#: 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:3100 -+#: common/flatpak-dir.c:3101 - #, c-format - msgid "%s commit %s already installed" - msgstr "%s komit %s sudah terpasang" - --#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 -+#: 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:3658 -+#: 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:4331 -+#: common/flatpak-dir.c:4332 - msgid "Not enough memory" - msgstr "Memori tidak cukup" - --#: common/flatpak-dir.c:4350 -+#: common/flatpak-dir.c:4351 - msgid "Failed to read from exported file" - msgstr "Gagal membaca dari berkas yang diekspor" - --#: common/flatpak-dir.c:4541 -+#: common/flatpak-dir.c:4542 - msgid "Error reading mimetype xml file" - msgstr "Kesalahan saat membaca berkas xml mimetype" - --#: common/flatpak-dir.c:4546 -+#: common/flatpak-dir.c:4547 - msgid "Invalid mimetype xml file" - msgstr "Berkas xml mimetype tidak valid" - --#: common/flatpak-dir.c:5089 -+#: common/flatpak-dir.c:5090 - msgid "While getting detached metadata: " - msgstr "Saat mendapatkan metadata yang terpisah: " - --#: common/flatpak-dir.c:5107 -+#: common/flatpak-dir.c:5108 - msgid "While creating extradir: " - msgstr "Saat membuat direktori ekstra: " - --#: common/flatpak-dir.c:5128 -+#: common/flatpak-dir.c:5129 - msgid "Invalid sha256 for extra data" - msgstr "Sha256 tidak valid untuk data ekstra" - --#: common/flatpak-dir.c:5157 -+#: common/flatpak-dir.c:5158 - msgid "Wrong size for extra data" - msgstr "Ukuran yang salah untuk data ekstra" - --#: common/flatpak-dir.c:5161 -+#: common/flatpak-dir.c:5162 - msgid "Invalid checksum for extra data" - msgstr "Checksum tidak valid untuk data ekstra" - --#: common/flatpak-dir.c:5170 -+#: 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:5340 -+#: 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:5419 -+#: common/flatpak-dir.c:5420 - #, c-format - msgid "While trying to resolve ref %s: " - msgstr "Saat mencoba menyelesaikan ref %s: " - --#: common/flatpak-dir.c:5434 -+#: common/flatpak-dir.c:5435 - #, c-format - msgid "%s is not available" - msgstr "%s tak tersedia" - --#: 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 -+#: 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:5468 -+#: common/flatpak-dir.c:5469 - #, c-format - msgid "Failed to read commit %s: " - msgstr "Gagal membaca komit %s: " - --#: common/flatpak-dir.c:5488 -+#: 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:5513 common/flatpak-dir.c:5544 -+#: 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:5554 -+#: 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:5565 -+#: common/flatpak-dir.c:5566 - msgid "While trying to apply extra data: " - msgstr "Saat mencoba menerapkan data tambahan: " - --#: common/flatpak-dir.c:5592 -+#: common/flatpak-dir.c:5593 - #, c-format - msgid "Invalid deployed ref %s: " - msgstr "Ref %s yang dideploy tidak valid: " - --#: common/flatpak-dir.c:5599 -+#: common/flatpak-dir.c:5600 - #, c-format - msgid "Invalid commit ref %s: " - msgstr "Komit ref %s tidak valid: " - --#: common/flatpak-dir.c:5607 -+#: 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:5615 -+#: 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:5623 -+#: 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:5629 -+#: 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:5635 -+#: 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:5654 -+#: common/flatpak-dir.c:5655 - msgid "Deployed metadata does not match commit" - msgstr "Metadata yang dideploy tidak cocok dengan komit" - --#: common/flatpak-dir.c:6533 -+#: 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:6540 -+#: 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:7059 -+#: common/flatpak-dir.c:7060 - #, c-format - msgid "%s branch %s is not installed" - msgstr "%s cabang %s tidak terpasang" - --#: common/flatpak-dir.c:7304 -+#: common/flatpak-dir.c:7305 - #, c-format - msgid "%s branch %s not installed" - msgstr "%s cabang %s tidak terpasang" - --#: common/flatpak-dir.c:7628 -+#: common/flatpak-dir.c:7629 - #, c-format - msgid "Pruning repo failed: %s" - msgstr "Repo pemangkasan gagal: %s" - --#: common/flatpak-dir.c:8155 -+#: 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:8176 -+#: common/flatpak-dir.c:8177 - #, c-format - msgid "Nothing matches %s" - msgstr "Tidak ada yang cocok dengan %s" - --#: common/flatpak-dir.c:8258 -+#: 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:8300 -+#: common/flatpak-dir.c:8301 - #, c-format - msgid "Error searching remote %s: %s" - msgstr "Galat mencari remote %s: %s" - --#: common/flatpak-dir.c:8345 -+#: common/flatpak-dir.c:8346 - #, c-format - msgid "Error searching local repository: %s" - msgstr "Galat mencari repositori lokal: %s" - --#: common/flatpak-dir.c:8471 -+#: common/flatpak-dir.c:8472 - #, c-format - msgid "%s %s not installed" - msgstr "%s %s tidak terpasang" - --#: common/flatpak-dir.c:8638 -+#: common/flatpak-dir.c:8639 - #, c-format - msgid "Could not find installation %s" - msgstr "Tidak dapat menemukan pemasangan %s" - --#: common/flatpak-dir.c:9236 -+#: 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:9237 -+#: 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:9717 -+#: common/flatpak-dir.c:9718 - msgid "Remote title not set" - msgstr "Judul remote tidak diatur" - --#: common/flatpak-dir.c:9739 -+#: common/flatpak-dir.c:9740 - msgid "Remote default-branch not set" - msgstr "Cabang bawaaan remote tidak diatur" - --#: common/flatpak-dir.c:10332 -+#: common/flatpak-dir.c:10333 - msgid "No flatpak cache in remote summary" - msgstr "Tidak ada cache flatpak dalam ringkasan remote" - --#: common/flatpak-dir.c:10342 -+#: 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 " diff -Nru flatpak-0.11.3/debian/rules flatpak-1.0.7/debian/rules --- flatpak-0.11.3/debian/rules 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/rules 2018-09-01 23:12:41.000000000 +0000 @@ -35,7 +35,6 @@ override_dh_auto_configure: dh_auto_configure -- \ - --disable-document-portal \ --enable-installed-tests \ --libexecdir=/usr/lib/flatpak \ --with-priv-mode=none \ diff -Nru flatpak-0.11.3/debian/tests/build flatpak-1.0.7/debian/tests/build --- flatpak-0.11.3/debian/tests/build 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/tests/build 2018-11-30 01:01:39.000000000 +0000 @@ -4,7 +4,7 @@ exec 2>&1 set -x -cd "$ADTTMP" +cd "$AUTOPKGTEST_TMP" echo "1..1" diff -Nru flatpak-0.11.3/debian/tests/control flatpak-1.0.7/debian/tests/control --- flatpak-0.11.3/debian/tests/control 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/tests/control 2018-11-30 01:01:39.000000000 +0000 @@ -1,4 +1,5 @@ Tests: build +Restrictions: superficial Depends: build-essential, libflatpak-dev, @@ -8,4 +9,11 @@ Depends: flatpak-tests, gnome-desktop-testing, + python3, + +Tests: oci +Restrictions: isolation-machine, flaky +Depends: + flatpak-tests, + gnome-desktop-testing, python3, diff -Nru flatpak-0.11.3/debian/tests/gnome-desktop-testing flatpak-1.0.7/debian/tests/gnome-desktop-testing --- flatpak-0.11.3/debian/tests/gnome-desktop-testing 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/tests/gnome-desktop-testing 2018-09-01 23:12:41.000000000 +0000 @@ -16,10 +16,20 @@ # Don't pollute the home directory unless this looks like a dedicated # autopkgtest environment -case "$(id -nu)" in - (adt|debci) +case "$(id -nu)@$(hostname)" in + (adt@*|debci@*|user@host) install -d ~/.flatpak-tests/ ;; esac -exec gnome-desktop-testing-runner Flatpak +exec gnome-desktop-testing-runner $( + gnome-desktop-testing-runner -l Flatpak | while read -r t d; do + case "$t" in + (Flatpak/test-oci*) + ;; + (*) + echo "$t" + ;; + esac + done +) diff -Nru flatpak-0.11.3/debian/tests/oci flatpak-1.0.7/debian/tests/oci --- flatpak-0.11.3/debian/tests/oci 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/debian/tests/oci 2018-09-01 23:12:41.000000000 +0000 @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e +exec 2>&1 + +# Ubuntu provides internet access via a proxy, but libostree doesn't need +# that. However, libostree also doesn't support no_proxy, so it will try +# to use Ubuntu's proxy for localhost, and fail to reach itself. +unset ftp_proxy +unset http_proxy +unset https_proxy +unset no_proxy + +# Don't pollute the home directory unless this looks like a dedicated +# autopkgtest environment +case "$(id -nu)@$(hostname)" in + (adt@*|debci@*|user@host) + install -d ~/.flatpak-tests/ + ;; +esac + +exec gnome-desktop-testing-runner Flatpak/test-oci + diff -Nru flatpak-0.11.3/debian/test.sh flatpak-1.0.7/debian/test.sh --- flatpak-0.11.3/debian/test.sh 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/test.sh 2018-09-01 23:12:41.000000000 +0000 @@ -7,6 +7,11 @@ e=0 dh_auto_test || e=$? +find . -name '*.log' \ +-not -name config.log \ +-not -name test-suite.log \ +-print0 | xargs -0 tail -v -c1M + echo "Killing gpg-agent processes:" pgrep --list-full --full "gpg-agent --homedir /var/tmp/test-flatpak-.*" >&2 || : pgrep --list-full --full "gpg-agent --homedir /var/tmp/flatpak-test-.*" >&2 || : diff -Nru flatpak-0.11.3/debian/watch flatpak-1.0.7/debian/watch --- flatpak-0.11.3/debian/watch 2018-03-11 16:00:02.000000000 +0000 +++ flatpak-1.0.7/debian/watch 2018-11-30 01:01:39.000000000 +0000 @@ -1,2 +1,2 @@ version=4 -https://github.com/@PACKAGE@/@PACKAGE@/releases .*/@PACKAGE@-@ANY_VERSION@@ARCHIVE_EXT@ +https://github.com/@PACKAGE@/@PACKAGE@/releases .*/@PACKAGE@-(\d+\.\d*[02468]\.[\-+\.:\~\da-zA-Z]*)@ARCHIVE_EXT@ diff -Nru flatpak-0.11.3/depcomp flatpak-1.0.7/depcomp --- flatpak-0.11.3/depcomp 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/depcomp 2019-02-10 17:12:18.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2018 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -783,9 +783,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru flatpak-0.11.3/doc/flatpak-build-bundle.xml flatpak-1.0.7/doc/flatpak-build-bundle.xml --- flatpak-0.11.3/doc/flatpak-build-bundle.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-bundle.xml 2019-02-11 12:42:20.000000000 +0000 @@ -48,11 +48,11 @@ in the repository at LOCATION. If a BRANCH is specified, this branch of the application is used. - The format of the bundle file is that of an ostree static delta @@ -147,16 +147,26 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. + + Examples + + + $ flatpak build-bundle /var/lib/flatpak/repo gnome-calculator.flatpak org.gnome.Calculator stable + + + + + See also @@ -166,7 +176,7 @@ flatpak-build1, flatpak-build-finish1, flatpak-build-import-bundle1, - flatpak-repo-update1 + flatpak-build-update-repo1 diff -Nru flatpak-0.11.3/doc/flatpak-build-commit-from.xml flatpak-1.0.7/doc/flatpak-build-commit-from.xml --- flatpak-0.11.3/doc/flatpak-build-commit-from.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-commit-from.xml 2019-02-11 12:42:20.000000000 +0000 @@ -46,11 +46,11 @@ contents (and most of the metadata) taken from another branch, either from another repo, or from another branch in the same repository. - This command is very useful when you want to maintain a branch @@ -143,7 +143,7 @@ Don't update the summary file after the new commit is added. This means - the repository will not be useful for serving over http until build-repo-update + the repository will not be useful for serving over http until build-update-repo has been run. This is useful is you want to do multiple repo operations before finally updating the summary. @@ -158,6 +158,15 @@ + + + + Don't fsync when writing to the repository. This can result in data loss in exceptional situations, but can improve performance when + working with temporary or test repositories. + + + + @@ -190,14 +199,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - @@ -205,16 +206,11 @@ Examples - $ flatpak build-export ~/repos/gnome-calculator/ ~/build/gnome-calculator/ org.gnome.Calculator + To revert a commit to the commit before: + + + $ flatpak build-commit-from --timestamp=NOW --src-ref=app/org.gnome.gedit/x86_64/master^ repo app/org.gnome.gedit/x86_64/master - -Commit: 9d0044ea480297114d03aec85c3d7ae3779438f9d2cb69d717fb54237acacb8c -Metadata Total: 605 -Metadata Written: 5 -Content Total: 1174 -Content Written: 1 -Content Bytes Written: 305 - @@ -228,7 +224,7 @@ flatpak-build1, flatpak-build-finish1, flatpak-build-sign1, - flatpak-repo-update1 + flatpak-build-update-repo1 diff -Nru flatpak-0.11.3/doc/flatpak-build-export.xml flatpak-1.0.7/doc/flatpak-build-export.xml --- flatpak-0.11.3/doc/flatpak-build-export.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-export.xml 2019-02-11 12:42:20.000000000 +0000 @@ -63,16 +63,14 @@ subdirectories and the metadata file are included in the commit, anything else is ignored. - The build-update-repo command should be used to update repository metadata whenever application builds are added to a repository. @@ -112,9 +110,8 @@ - @@ -182,6 +178,15 @@ + + + + Don't fsync when writing to the repository. This can result in data loss in exceptional situations, but can improve performance when + working with temporary or test repositories. + + + + @@ -194,7 +199,7 @@ Don't update the summary file after the new commit is added. This means - the repository will not be useful for serving over http until build-repo-update + the repository will not be useful for serving over http until build-update-repo has been run. This is useful is you want to do multiple repo operations before finally updating the summary. @@ -242,14 +247,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - @@ -280,7 +277,7 @@ flatpak-build1, flatpak-build-finish1, flatpak-build-sign1, - flatpak-repo-update1 + flatpak-build-update-repo1 diff -Nru flatpak-0.11.3/doc/flatpak-build-finish.xml flatpak-1.0.7/doc/flatpak-build-finish.xml --- flatpak-0.11.3/doc/flatpak-build-finish.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-finish.xml 2019-02-11 12:42:20.000000000 +0000 @@ -52,6 +52,12 @@ group are set according to the options. + As part of finalization you can also specify permissions that the + app needs, using the various options specified below. Additionally + during finalization the permissions from the runtime are inherited + into the app unless you specify + + You should review the exported files and the application metadata before creating and distributing an application bundle. @@ -120,10 +126,15 @@ - Expose a well known socket to the application. This updates + Expose a well-known socket to the application. This updates the [Context] group in the metadata. - SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. + + The fallback-x11 option makes the X11 socket available only if + there is no Wayland socket. This option was introduced in 0.11.3. + To support older Flatpak releases, specify both x11 and fallback-x11. + The fallback-x11 option takes precedence when both are supported. @@ -133,7 +144,7 @@ Don't expose a well known socket to the application. This updates the [Context] group in the metadata. - SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -166,7 +177,7 @@ Allow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. The devel feature allows the application to @@ -178,6 +189,15 @@ natively by the system. For example, for the x86_64 architecture, 32-bit x86 binaries will be allowed as well. + + The bluetooth feature allows the application to + use bluetooth (AF_BLUETOOTH) sockets. Note, for bluetooth to + fully work you must also have network access. + + + The canbus feature allows the application to + use canbus (AF_CAN) sockets. + Note, for this work you must also have network access. @@ -187,7 +207,7 @@ Disallow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. @@ -337,6 +357,21 @@ Add extension point info. + See the documentation for + + flatpak-metadata + 5 + + for the possible values of + VARIABLE and VALUE. + + + + + + + + Remove extension point info. @@ -370,27 +405,27 @@ - - + - Print debug information during command processing. + Don't inherit runtime permissions in the app. - + + - Print OSTree debug information during command processing. + Print debug information during command processing. - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-build-import-bundle.xml flatpak-1.0.7/doc/flatpak-build-import-bundle.xml --- flatpak-0.11.3/doc/flatpak-build-import-bundle.xml 2018-02-07 09:00:11.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-import-bundle.xml 2018-08-08 14:56:20.000000000 +0000 @@ -110,7 +110,7 @@ Don't update the summary file after the new commit is added. This means - the repository will not be useful for serving over http until build-repo-update + the repository will not be useful for serving over http until build-update-repo has been run. This is useful is you want to do multiple repo operations before finally updating the summary. @@ -132,14 +132,6 @@ GPG Homedir to use when looking for keyrings - - - - - - Print version information and exit. - - @@ -150,7 +142,7 @@ ostree1, flatpak1, flatpak-build-bundle1, - flatpak-repo-update1 + flatpak-build-update-repo1 diff -Nru flatpak-0.11.3/doc/flatpak-build-init.xml flatpak-1.0.7/doc/flatpak-build-init.xml --- flatpak-0.11.3/doc/flatpak-build-init.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-init.xml 2019-02-11 12:42:20.000000000 +0000 @@ -127,6 +127,14 @@ + + + + Add extension point info. + + + + @@ -179,6 +187,15 @@ + + + + If building an extension, the tag to use when searching for + the mount point of the extension. + + + + @@ -187,10 +204,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-build-sign.xml flatpak-1.0.7/doc/flatpak-build-sign.xml --- flatpak-0.11.3/doc/flatpak-build-sign.xml 2018-02-07 09:00:11.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-sign.xml 2018-08-08 14:56:20.000000000 +0000 @@ -120,14 +120,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-build-update-repo.xml flatpak-1.0.7/doc/flatpak-build-update-repo.xml --- flatpak-0.11.3/doc/flatpak-build-update-repo.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build-update-repo.xml 2019-02-11 12:42:20.000000000 +0000 @@ -43,12 +43,12 @@ Updates repository metadata for the repository at LOCATION. This command generates an OSTree summary file that lists the contents of the repository. - The summary is used by flatpak repo-contents and other commands + The summary is used by flatpak remote-ls and other commands to display the contents of remote repositories. After this command, LOCATION can be - used as the repository location for flatpak add-repo, either by + used as the repository location for flatpak remote-add, either by exporting it over http, or directly with a file: url. @@ -102,9 +102,8 @@ - @@ -188,14 +186,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - @@ -205,7 +195,7 @@ ostree1, flatpak1, - flatpak-repo-contents1, + flatpak-remote-ls1, flatpak-build-export1 diff -Nru flatpak-0.11.3/doc/flatpak-build.xml flatpak-1.0.7/doc/flatpak-build.xml --- flatpak-0.11.3/doc/flatpak-build.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-build.xml 2019-02-11 12:42:20.000000000 +0000 @@ -79,6 +79,14 @@ + + + + Print OSTree debug information during command processing. + + + + @@ -140,7 +148,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -151,7 +159,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -184,18 +192,11 @@ Allow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. - - The devel feature allows the application to - access certain syscalls such as ptrace(), and - perf_event_open(). - - The multiarch feature allows the application to - execute programs compiled for an ABI other than the one supported - natively by the system. For example, for the x86_64 - architecture, 32-bit x86 binaries will be allowed as - well. + + See flatpak-build-finish1 + for the meaning of the various features. @@ -205,7 +206,7 @@ Disallow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. diff -Nru flatpak-0.11.3/doc/flatpak-config.xml flatpak-1.0.7/doc/flatpak-config.xml --- flatpak-0.11.3/doc/flatpak-config.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-config.xml 2019-02-11 12:42:20.000000000 +0000 @@ -121,6 +121,22 @@ + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + diff -Nru flatpak-0.11.3/doc/flatpak-create-usb.xml flatpak-1.0.7/doc/flatpak-create-usb.xml --- flatpak-0.11.3/doc/flatpak-create-usb.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-create-usb.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,196 @@ + + + + + + + flatpak create-usb + flatpak + + + + Developer + Matthew + Leeds + matthew.leeds@endlessm.com + + + + + + flatpak create-usb + 1 + + + + flatpak-create-usb + Copy apps and/or runtimes onto removable media. + + + + + flatpak create-usb + OPTION + MOUNT-PATH + REF + + + + + Description + + + Copies the specified apps and/or runtimes REFs onto the removable + media mounted at MOUNT-PATH, along with all the dependencies and + metadata needed for installing them. This is one way of transferring flatpaks + between computers that doesn't require an Internet connection. After using + this comand, the USB drive can be connected to another computer and + flatpak install will prefer to install from it rather than + the Internet if the refs are the newest available. For this process to work a + collection ID must be configured on the relevant remotes on both the source + and destination computers, and on the remote server. + + + Each REF argument is a full or partial indentifier in the + flatpak ref format, which looks like "(app|runtime)/ID/ARCH/BRANCH". All elements + except ID are optional and can be left out, including the slashes, + so most of the time you need only specify ID. Any part left out will be matched + against what is installed, and if there are multiple matches an error message + will list the alternatives. + + + By default this looks for both installed apps and runtimes + with the given REF, but you can + limit this by using the --app or --runtime option. + + + All REFs must be in the same installation (user, system, or other). + Otherwise it's ambiguous which repository metadata refs to put on the USB drive. + + + By default flatpak create-usb uses .ostree/repo + as the destination directory under MOUNT-PATH but if you + specify another location using + a symbolic link will be created for you in .ostree/repos.d. + This ensures that either way the repository will be found by flatpak (and other + consumers of libostree) for install/update operations. + + + Unless overridden with the --system, --user, or --installation + options, this command searches both the system-wide installation + and the per-user one for REF and errors + out if it exists in more than one. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + Copy refs from the per-user installation. + + + + + + + + Copy refs from the default system-wide installation. + + + + + + + + Copy refs from 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 all REFs are apps if not explicitly specified. + + + + + + + Assume that all REFs are runtimes if not explicitly specified. + + + + + =DEST + + + Create the repository in DEST under MOUNT-PATH, rather than + the default location. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + + Examples + + + $ flatpak create-usb /run/media/mwleeds/1a9b4cb2-a7ef-4d9b-91a5-6eaf8fdd2bf6/ com.endlessm.wiki_art.en + + + + + + See also + + + flatpak1, + flatpak-install1, + flatpak-list1, + ostree-create-usb1 + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-docs.xml.in flatpak-1.0.7/doc/flatpak-docs.xml.in --- flatpak-0.11.3/doc/flatpak-docs.xml.in 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-docs.xml.in 2019-02-11 12:42:20.000000000 +0000 @@ -8,6 +8,11 @@ Version @VERSION@ Flatpak Command Reference + + + The command reference is generated from the flatpak repo; see + + Flatpak comes with a rich commandline interface. @@ -29,22 +34,29 @@ + + + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-document-export.xml flatpak-1.0.7/doc/flatpak-document-export.xml --- flatpak-0.11.3/doc/flatpak-document-export.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-document-export.xml 2019-02-11 12:42:20.000000000 +0000 @@ -189,10 +189,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-document-info.xml flatpak-1.0.7/doc/flatpak-document-info.xml --- flatpak-0.11.3/doc/flatpak-document-info.xml 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-document-info.xml 2019-02-11 12:42:20.000000000 +0000 @@ -76,10 +76,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-document-list.xml flatpak-1.0.7/doc/flatpak-document-list.xml --- flatpak-0.11.3/doc/flatpak-document-list.xml 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-document-list.xml 2019-02-11 12:42:20.000000000 +0000 @@ -72,10 +72,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-document-unexport.xml flatpak-1.0.7/doc/flatpak-document-unexport.xml --- flatpak-0.11.3/doc/flatpak-document-unexport.xml 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-document-unexport.xml 2019-02-11 12:42:20.000000000 +0000 @@ -30,7 +30,7 @@ - flatpak document-export + flatpak document-unexport OPTION FILE @@ -72,10 +72,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-enter.xml flatpak-1.0.7/doc/flatpak-enter.xml --- flatpak-0.11.3/doc/flatpak-enter.xml 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-enter.xml 2019-02-11 12:42:20.000000000 +0000 @@ -82,10 +82,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-flatpakref.xml flatpak-1.0.7/doc/flatpak-flatpakref.xml --- flatpak-0.11.3/doc/flatpak-flatpakref.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-flatpakref.xml 2019-02-11 12:42:20.000000000 +0000 @@ -107,13 +107,20 @@ (string) The url of a webpage describing the application or runtime. - (boolean) @@ -141,6 +148,7 @@ Url=http://sdk.gnome.org/repo-apps/ IsRuntime=False GPGKey=mQENBFUUCGcBCAC/K9WeV4xCaKr3NKRqPXeY5mpaXAJyasLqCtrDx92WUgbu0voWrhohNAKpqizod2dvzc/XTxm3rHyIxmNfdhz1gaGhynU75Qw4aJVcly2eghTIl++gfDtOvrOZo/VuAq30f32dMIgHQdRwEpgCwz7WyjpqZYltPAEcCNL4MTChAfiHJeeiQ5ibystNBW8W6Ymf7sO4m4g5+/aOxI54oCOzD9TwBAe+yXcJJWtc2rAhMCjtyPJzxd0ZVXqIzCe1xRvJ6Rq7YCiMbiM2DQFWXKnmYQbj4TGNMnwNdAajCdrcBWEMSbzq7EzuThIJRd8Ky4BkEe1St6tuqwFaMZz+F9eXABEBAAG0KEdub21lIFNESyAzLjE2IDxnbm9tZS1vcy1saXN0QGdub21lLm9yZz6JATgEEwECACIFAlUUCGcCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEArkz6VV0VKBa5cH/0vXa31YgEjNk78gGFXqnQxdD1WYA87OYxDi189l4lA802EFTF4wCBuZyDOqdd5BhS3Ab0cR778DmZXRUP2gwe+1zTJypU2JMnDpkwJ4NK1VP6/tE4SAPrznBtmb76BKaWBqUfZ9Wq1zg3ugvqkZB/Exq+usypIOwQVp1KL58TrjBRda0HvRctzkNhr0qYAtkfLFe0GvksBp4vBm8uGwAx7fw/HbhIjQ9pekTwvB+5GwDPO/tSip/1bQfCS+XJB8Ffa04HYPLGedalnWBrwhYY+G/kn5Zh9L/AC8xeLwTJTHM212rBjPa9CWs9C6a57MSaeGIEHLC1hEyiJJ15w8jmY= +DeployCollectionID=org.gnome.Apps diff -Nru flatpak-0.11.3/doc/flatpak-flatpakrepo.xml flatpak-1.0.7/doc/flatpak-flatpakrepo.xml --- flatpak-0.11.3/doc/flatpak-flatpakrepo.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-flatpakrepo.xml 2018-11-16 10:32:33.000000000 +0000 @@ -103,13 +103,20 @@ (string) The url of a webpage describing the remote. - @@ -121,10 +128,7 @@ Title=GEdit Url=http://sdk.gnome.org/repo-apps/ GPGKey=mQENBFUUCGcBCAC/K9WeV4xCaKr3NKRqPXeY5mpaXAJyasLqCtrDx92WUgbu0voWrhohNAKpqizod2dvzc/XTxm3rHyIxmNfdhz1gaGhynU75Qw4aJVcly2eghTIl++gfDtOvrOZo/VuAq30f32dMIgHQdRwEpgCwz7WyjpqZYltPAEcCNL4MTChAfiHJeeiQ5ibystNBW8W6Ymf7sO4m4g5+/aOxI54oCOzD9TwBAe+yXcJJWtc2rAhMCjtyPJzxd0ZVXqIzCe1xRvJ6Rq7YCiMbiM2DQFWXKnmYQbj4TGNMnwNdAajCdrcBWEMSbzq7EzuThIJRd8Ky4BkEe1St6tuqwFaMZz+F9eXABEBAAG0KEdub21lIFNESyAzLjE2IDxnbm9tZS1vcy1saXN0QGdub21lLm9yZz6JATgEEwECACIFAlUUCGcCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEArkz6VV0VKBa5cH/0vXa31YgEjNk78gGFXqnQxdD1WYA87OYxDi189l4lA802EFTF4wCBuZyDOqdd5BhS3Ab0cR778DmZXRUP2gwe+1zTJypU2JMnDpkwJ4NK1VP6/tE4SAPrznBtmb76BKaWBqUfZ9Wq1zg3ugvqkZB/Exq+usypIOwQVp1KL58TrjBRda0HvRctzkNhr0qYAtkfLFe0GvksBp4vBm8uGwAx7fw/HbhIjQ9pekTwvB+5GwDPO/tSip/1bQfCS+XJB8Ffa04HYPLGedalnWBrwhYY+G/kn5Zh9L/AC8xeLwTJTHM212rBjPa9CWs9C6a57MSaeGIEHLC1hEyiJJ15w8jmY= - +DeployCollectionID=org.gnome.Apps diff -Nru flatpak-0.11.3/doc/flatpak-info.xml flatpak-1.0.7/doc/flatpak-info.xml --- flatpak-0.11.3/doc/flatpak-info.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-info.xml 2019-02-11 12:42:20.000000000 +0000 @@ -25,7 +25,7 @@ flatpak-info - Show information about installed application and/or runtime + Show information about an installed application or runtime @@ -41,12 +41,22 @@ Description - Show info about and installed application and/or runtime. + Show info about an installed application or runtime. By default, the output is formatted in a friendly format. - If you specify one of the options --show-ref, --show-commit, - --show-origin, --show-metadata or --show-size, the output is instead formatted + If you specify one of the options + --show-ref, + --show-origin, + --show-commit, + --show-size, + --show-metadata, + --show-permissions, + --file-access, + --show-location, + --show-runtime or + --show-sdk, + the output is instead formatted in a machine-readable format. @@ -153,6 +163,39 @@ + + + + Show the runtime. + + + + + + + + Show the SDK. + + + + + + + + + Show the permissions. + + + + + + + + Show the level of access to the given path. + + + + @@ -171,10 +214,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-install.xml flatpak-1.0.7/doc/flatpak-install.xml --- flatpak-0.11.3/doc/flatpak-install.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-install.xml 2019-02-11 12:42:20.000000000 +0000 @@ -80,15 +80,22 @@ will be created for the lifetime of the REF. + If the specified REMOTE has a collection ID configured on it, + flatpak will search mounted filesystems such as USB drives as well as Avahi services + advertised on the local network for the needed refs, in order to support + offline updates. See ostree-find-remotes1 + for more information. + + The alternative form of the command (--from or --bundle allows you to install directly from a source such as a .flatpak single-file bundle, a .flatpakref app description. The options are optional if the first - argument have the right extension. + argument has the right extension. Note that flatpak allows one to have multiple branches of an application and runtimes - installed and used at the same time. However, only version of an application one can be current, + installed and used at the same time. However, only one version of an application can be current, meaning its exported files (for instance desktop files and icons) are visible to the host. The last installed version is made current by default, but you can manually change with make-current. @@ -134,6 +141,14 @@ + + + + Uninstall first if already installed. + + + + @@ -257,14 +272,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-list.xml flatpak-1.0.7/doc/flatpak-list.xml --- flatpak-0.11.3/doc/flatpak-list.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-list.xml 2019-02-11 12:42:20.000000000 +0000 @@ -39,7 +39,7 @@ Description - Lists the names of the installed applications and/or runtime. + Lists the names of the installed applications and/or runtimes. By default, both per-user and system-wide installations @@ -47,7 +47,7 @@ options to change this. - By default this lists both installed apps and runtime, but you can + By default this lists both installed apps and runtimes, but you can change this by using the --app or --runtime option. @@ -153,14 +153,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-make-current.xml flatpak-1.0.7/doc/flatpak-make-current.xml --- flatpak-0.11.3/doc/flatpak-make-current.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-make-current.xml 2019-02-11 12:42:20.000000000 +0000 @@ -116,10 +116,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-metadata.xml flatpak-1.0.7/doc/flatpak-metadata.xml --- flatpak-0.11.3/doc/flatpak-metadata.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-metadata.xml 2019-02-11 12:42:20.000000000 +0000 @@ -142,7 +142,7 @@ (list) List of well-known sockets to make available in the sandbox. - Possible sockets: x11, wayland, fallback-x11, pulseaudio, session-bus, system-bus. + Possible sockets: x11, wayland, fallback-x11, pulseaudio, session-bus, system-bus, ssh-auth. When making a socket available, flatpak also sets well-known environment variables like DISPLAY or DBUS_SYSTEM_BUS_ADDRESS to let the application @@ -371,6 +371,20 @@ Available since 0.6.12. + + + Allow the application to use bluetooth (AF_BLUETOOTH) sockets. + Note, for bluetooth to fully work you must also have network access. + Available since 0.11.8. + + + + + Allow the application to use canbus (AF_CAN) sockets. + Note, for this work you must also have network access. + Available since 1.0.3. + + A feature can be prefixed with to indicate the absence of that feature, for example @@ -392,6 +406,22 @@ here. --> + (string) + + The ID of the running instance. This number is + used as the name of the directory in + XDG_RUNTIME_DIR/.flatpak + where Flatpak stores information about this instance. + + + + (string) + + The absolute path on the host system of the app's + persistent storage area in $HOME/.var. + + + (string) The absolute path on the host system of the app's @@ -400,6 +430,20 @@ + (string) + + The commit ID or the application that is running. + + + + (list of strings) + + A list of app extensions that are mounted into + the running instance. The format for each list item is + . + + + (string) The branch of the app, for example @@ -408,6 +452,12 @@ + (string) + + The architecture of the running instance. + + + (string) The version number of the Flatpak version that ran @@ -423,6 +473,39 @@ + (string) + + The commit ID or the runtime that is used. + + + + (list of strings) + + A list of runtime extensions that are mounted into + the running instance. The format for each list item is + . + + + + (string) + + Extra arguments that were passed to flatpak run. + + + + (boolean) + + Whether the option was passed + to flatpak run. + + + + (boolean) + + Whether this instance was created by flatpak build. + + + (boolean) True if this app cannot access the D-Bus session bus @@ -542,7 +625,11 @@ inside the sandbox when they are present on the system. Typical uses for extension points include translations for applications, or debuginfo for sdks. The name of the extension point is specified as part of the - group heading. + group heading. Since 0.11.4, the name may optionally include a tag + in the NAME in the name@tag ref syntax if you wish to use different + configurations (eg, versions) of the same extension concurrently. + The "tag" is effectively ignored, but is necessary in order to allow + the same extension name to be specified more than once. @@ -600,6 +687,16 @@ + (string) + + A condition that must be false for the extension to be considered unused when + pruning. For example, flatpak uninstall --unused uses + this information. The only currently recognized value is active-gl-driver, + which is true if the name of the active GL driver matches the extension + point basename. Available since 0.11.8. + + + (string) A condition that must be true for the extension to be enabled. @@ -654,7 +751,6 @@ Available since 0.6.7. - @@ -690,6 +785,13 @@ backported to the 0.8.x branch in 0.8.3. + + (string) + + The tag name to use when searching for this extension's mount + point in the parent flatpak. Available since 0.11.4. + + diff -Nru flatpak-0.11.3/doc/flatpak-override.xml flatpak-1.0.7/doc/flatpak-override.xml --- flatpak-0.11.3/doc/flatpak-override.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-override.xml 2019-02-11 12:42:20.000000000 +0000 @@ -130,7 +130,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -141,7 +141,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -174,18 +174,11 @@ Allow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. - The devel feature allows the application to - access certain syscalls such as ptrace(), and - perf_event_open(). - - The multiarch feature allows the application to - execute programs compiled for an ABI other than the one supported - natively by the system. For example, for the x86_64 - architecture, 32-bit x86 binaries will be allowed as - well. + See flatpak-build-finish1 + for the meaning of the various features. @@ -195,7 +188,7 @@ Disallow access to a specific feature. This updates the [Context] group in the metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth, canbus. This option can be used multiple times. @@ -319,6 +312,24 @@ + + + + Remove overrides. If an APP is given, remove the overrides for that + application, otherwise remove the global overrides. + + + + + + + + Shows overrides. If an APP is given, shows the overrides for that + application, otherwise shows the global overrides. + + + + @@ -328,10 +339,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. diff -Nru flatpak-0.11.3/doc/flatpak-permission-list.xml flatpak-1.0.7/doc/flatpak-permission-list.xml --- flatpak-0.11.3/doc/flatpak-permission-list.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-permission-list.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,111 @@ + + + + + + + flatpak permission-list + flatpak + + + + Developer + Matthias + Clasen + mclasen@redhat.com + + + + + + flatpak permission-list + 1 + + + + flatpak-permission-list + List permissions + + + + + flatpak permission-list + OPTION + TABLE + ID + + + + + Description + + + Lists dynamic permissions which are stored in the Flatpak + permission store. + + + + When called without arguments, lists all + the entries in all permission store tables. When called + with one argument, lists all the entries in the named + table. When called with two arguments, lists the entry + in the named table for the given object ID. + + + + The permission store is used by portals. + Each portal generally has its own table in the permission + store, and the format of the table entries is specific to + each portal. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + See also + + + flatpak1, + flatpak-permission-show1, + flatpak-permission-remove1, + flatpak-permission-reset1, + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-permission-remove.xml flatpak-1.0.7/doc/flatpak-permission-remove.xml --- flatpak-0.11.3/doc/flatpak-permission-remove.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-permission-remove.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,103 @@ + + + + + + + flatpak permission-remove + flatpak + + + + Developer + Matthias + Clasen + mclasen@redhat.com + + + + + + flatpak permission-remove + 1 + + + + flatpak-permission-remove + List permissions + + + + + flatpak permission-remove + OPTION + TABLE + ID + + + + + Description + + + Removes an entry for the object with id ID to the permission + store table TABLE. The ID must be in a suitable format + for the table. + + + The permission store is used by portals. + Each portal generally has its own table in the permission + store, and the format of the table entries is specific to + each portal. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + See also + + + flatpak1, + flatpak-permission-list1, + flatpak-permission-show1, + flatpak-permission-reset1, + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-permission-reset.xml flatpak-1.0.7/doc/flatpak-permission-reset.xml --- flatpak-0.11.3/doc/flatpak-permission-reset.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-permission-reset.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,102 @@ + + + + + + + flatpak permission-reset + flatpak + + + + Developer + Matthias + Clasen + mclasen@redhat.com + + + + + + flatpak permission-reset + 1 + + + + flatpak-permission-reset + Reset permissions + + + + + flatpak permission-reset + OPTION + APP_ID + + + + + Description + + + Removes all permissions for the given app from the Flatpak + permission store. + + + + The permission store is used by portals. + Each portal generally has its own table in the permission + store, and the format of the table entries is specific to + each portal. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + See also + + + flatpak1, + flatpak-permission-list1, + flatpak-permission-show1, + flatpak-permission-remove1, + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-permission-show.xml flatpak-1.0.7/doc/flatpak-permission-show.xml --- flatpak-0.11.3/doc/flatpak-permission-show.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-permission-show.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,110 @@ + + + + + + + flatpak permission-show + flatpak + + + + Developer + Matthias + Clasen + mclasen@redhat.com + + + + + + flatpak permission-show + 1 + + + + flatpak-permission-show + List permissions + + + + + flatpak permission-show + OPTION + APP_ID + + + + + Description + + + Lists dynamic permissions for the given app which are stored + in the Flatpak permission store. + + + + When called without arguments, lists all + the entries in all permission store tables. When called + with one argument, lists all the entries in the named + table. When called with two arguments, lists the entry + in the named table for the given object ID. + + + + The permission store is used by portals. + Each portal generally has its own table in the permission + store, and the format of the table entries is specific to + each portal. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + See also + + + flatpak1, + flatpak-permission-list1, + flatpak-permission-remove1, + flatpak-permission-reset1, + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-ps.xml flatpak-1.0.7/doc/flatpak-ps.xml --- flatpak-0.11.3/doc/flatpak-ps.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-ps.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,224 @@ + + + + + + + flatpak enter + flatpak + + + + Developer + Matthias + Clasen + mclasen@redhat.com + + + + + + flatpak ps + 1 + + + + flatpak-ps + Enumerate running instances + + + + + flatpak ps + OPTION + + + + + Description + + + Lists useful information about running Flatpak instances. + + + To see full details of a running instance, you can open the file + /run/user/$UID/.flatpak/$INSTANCE/info, where $INSTANCE is the instance + ID reported by flatpak ps. + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + + Show the available values for the option. + + + + + + + + Specify what information to show about each instance. You can + list multiple fields, or use this option multiple times. + + + + + + + + Fields + + The following fields are understood by the option: + + + + application + + + Show the application ID + + + + + arch + + + Show the architecture + + + + + branch + + + Show the application branch + + + + + commit + + + Show the application commit + + + + + runtime + + + Show the runtime ID + + + + + runtime-branch + + + Show the runtime branch + + + + + runtime-commit + + + Show the runtime commit + + + + + pid + + + Show the PID of the wrapper process + + + + + child-pid + + + Show the PID of the sandbox process + + + + + all + + + Show all columns + + + + + help + + + Show the list of available columns + + + + + + Note that field names can be abbreviated to a unique prefix. + + + + + + Examples + + + $ flatpak ps --columns=application,pid,runtime,runtime-branch + + + + + + See also + + + flatpak1, + flatpak-run1 + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-remote-add.xml flatpak-1.0.7/doc/flatpak-remote-add.xml --- flatpak-0.11.3/doc/flatpak-remote-add.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remote-add.xml 2019-02-11 12:42:20.000000000 +0000 @@ -195,15 +195,6 @@ - - - - This is a OCI format registry rather than a regular - flatpak repository. - - - - @@ -219,14 +210,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-remote-delete.xml flatpak-1.0.7/doc/flatpak-remote-delete.xml --- flatpak-0.11.3/doc/flatpak-remote-delete.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remote-delete.xml 2019-02-11 12:42:20.000000000 +0000 @@ -118,14 +118,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-remote-ls.xml flatpak-1.0.7/doc/flatpak-remote-ls.xml --- flatpak-0.11.3/doc/flatpak-remote-ls.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remote-ls.xml 2019-02-11 12:42:20.000000000 +0000 @@ -46,6 +46,10 @@ remote repositories with flatpak-remotes1. + REMOTE can be a file:// URI pointing to a + local repository instead of a remote name. + + 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 @@ -127,7 +131,7 @@ Show everything. By default locale and debug extensions as well as secondary arches when the primary - arch in available are hidden. + arch is available are hidden. @@ -164,14 +168,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - @@ -182,10 +178,19 @@ $ flatpak --user remote-ls --app testrepo +Ref org.gnome.Builder org.freedesktop.glxgears + + $ flatpak remote-ls file:///run/media/mwleeds/d4d37026-cde2-4e5e-8bcc-d23ebbf231f9/.ostree/repo + + +Ref +org.kde.Khangman + + diff -Nru flatpak-0.11.3/doc/flatpak-remote-modify.xml flatpak-1.0.7/doc/flatpak-remote-modify.xml --- flatpak-0.11.3/doc/flatpak-remote-modify.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remote-modify.xml 2019-02-11 12:42:20.000000000 +0000 @@ -185,22 +185,20 @@ - A default branch to for the remote, mainly for use in a UI. + A default branch for the remote, mainly for use in a UI. - @@ -214,9 +212,6 @@ - A default branch to for the remote, mainly for use in a UI. - - Update the remote's extra metadata from the OSTree repository's summary file. Only xa.title and xa.default-branch are supported at the moment. @@ -248,14 +243,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-remotes.xml flatpak-1.0.7/doc/flatpak-remotes.xml --- flatpak-0.11.3/doc/flatpak-remotes.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remotes.xml 2019-02-11 12:42:20.000000000 +0000 @@ -124,14 +124,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-remote.xml flatpak-1.0.7/doc/flatpak-remote.xml --- flatpak-0.11.3/doc/flatpak-remote.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-remote.xml 2019-02-11 12:42:20.000000000 +0000 @@ -70,7 +70,12 @@ (string) - The url for the remote. + + The url for the remote. An URL of the form oci+https:// or oci+http:// + is a Flatpak extension that indicates that the remote is not an ostree + repository, but is rather an URL to an index of OCI images that are stored + within a container image registry. + (boolean) @@ -80,18 +85,13 @@ (boolean) Whether to use GPG verification for the summary of this remote. - - All flatpak-specific keys have a xa. prefix: @@ -133,10 +133,6 @@ (string) The main reference served by this remote. This is used for origin remotes of applications installed via a flatpakref file. - - (boolean) - Whether this is an OCI remote. Defaults to false. - @@ -148,15 +144,19 @@ [remote "gnome-nightly-apps"] gpg-verify=true gpg-verify-summary=true - url=https://sdk.gnome.org/nightly/repo-apps/ xa.title=GNOME Applications + +[remote "flathub"] +gpg-verify=true +gpg-verify-summary=false +collection-id=org.flathub.Stable +url=https://dl.flathub.org/repo/ +xa.title=Flathub + + diff -Nru flatpak-0.11.3/doc/flatpak-repair.xml flatpak-1.0.7/doc/flatpak-repair.xml --- flatpak-0.11.3/doc/flatpak-repair.xml 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-repair.xml 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,148 @@ + + + + + + + flatpak repair + flatpak + + + + Developer + Matthew + Leeds + matthew.leeds@endlessm.com + + + + + + flatpak repair + 1 + + + + flatpak-repair + Repair a flatpak installation + + + + + flatpak repair + OPTION + + + + + Description + + + Repair a flatpak installation by pruning and reinstalling invalid objects. The repair command does all of the following: + + + + Scan all locally available refs, removing any that don't correspond to a deployed ref. + + + Verify each commit they point to, removing any invalid objects and noting any missing objects. + + + Remove any refs that had an invalid object, and any non-partial refs that had missing objects. + + + Prune all objects not referenced by a ref, which gets rid of any possibly invalid non-scanned objects. + + + Enumerate all deployed refs and re-install any that are not in the repo (or are partial for a non-subdir deploy). + + + + + + + Options + + The following options are understood: + + + + + + + + Show help options and exit. + + + + + + + + Repair per-user installation. + + + + + + + + Repair system-wide installation. + + + + + + + + Repair the system-wide installation + specified by NAME among those defined in + /etc/flatpak/installations.d/. Using + --installation=default is equivalent to using + --system. + + + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + + + + + + Examples + + + $ sudo flatpak repair + + + + $ flatpak repair --user + + + + + + See also + + + flatpak1, + + + + + diff -Nru flatpak-0.11.3/doc/flatpak-repo.xml flatpak-1.0.7/doc/flatpak-repo.xml --- flatpak-0.11.3/doc/flatpak-repo.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-repo.xml 2019-02-11 12:42:20.000000000 +0000 @@ -83,6 +83,23 @@ Print metadata for a branch in the repository. + + + + + + + Print debug information during command processing. + + + + + + + + Print OSTree debug information during command processing. + + diff -Nru flatpak-0.11.3/doc/flatpak-run.xml flatpak-1.0.7/doc/flatpak-run.xml --- flatpak-0.11.3/doc/flatpak-run.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-run.xml 2019-02-11 12:42:20.000000000 +0000 @@ -50,6 +50,11 @@ runtime. This is useful for development and testing. + By default, flatpak will look for the application or runtime in all per-user + and system installations. This can be overridden with the , + and options. + + flatpak creates a sandboxed environment for the application to run in by mounting the right runtime at /usr and a writable directory at /var, whose content is preserved between @@ -57,15 +62,34 @@ The details of the sandboxed environment are controlled by the application - metadata and various options like --share and --socket that are passed to the run - command: Access is allowed if it was requested either in the application - metadata file or with an option and the user hasn't overridden it. + metadata and various options like and + that are passed to the run command: Access is allowed if it was requested either + in the application metadata file or with an option and the user hasn't overridden it. The remaining arguments are passed to the command that gets run in the sandboxed - environment. See the for handling of file arguments. + environment. See the option for handling of file + arguments. - + + Environment variables are generally passed on to the sandboxed application, with + certain exceptions. The application metadata can override environment variables, + as well as the option. Apart from that, Flatpak always + unsets or overrides the following variables, since their session values + are likely to interfere with the functioning of the sandbox: + + + PATH + LD_LIBRARY_PATH + XDG_CONFIG_DIRS + XDG_DATA_DIRS + SHELL + TMPDIR + PYTHONPATH + PERLLIB + PERL5LIB + XCURSOR_PATH + @@ -84,6 +108,34 @@ + + + + Look for the application and runtime in per-user installations. + + + + + + + + Look for the application and runtime in the default system-wide installations. + + + + + + + + Look for the application and runtime in the system-wide installation specified + by NAME + among those defined in /etc/flatpak/installations.d/. + Using --installation=default is equivalent to using + --system. + + + + @@ -93,10 +145,10 @@ - + - Print version information and exit. + Print OSTree debug information during command processing. @@ -181,7 +233,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -192,7 +244,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, fallback-x11, pulseaudio, system-bus, session-bus. + SOCKET must be one of: x11, wayland, fallback-x11, pulseaudio, system-bus, session-bus, ssh-auth. This option can be used multiple times. @@ -225,8 +277,11 @@ Allow access to a specific feature. This overrides to the Context section from the application metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth. This option can be used multiple times. + + See flatpak-build-finish1 + for the meaning of the various features. @@ -236,7 +291,7 @@ Disallow access to a specific feature. This overrides to the Context section from the application metadata. - FEATURE must be one of: devel, multiarch. + FEATURE must be one of: devel, multiarch, bluetooth. This option can be used multiple times. @@ -380,6 +435,15 @@ + + + + + Kill the entire sandbox when the launching process dies. + + + + @@ -391,7 +455,6 @@ permissions for the application. - diff -Nru flatpak-0.11.3/doc/flatpak-search.xml flatpak-1.0.7/doc/flatpak-search.xml --- flatpak-0.11.3/doc/flatpak-search.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-search.xml 2019-02-11 12:42:20.000000000 +0000 @@ -96,6 +96,14 @@ Print debug information during command processing. + + + + + + Print OSTree debug information during command processing. + + diff -Nru flatpak-0.11.3/doc/flatpak-uninstall.xml flatpak-1.0.7/doc/flatpak-uninstall.xml --- flatpak-0.11.3/doc/flatpak-uninstall.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-uninstall.xml 2019-02-11 12:42:20.000000000 +0000 @@ -44,7 +44,7 @@ application or runtime to uninstall. - Each REF arguments is a full or partial indentifier in the + Each REF argument is a full or partial indentifier in the flatpak ref format, which looks like "(app|runtime)/ID/ARCH/BRANCH". All elements except ID are optional and can be left out, including the slashes, so most of the time you need only specify ID. Any part left out will be matched @@ -52,13 +52,13 @@ will list the alternatives. - By default this looks for both installed apps and runtime - with the given NAME, but you can - limit this by using the --app or --runtime option. + By default this looks for both installed 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 removes the ref for this application/runtime from the - local OSTree repository and purges and objects that are no longer + local OSTree repository and purges any objects that are no longer needed to free up disk space. If the same application is later reinstalled, the objects will be pulled from the remote repository again. The --keep-ref option can be used to prevent this. @@ -68,8 +68,10 @@ also purges the data directory for the application. - Unless overridden with the --user or the --installation option, this command updates - the default system-wide installation. + Unless overridden with the --system, --user, or --installation + options, this command searches both the system-wide installation + and the per-user one for REF and errors + out if it exists in more than one. @@ -102,7 +104,7 @@ - Updates a per-user installation. + Uninstalls from a per-user installation. @@ -110,7 +112,7 @@ - Updates the default system-wide installation. + Uninstalls from the default system-wide installation. @@ -118,10 +120,11 @@ - Updates a system-wide installation specified by NAME - among those defined in /etc/flatpak/installations.d/. - Using --installation=default is equivalent to using - --system. + Uninstalls from a system-wide installation specified by + NAME among those defined in + /etc/flatpak/installations.d/. Using + --installation=default is + equivalent to using --system. @@ -135,6 +138,28 @@ + + + Remove all refs on the system. + + + + + + + Remove unused refs on the system. + + + + + + + + Automatically answer yes to all questions. This is useful for automation. + + + + @@ -181,14 +206,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak-update.xml flatpak-1.0.7/doc/flatpak-update.xml --- flatpak-0.11.3/doc/flatpak-update.xml 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak-update.xml 2019-02-11 12:42:20.000000000 +0000 @@ -51,7 +51,7 @@ is updated, as well as appstream info for all remotes. - Each REF arguments is a full or partial indentifier in the + Each REF argument is a full or partial indentifier in the flatpak ref format, which looks like "(app|runtime)/ID/ARCH/BRANCH". All elements except ID are optional and can be left out, including the slashes, so most of the time you need only specify ID. Any part left out will be matched @@ -69,6 +69,13 @@ with the --commit option. + If the configured remote for a ref being updated has a collection ID configured on it, + flatpak will search mounted filesystems such as USB drives as well as Avahi services + advertised on the local network for the needed refs, in order to support + offline updates. See ostree-find-remotes1 + for more information. + + Note that updating a runtime is different from installing a different branch, and runtime updates are expected to keep strict compatibility. If an application update does cause @@ -146,7 +153,8 @@ - Update to this commit, instead of the tip of the branch. + Update to this commit, instead of the tip of the branch. You can find commits + using flatpak remote-info --log REMOTE REF. @@ -237,14 +245,6 @@ Print OSTree debug information during command processing. - - - - - - Print version information and exit. - - diff -Nru flatpak-0.11.3/doc/flatpak.xml flatpak-1.0.7/doc/flatpak.xml --- flatpak-0.11.3/doc/flatpak.xml 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/doc/flatpak.xml 2019-02-11 12:42:20.000000000 +0000 @@ -197,6 +197,20 @@ Manage flatpak configuration. + + flatpak-repair1 + + + Repair flatpak installation. + + + + flatpak-create-usb1 + + + Copy apps and/or runtimes onto removable media. + + @@ -279,6 +293,38 @@ + Commands for managing the dynamic permission store: + + + + flatpak-permission-remove1 + + + Remove item from permission store. + + + + flatpak-permission-list1 + + + List permissions. + + + + flatpak-permission-show1 + + + Show app permissions. + + + + flatpak-permission-reset1 + + + Reset app permissions. + + + Commands for managing remote repositories: @@ -393,6 +439,57 @@ Create a new commit based on an existing ref. + + flatpak-repo1 + + + Print information about a repo. + + + + + + + File formats + + File formats that are used by Flatpak commands: + + + + flatpak-flatpakref5 + + + Reference to a remote for an application or runtime + + + + flatpak-flatpakrepo5 + + + Reference to a remote + + + + flatpak-remote5 + + + Configuration for a remote + + + + flatpak-installation5 + + + Configuration for an installation location + + + + flatpak-metadata5 + + + Information about an application or runtime + + diff -Nru flatpak-0.11.3/doc/Makefile.am flatpak-1.0.7/doc/Makefile.am --- flatpak-0.11.3/doc/Makefile.am 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/doc/Makefile.am 2019-02-11 12:42:20.000000000 +0000 @@ -35,10 +35,15 @@ flatpak-run.1 \ flatpak-override.1 \ flatpak-enter.1 \ + flatpak-ps.1 \ flatpak-document-export.1 \ flatpak-document-unexport.1 \ flatpak-document-info.1 \ flatpak-document-list.1 \ + flatpak-permission-remove.1 \ + flatpak-permission-list.1 \ + flatpak-permission-show.1 \ + flatpak-permission-reset.1 \ flatpak-build-init.1 \ flatpak-build.1 \ flatpak-build-bundle.1 \ @@ -50,6 +55,8 @@ flatpak-build-commit-from.1 \ flatpak-repo.1 \ flatpak-search.1 \ + flatpak-create-usb.1 \ + flatpak-repair.1 \ $(NULL) man5 = \ diff -Nru flatpak-0.11.3/doc/Makefile.in flatpak-1.0.7/doc/Makefile.in --- flatpak-0.11.3/doc/Makefile.in 2018-02-19 13:20:06.000000000 +0000 +++ flatpak-1.0.7/doc/Makefile.in 2019-02-11 12:42:26.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -177,7 +177,7 @@ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - distdir + distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is @@ -238,6 +238,7 @@ BASE_CFLAGS = @BASE_CFLAGS@ BASE_LIBS = @BASE_LIBS@ BWRAP = @BWRAP@ +CAP_LIB = @CAP_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -245,6 +246,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CONFIG_DIR = @DBUS_CONFIG_DIR@ +DBUS_PROXY = @DBUS_PROXY@ DBUS_SERVICE_DIR = @DBUS_SERVICE_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -374,6 +376,8 @@ XMLTO_FLAGS = @XMLTO_FLAGS@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -459,10 +463,15 @@ flatpak-run.1 \ flatpak-override.1 \ flatpak-enter.1 \ + flatpak-ps.1 \ flatpak-document-export.1 \ flatpak-document-unexport.1 \ flatpak-document-info.1 \ flatpak-document-list.1 \ + flatpak-permission-remove.1 \ + flatpak-permission-list.1 \ + flatpak-permission-show.1 \ + flatpak-permission-reset.1 \ flatpak-build-init.1 \ flatpak-build.1 \ flatpak-build-bundle.1 \ @@ -474,6 +483,8 @@ flatpak-build-commit-from.1 \ flatpak-repo.1 \ flatpak-search.1 \ + flatpak-create-usb.1 \ + flatpak-repair.1 \ $(NULL) man5 = \ @@ -533,8 +544,8 @@ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) @@ -760,7 +771,10 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ diff -Nru flatpak-0.11.3/doc/reference/flatpak-docs.xml flatpak-1.0.7/doc/reference/flatpak-docs.xml --- flatpak-0.11.3/doc/reference/flatpak-docs.xml 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/reference/flatpak-docs.xml 2019-02-11 12:42:20.000000000 +0000 @@ -16,10 +16,14 @@ Flatpak + + + + + - diff -Nru flatpak-0.11.3/doc/reference/flatpak-sections.txt flatpak-1.0.7/doc/reference/flatpak-sections.txt --- flatpak-0.11.3/doc/reference/flatpak-sections.txt 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/flatpak-sections.txt 2019-02-11 12:42:41.000000000 +0000 @@ -14,6 +14,7 @@ flatpak_installation_update flatpak_installation_update_full flatpak_installation_uninstall +flatpak_installation_uninstall_full flatpak_installation_launch flatpak_installation_get_current_installed_app flatpak_installation_get_display_name @@ -26,6 +27,7 @@ flatpak_installation_list_installed_refs_for_update flatpak_installation_list_installed_related_refs_sync flatpak_installation_list_remote_refs_sync +flatpak_installation_list_remotes_by_type flatpak_installation_list_remote_related_refs_sync flatpak_installation_list_remotes flatpak_installation_get_remote_by_name @@ -40,12 +42,20 @@ flatpak_installation_modify_remote flatpak_installation_remove_remote flatpak_installation_update_remote_sync +flatpak_installation_cleanup_local_refs_sync +flatpak_installation_get_config +flatpak_installation_prune_local_repo +flatpak_installation_remove_local_ref_sync +flatpak_installation_set_config_sync +flatpak_installation_update_appstream_full_sync +flatpak_installation_run_triggers flatpak_get_default_arch flatpak_get_supported_arches flatpak_get_system_installations FlatpakProgressCallback FlatpakUpdateFlags FlatpakInstallFlags +FlatpakUninstallFlags FlatpakStorageType FLATPAK_INSTALLATION @@ -66,6 +76,8 @@ flatpak_installed_ref_get_origin flatpak_installed_ref_load_metadata flatpak_installed_ref_get_subpaths +flatpak_installed_ref_get_eol +flatpak_installed_ref_get_eol_rebase FlatpakInstalledRefClass FLATPAK_INSTALLED_REF @@ -79,6 +91,11 @@ FlatpakRemoteRef FlatpakRemoteRef flatpak_remote_ref_get_remote_name +flatpak_remote_ref_get_download_size +flatpak_remote_ref_get_eol +flatpak_remote_ref_get_eol_rebase +flatpak_remote_ref_get_installed_size +flatpak_remote_ref_get_metadata FLATPAK_IS_REMOTE_REF FLATPAK_REMOTE_REF @@ -88,6 +105,23 @@
+flatpak-related-ref +FlatpakRelatedRef +FlatpakRelatedRef +flatpak_related_ref_new +flatpak_related_ref_get_subpaths +flatpak_related_ref_should_download +flatpak_related_ref_should_delete +flatpak_related_ref_should_autoprune + +FLATPAK_IS_RELATED_REF +FLATPAK_RELATED_REF +FLATPAK_TYPE_RELATED_REF +FlatpakRelatedRefClass +flatpak_related_ref_get_type +
+ +
flatpak-ref FlatpakRef FlatpakRef @@ -95,6 +129,7 @@ flatpak_ref_format_ref flatpak_ref_get_arch flatpak_ref_get_branch +flatpak_ref_get_collection_id flatpak_ref_get_commit flatpak_ref_get_kind flatpak_ref_get_name @@ -115,19 +150,27 @@ flatpak_remote_get_name flatpak_remote_get_appstream_dir flatpak_remote_get_appstream_timestamp +flatpak_remote_get_collection_id +flatpak_remote_set_collection_id +flatpak_remote_get_default_branch +flatpak_remote_set_default_branch flatpak_remote_get_gpg_verify flatpak_remote_set_gpg_verify flatpak_remote_set_gpg_key +flatpak_remote_get_nodeps +flatpak_remote_set_nodeps flatpak_remote_get_noenumerate flatpak_remote_set_noenumerate flatpak_remote_get_prio flatpak_remote_set_prio +flatpak_remote_get_remote_type flatpak_remote_get_title flatpak_remote_set_title flatpak_remote_get_url flatpak_remote_set_url flatpak_remote_get_disabled flatpak_remote_set_disabled +FlatpakRemoteType FlatpakRemoteClass FLATPAK_IS_REMOTE @@ -137,10 +180,88 @@
+flatpak-transaction-progress +FlatpakTransactionProgress +FlatpakTransactionProgress +flatpak_transaction_progress_get_is_estimating +flatpak_transaction_progress_get_progress +flatpak_transaction_progress_get_status +flatpak_transaction_progress_set_update_frequency + +FlatpakTransactionProgressClass +FLATPAK_IS_TRANSACTION_PROGRESS +FLATPAK_TRANSACTION_PROGRESS +FLATPAK_TYPE_TRANSACTION_PROGRESS +flatpak_transaction_progress_get_type +
+ +
+flatpak-transaction-operation +FlatpakTransactionOperation +FlatpakTransactionOperation +flatpak_transaction_operation_get_bundle_path +flatpak_transaction_operation_get_commit +flatpak_transaction_operation_get_operation_type +flatpak_transaction_operation_get_ref +flatpak_transaction_operation_get_remote +flatpak_transaction_operation_get_metadata +flatpak_transaction_operation_get_old_metadata +flatpak_transaction_operation_type_to_string + +FlatpakTransactionOperationClass +FLATPAK_IS_TRANSACTION_OPERATION +FLATPAK_TRANSACTION_OPERATION +FLATPAK_TYPE_TRANSACTION_OPERATION +flatpak_transaction_operation_get_type +
+ +
+flatpak-transaction +FlatpakTransaction +FlatpakTransaction +FlatpakTransactionOperationType +FlatpakTransactionErrorDetails +FlatpakTransactionRemoteReason +FlatpakTransactionResult +flatpak_transaction_new_for_installation +flatpak_transaction_add_install +flatpak_transaction_add_install_bundle +flatpak_transaction_add_install_flatpakref +flatpak_transaction_add_update +flatpak_transaction_add_uninstall +flatpak_transaction_add_default_dependency_sources +flatpak_transaction_add_dependency_source +flatpak_transaction_run + +flatpak_transaction_get_current_operation +flatpak_transaction_get_installation +flatpak_transaction_get_operations +flatpak_transaction_is_empty + +flatpak_transaction_set_disable_dependencies +flatpak_transaction_set_disable_prune +flatpak_transaction_set_disable_related +flatpak_transaction_set_disable_static_deltas +flatpak_transaction_set_no_deploy +flatpak_transaction_set_no_pull +flatpak_transaction_set_reinstall +flatpak_transaction_set_force_uninstall +flatpak_transaction_set_default_arch + +FlatpakTransactionClass +FLATPAK_IS_TRANSACTION +FLATPAK_TRANSACTION +FLATPAK_TYPE_TRANSACTION +flatpak_transaction_get_type +
+ +
flatpak-version-macros +FLATPAK_CHECK_VERSION FLATPAK_MAJOR_VERSION FLATPAK_MINOR_VERSION FLATPAK_MICRO_VERSION + FLATPAK_EXTERN
@@ -148,11 +269,16 @@ flatpak-error FLATPAK_ERROR FlatpakError +FLATPAK_PORTAL_ERROR +FlatpakPortalError + flatpak_error_quark +flatpak_portal_error_quark
flatpak-bundle-ref +FlatpakBundleRef FlatpakBundleRef flatpak_bundle_ref_new flatpak_bundle_ref_get_file @@ -161,6 +287,7 @@ flatpak_bundle_ref_get_icon flatpak_bundle_ref_get_origin flatpak_bundle_ref_get_installed_size +flatpak_bundle_ref_get_runtime_repo_url FlatpakBundleRefClass FLATPAK_TYPE_BUNDLE_REF diff -Nru flatpak-0.11.3/doc/reference/flatpak.types flatpak-1.0.7/doc/reference/flatpak.types --- flatpak-0.11.3/doc/reference/flatpak.types 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/flatpak.types 2019-02-11 12:42:41.000000000 +0000 @@ -1,7 +1,11 @@ flatpak_bundle_ref_get_type flatpak_installation_get_type flatpak_installed_ref_get_type +flatpak_instance_get_type flatpak_ref_get_type flatpak_related_ref_get_type flatpak_remote_get_type flatpak_remote_ref_get_type +flatpak_transaction_get_type +flatpak_transaction_operation_get_type +flatpak_transaction_progress_get_type diff -Nru flatpak-0.11.3/doc/reference/html/annotation-glossary.html flatpak-1.0.7/doc/reference/html/annotation-glossary.html --- flatpak-0.11.3/doc/reference/html/annotation-glossary.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/annotation-glossary.html 2019-02-11 12:42:41.000000000 +0000 @@ -7,7 +7,7 @@ - + @@ -62,6 +62,6 @@

Don't free data after the code is done.

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/ch01.html flatpak-1.0.7/doc/reference/html/ch01.html --- flatpak-0.11.3/doc/reference/html/ch01.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/ch01.html 2019-02-11 12:42:41.000000000 +0000 @@ -8,7 +8,7 @@ - + @@ -27,19 +27,31 @@ FlatpakInstallation — Installation information
+FlatpakRemote — Remote repository +
+
+FlatpakTransactionOperation — Operation in a transaction +
+
+FlatpakTransactionProgress — Progress of an operation +
+
+FlatpakTransaction — Transaction information +
+
FlatpakRef — Application reference
FlatpakInstalledRef — Installed application reference
-FlatpakRemoteRef — Remote application reference +FlatpakRelatedRef — Related application reference
-FlatpakRemote — Remote repository +FlatpakRemoteRef — Remote application reference
-flatpak-bundle-ref +FlatpakBundleRef — Application bundle reference
Error codes @@ -50,6 +62,6 @@ +
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakBundleRef.html flatpak-1.0.7/doc/reference/html/FlatpakBundleRef.html --- flatpak-0.11.3/doc/reference/html/FlatpakBundleRef.html 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakBundleRef.html 2019-02-11 12:42:41.000000000 +0000 @@ -0,0 +1,400 @@ + + + + +FlatpakBundleRef: Flatpak Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

FlatpakBundleRef

+

FlatpakBundleRef — Application bundle reference

+
+
+

Functions

+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+FlatpakBundleRef * + +flatpak_bundle_ref_new () +
+GFile * + +flatpak_bundle_ref_get_file () +
+GBytes * + +flatpak_bundle_ref_get_metadata () +
+GBytes * + +flatpak_bundle_ref_get_appstream () +
+GBytes * + +flatpak_bundle_ref_get_icon () +
+char * + +flatpak_bundle_ref_get_origin () +
+guint64 + +flatpak_bundle_ref_get_installed_size () +
+char * + +flatpak_bundle_ref_get_runtime_repo_url () +
+
+
+

Properties

+
+++++ + + + + + +
+GFile *fileRead / Write / Construct Only
+
+
+

Types and Values

+
++++ + + + + +
structFlatpakBundleRef
+
+
+

Object Hierarchy

+
    GObject
+    ╰── FlatpakRef
+        ╰── FlatpakBundleRef
+
+
+
+

Description

+

A FlatpakBundleRef refers to a single-file bundle containing an +application or runtime.

+
+
+

Functions

+
+

flatpak_bundle_ref_new ()

+
FlatpakBundleRef *
+flatpak_bundle_ref_new (GFile *file,
+                        GError **error);
+

Creates a new bundle ref for the given file.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

file

a GFile

 

error

return location for an error.

[allow-none]
+
+
+

Returns

+

a new bundle ref.

+
+
+
+
+

flatpak_bundle_ref_get_file ()

+
GFile *
+flatpak_bundle_ref_get_file (FlatpakBundleRef *self);
+

Get the file this bundle is stored in.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

(transfer full) : an GFile

+
+
+
+
+

flatpak_bundle_ref_get_metadata ()

+
GBytes *
+flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self);
+

Get the metadata for the app/runtime

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

(transfer full) : an GBytes with the metadata contents, or NULL

+
+
+
+
+

flatpak_bundle_ref_get_appstream ()

+
GBytes *
+flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self);
+

Get the compressed appstream for the app/runtime

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

(transfer full) : an GBytes with the appstream contents, or NULL

+
+
+
+
+

flatpak_bundle_ref_get_icon ()

+
GBytes *
+flatpak_bundle_ref_get_icon (FlatpakBundleRef *self,
+                             int size);
+

Get the icon png data for the app/runtime

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakBundleRef

 

size

64 or 128

 
+
+
+

Returns

+

(transfer full) : an GBytes with png contents

+
+
+
+
+

flatpak_bundle_ref_get_origin ()

+
char *
+flatpak_bundle_ref_get_origin (FlatpakBundleRef *self);
+

Get the origin url stored in the bundle

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

(transfer full) : an url string, or NULL

+
+
+
+
+

flatpak_bundle_ref_get_installed_size ()

+
guint64
+flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self);
+

Returns the installed size for the bundle.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

the installed size

+
+
+
+
+

flatpak_bundle_ref_get_runtime_repo_url ()

+
char *
+flatpak_bundle_ref_get_runtime_repo_url
+                               (FlatpakBundleRef *self);
+

Get the runtime flatpakrepo url stored in the bundle (if any)

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakBundleRef

 
+
+
+

Returns

+

(transfer full) : an url string, or NULL

+
+

Since: 0.8.0

+
+
+
+

Types and Values

+
+

struct FlatpakBundleRef

+
struct FlatpakBundleRef;
+
+
+
+

Property Details

+
+

The “file” property

+
  “file”                     GFile *
+

The bundle file that this ref refers to.

+

Flags: Read / Write / Construct Only

+
+
+
+ + + \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/flatpak.devhelp2 flatpak-1.0.7/doc/reference/html/flatpak.devhelp2 --- flatpak-0.11.3/doc/reference/html/flatpak.devhelp2 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/flatpak.devhelp2 2019-02-11 12:42:41.000000000 +0000 @@ -3,11 +3,15 @@ + + + + + - - + @@ -28,6 +32,7 @@ + @@ -40,6 +45,7 @@ + @@ -54,6 +60,13 @@ + + + + + + + @@ -61,10 +74,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -84,69 +177,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru flatpak-0.11.3/doc/reference/html/flatpak-Error-codes.html flatpak-1.0.7/doc/reference/html/flatpak-Error-codes.html --- flatpak-0.11.3/doc/reference/html/flatpak-Error-codes.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/flatpak-Error-codes.html 2019-02-11 12:42:41.000000000 +0000 @@ -6,9 +6,9 @@ - + - + @@ -19,7 +19,7 @@ Home Up -Prev +Prev Next
@@ -32,23 +32,6 @@
-

Functions

-
---- - - - - -
-GQuark - -flatpak_error_quark () -
-
-

Types and Values

@@ -64,19 +47,25 @@ + + + + + + + +
enum FlatpakError
#defineFLATPAK_PORTAL_ERROR
enumFlatpakPortalError

Description

+

The FlatpakError and FlatpakPortalError enumerations contain error codes +for some common errors.

Functions

-
-

flatpak_error_quark ()

-
GQuark
-flatpak_error_quark (void);
-
+

Types and Values

@@ -84,6 +73,7 @@

FLATPAK_ERROR

#define FLATPAK_ERROR flatpak_error_quark ()
 
+

The error domain for FlatpakError errors.


@@ -120,6 +110,184 @@   + +

FLATPAK_ERROR_DIFFERENT_REMOTE

+ +

The App/Runtime is already installed, but from a different remote.

+ +  + + +

FLATPAK_ERROR_ABORTED

+ +

The transaction was aborted (returned TRUE in operation-error signal).

+ +  + + +

FLATPAK_ERROR_SKIPPED

+ +

The App/Runtime install was skipped due to earlier errors.

+ +  + + +

FLATPAK_ERROR_NEED_NEW_FLATPAK

+ +

The App/Runtime needs a more recent version of flatpak.

+ +  + + +

FLATPAK_ERROR_REMOTE_NOT_FOUND

+ +

The specified remote was not found.

+ +  + + +

FLATPAK_ERROR_RUNTIME_NOT_FOUND

+ +

An runtime needed for the app was not found.

+ +  + + +

FLATPAK_ERROR_DOWNGRADE

+ +

The pulled commit is a downgrade, and a downgrade wasn't + specifically allowed. (Since: 1.0)

+ +  + + +

FLATPAK_ERROR_INVALID_REF

+ +

A ref could not be parsed. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_INVALID_DATA

+ +

Invalid data. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_UNTRUSTED

+ +

Missing GPG key or signature. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_SETUP_FAILED

+ +

Sandbox setup failed. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_EXPORT_FAILED

+ +

Exporting data failed. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_REMOTE_USED

+ +

Remote can't be uninstalled. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_RUNTIME_USED

+ +

Runtime can't be uninstalled. (Since: 1.0.3)

+ +  + + +

FLATPAK_ERROR_INVALID_NAME

+ +

Application, runtime or remote name is invalid. (Since: 1.0.3)

+ +  + + +
+ + +
+
+

FLATPAK_PORTAL_ERROR

+
#define FLATPAK_PORTAL_ERROR flatpak_portal_error_quark ()
+
+

The error domain for FlatpakPortalError errors.

+
+
+
+

enum FlatpakPortalError

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

FLATPAK_PORTAL_ERROR_FAILED

+

General portal failure

+
 

FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT

+

An argument was invalid

+
 

FLATPAK_PORTAL_ERROR_NOT_FOUND

+

The object was not fount

+
 

FLATPAK_PORTAL_ERROR_EXISTS

+

The object already exists

+
 

FLATPAK_PORTAL_ERROR_NOT_ALLOWED

+

The call was not allowed

+
 

FLATPAK_PORTAL_ERROR_CANCELLED

+

The call was cancelled by the user

+
 

FLATPAK_PORTAL_ERROR_WINDOW_DESTROYED

+

The window was destroyed by the user

+
 
@@ -127,6 +295,6 @@
+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/flatpak-flatpak-bundle-ref.html flatpak-1.0.7/doc/reference/html/flatpak-flatpak-bundle-ref.html --- flatpak-0.11.3/doc/reference/html/flatpak-flatpak-bundle-ref.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/flatpak-flatpak-bundle-ref.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,361 +0,0 @@ - - - - -flatpak-bundle-ref: Flatpak Library Reference Manual - - - - - - - - - - - - - - - - -
-
-
- - -
-

flatpak-bundle-ref

-

flatpak-bundle-ref

-
-
-

Functions

-
---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-FlatpakBundleRef * - -flatpak_bundle_ref_new () -
-GFile * - -flatpak_bundle_ref_get_file () -
-GBytes * - -flatpak_bundle_ref_get_metadata () -
-GBytes * - -flatpak_bundle_ref_get_appstream () -
-GBytes * - -flatpak_bundle_ref_get_icon () -
-char * - -flatpak_bundle_ref_get_origin () -
-guint64 - -flatpak_bundle_ref_get_installed_size () -
-
-
-

Properties

-
----- - - - - - -
-GFile *fileRead / Write
-
-
-

Types and Values

-
---- - - - - -
structFlatpakBundleRef
-
-
-

Object Hierarchy

-
    GObject
-    ╰── FlatpakRef
-        ╰── FlatpakBundleRef
-
-
-
-

Description

-
-
-

Functions

-
-

flatpak_bundle_ref_new ()

-
FlatpakBundleRef *
-flatpak_bundle_ref_new (GFile *file,
-                        GError **error);
-

Creates a new bundle ref for the given file.

-
-

Parameters

-
----- - - - - - - - - - - - - -

file

a GFile

 

error

return location for an error.

[allow-none]
-
-
-

Returns

-

a new bundle ref.

-
-
-
-
-

flatpak_bundle_ref_get_file ()

-
GFile *
-flatpak_bundle_ref_get_file (FlatpakBundleRef *self);
-

Get the file this bundle is stored in.

-
-

Parameters

-
----- - - - - - -

self

a FlatpakBundleRef

 
-
-
-

Returns

-

(transfer full) : an GFile

-
-
-
-
-

flatpak_bundle_ref_get_metadata ()

-
GBytes *
-flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self);
-

Get the metadata for the app/runtime

-
-

Parameters

-
----- - - - - - -

self

a FlatpakBundleRef

 
-
-
-

Returns

-

(transfer full) : an GBytes with the metadata contents, or NULL

-
-
-
-
-

flatpak_bundle_ref_get_appstream ()

-
GBytes *
-flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self);
-

Get the compressed appstream for the app/runtime

-
-

Parameters

-
----- - - - - - -

self

a FlatpakBundleRef

 
-
-
-

Returns

-

(transfer full) : an GBytes with the appstream contents, or NULL

-
-
-
-
-

flatpak_bundle_ref_get_icon ()

-
GBytes *
-flatpak_bundle_ref_get_icon (FlatpakBundleRef *self,
-                             int size);
-

Get the icon png data for the app/runtime

-
-

Parameters

-
----- - - - - - - - - - - - - -

self

a FlatpakBundleRef

 

size

64 or 128

 
-
-
-

Returns

-

(transfer full) : an GBytes with png contents

-
-
-
-
-

flatpak_bundle_ref_get_origin ()

-
char *
-flatpak_bundle_ref_get_origin (FlatpakBundleRef *self);
-

Get the origin url stored in the bundle

-
-

Parameters

-
----- - - - - - -

self

a FlatpakBundleRef

 
-
-
-

Returns

-

(transfer full) : an url string, or NULL

-
-
-
-
-

flatpak_bundle_ref_get_installed_size ()

-
guint64
-flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self);
-

Returns the installed size for the bundle.

-
-

Parameters

-
----- - - - - - -

self

a FlatpakBundleRef

 
-
-
-

Returns

-

the installed size

-
-
-
-
-

Types and Values

-
-

struct FlatpakBundleRef

-
struct FlatpakBundleRef;
-
-
-
-

Property Details

-
-

The “file” property

-
  “file”                     GFile *
-

Flags: Read / Write

-
-
-
- - - \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakInstallation.html flatpak-1.0.7/doc/reference/html/FlatpakInstallation.html --- flatpak-0.11.3/doc/reference/html/FlatpakInstallation.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakInstallation.html 2019-02-11 12:42:41.000000000 +0000 @@ -7,8 +7,8 @@ - - + + @@ -21,7 +21,7 @@ Home Up Prev -Next +Next
@@ -141,6 +141,14 @@ gboolean +flatpak_installation_uninstall_full () + + + + +gboolean + + flatpak_installation_launch () @@ -235,6 +243,14 @@ GPtrArray * +flatpak_installation_list_remotes_by_type () + + + + +GPtrArray * + + flatpak_installation_list_remote_related_refs_sync () @@ -343,6 +359,62 @@ + +gboolean + + +flatpak_installation_cleanup_local_refs_sync () + + + + +char * + + +flatpak_installation_get_config () + + + + +gboolean + + +flatpak_installation_prune_local_repo () + + + + +gboolean + + +flatpak_installation_remove_local_ref_sync () + + + + +gboolean + + +flatpak_installation_set_config_sync () + + + + +gboolean + + +flatpak_installation_update_appstream_full_sync () + + + + +gboolean + + +flatpak_installation_run_triggers () + + + const char * @@ -397,6 +469,10 @@ enum +FlatpakUninstallFlags + + +enum FlatpakStorageType @@ -416,8 +492,13 @@ location for flatpak applications. Typical installation locations are either system-wide (in $prefix/var/lib/flatpak) or per-user (in ~/.local/share/flatpak).

FlatpakInstallation can list configured remotes as well as installed application -and runtime references (in short: refs). It can also run, install, update and -uninstall applications and runtimes.

+and runtime references (in short: refs), and it can add, remove and modify remotes.

+

FlatpakInstallation can also run, install, update and uninstall applications and +runtimes, but FlatpakTransaction is a better, high-level API for these tasks.

+

To get a list of all configured installations, use flatpak_get_system_installations(), +together with flatpak_installation_new_user().

+

The FlatpakInstallatio nAPI is threadsafe in the sense that it is safe to run two +operations at the same time, in different threads (or processes).

Functions

@@ -1096,13 +1177,15 @@

arch

-

architecture of the app or runtime to uninstall

-  +

architecture of the app or runtime to uninstall; if +NULL, flatpak_get_default_arch() is assumed.

+[nullable]

branch

-

name of the branch of the app or runtime to uninstall

-  +

name of the branch of the app or runtime to uninstall; +if NULL, master is assumed.

+[nullable]

progress

@@ -1135,6 +1218,92 @@

+

flatpak_installation_uninstall_full ()

+
gboolean
+flatpak_installation_uninstall_full (FlatpakInstallation *self,
+                                     FlatpakUninstallFlags flags,
+                                     FlatpakRefKind kind,
+                                     const char *name,
+                                     const char *arch,
+                                     const char *branch,
+                                     FlatpakProgressCallback progress,
+                                     gpointer progress_data,
+                                     GCancellable *cancellable,
+                                     GError **error);
+

Uninstall an application or runtime.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

flags

set of FlatpakUninstallFlags flags

 

kind

what this ref contains (an FlatpakRefKind)

 

name

name of the app or runtime to uninstall

 

arch

architecture of the app or runtime to uninstall; if +NULL, flatpak_get_default_arch() is assumed.

[nullable]

branch

name of the branch of the app or runtime to uninstall; +if NULL, master is assumed.

[nullable]

progress

the callback.

[scope call][nullable]

progress_data

user data passed to progress +.

[closure progress][nullable]

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success

+
+

Since: 0.11.8

+
+
+

flatpak_installation_launch ()

gboolean
 flatpak_installation_launch (FlatpakInstallation *self,
@@ -1472,7 +1641,7 @@
 

Returns

-

an GPtrArray of +

a GPtrArray of FlatpakInstalledRef instances.

[transfer container][element-type FlatpakInstalledRef]

@@ -1521,7 +1690,7 @@

Returns

-

an GPtrArray of +

a GPtrArray of FlatpakInstalledRef instances.

[transfer container][element-type FlatpakInstalledRef]

@@ -1567,8 +1736,8 @@

Returns

-

an GPtrArray of -FlatpakInstalledRef instances.

+

a GPtrArray of +FlatpakInstalledRef instances, or NULL on error.

[transfer container][element-type FlatpakInstalledRef]

@@ -1633,8 +1802,8 @@

Returns

-

an GPtrArray of -FlatpakRelatedRef instances.

+

a GPtrArray of +FlatpakRelatedRef instances.

[transfer container][element-type FlatpakRelatedRef]

Since: 0.6.7

@@ -1645,7 +1814,7 @@
GPtrArray *
 flatpak_installation_list_remote_refs_sync
                                (FlatpakInstallation *self,
-                                const char *remote_name,
+                                const char *remote_or_uri,
                                 GCancellable *cancellable,
                                 GError **error);

Lists all the applications and runtimes in a remote.

@@ -1664,8 +1833,8 @@   -

remote_name

-

the name of the remote

+

remote_or_uri

+

the name or URI of the remote

  @@ -1683,13 +1852,70 @@

Returns

-

an GPtrArray of +

a GPtrArray of FlatpakRemoteRef instances.

[transfer container][element-type FlatpakRemoteRef]


+

flatpak_installation_list_remotes_by_type ()

+
GPtrArray *
+flatpak_installation_list_remotes_by_type
+                               (FlatpakInstallation *self,
+                                const FlatpakRemoteType types[],
+                                gsize num_types,
+                                GCancellable *cancellable,
+                                GError **error);
+

Lists only the remotes whose type is included in the types + argument.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

types

an array of FlatpakRemoteType.

[array length=num_types]

num_types

the number of types provided in types +

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

a GPtrArray of +FlatpakRemote instances.

+

[transfer container][element-type FlatpakRemote]

+
+
+
+

flatpak_installation_list_remote_related_refs_sync ()

GPtrArray *
 flatpak_installation_list_remote_related_refs_sync
@@ -1707,10 +1933,12 @@
 . For instance, locale data or debug information.

The returned list contains all available related refs, but not everyone should always be installed. For example, -flatpak_related_ref_should_download() returns TRUE if the +flatpak_related_ref_should_download() returns TRUE if the reference should be installed/updated with the app, and -flatpak_related_ref_should_delete() returns TRUE if it +flatpak_related_ref_should_delete() returns TRUE if it should be uninstalled with the main ref.

+

The commit property of each FlatpakRelatedRef is not guaranteed to be +non-NULL.

Parameters

@@ -1750,8 +1978,8 @@

Returns

-

an GPtrArray of -FlatpakRelatedRef instances.

+

a GPtrArray of +FlatpakRelatedRef instances.

[transfer container][element-type FlatpakRelatedRef]

Since: 0.6.7

@@ -1763,8 +1991,8 @@ flatpak_installation_list_remotes (FlatpakInstallation *self, GCancellable *cancellable, GError **error); -

Lists the remotes, in priority (highest first) order. For same priority, -an earlier added remote comes before a later added one.

+

Lists the static remotes, in priority (highest first) order. For same +priority, an earlier added remote comes before a later added one.

Parameters

@@ -1858,6 +2086,8 @@ GCancellable *cancellable, GError **error);

Obtains the metadata file from a commit.

+

NOTE: Since 0.11.4 this information is accessible in FlatpakRemoteRef, so this +function is not very useful anymore.

Parameters

@@ -1992,6 +2222,8 @@

Note that if there are locally available data that are in the ref, which is common for instance if you're doing an update then the real download size may be smaller than what is returned here.

+

NOTE: Since 0.11.4 this information is accessible in FlatpakRemoteRef, so this +function is not very useful anymore.

Parameters

@@ -2107,7 +2339,7 @@

Updates the local copy of appstream for remote_name for the specified arch . -If you need progress feedback, use flatpak_installation_update_appstream_full_sync().

+If you need progress feedback, use flatpak_installation_update_appstream_full_sync().

Parameters

@@ -2228,7 +2460,7 @@ in ref_file_data and returns the FlatpakRemoteRef that can be used to install it.

-

Note, the FlatpakRemoteRef will not have the commit field set, to +

Note, the FlatpakRemoteRef will not have the commit field set, or other details, to avoid unnecessary roundtrips. If you need that you have to resolve it explicitly with flatpak_installation_fetch_remote_ref_sync().

@@ -2457,37 +2689,24 @@

-

flatpak_get_default_arch ()

-
const char *
-flatpak_get_default_arch (void);
-

Returns the canonical name for the arch of the current machine.

-
-

Returns

-

an arch string

-
-
-
-
-

flatpak_get_supported_arches ()

-
const char *const *
-flatpak_get_supported_arches (void);
-

Returns the canonical names for the arches that are supported (i.e. can run) -on the current machine, in order of priority (default is first).

-
-

Returns

-

a zero terminated array of arch strings

-
-
-
-
-

flatpak_get_system_installations ()

-
GPtrArray *
-flatpak_get_system_installations (GCancellable *cancellable,
-                                  GError **error);
-

Lists the system installations according to the current configuration and current -availability (e.g. doesn't return a configured installation if not reachable).

+

flatpak_installation_cleanup_local_refs_sync ()

+
gboolean
+flatpak_installation_cleanup_local_refs_sync
+                               (FlatpakInstallation *self,
+                                GCancellable *cancellable,
+                                GError **error);
+

Remove all OSTree refs from the local flatpak repository which are not +in a deployed state. The next time the underlying OSTree repo is pruned, +objects which were attached to that ref will be removed. This is useful if +you pulled a flatpak refs using flatpak_installation_install_full() and +specified FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to +deploy the refs later on and want to remove the local refs to prevent them +from taking up disk space. Note that this will not remove the objects +referred to by ref + from the underlying OSTree repo, you should use +flatpak_installation_prune_local_repo() to do that.

-

Parameters

+

Parameters

@@ -2496,6 +2715,11 @@ + + + + + @@ -2509,27 +2733,23 @@

self

a FlatpakInstallation

 

cancellable

a GCancellable.

[nullable]
-

Returns

-

an GPtrArray of -FlatpakInstallation instances.

-

[transfer container][element-type FlatpakInstallation]

+

Returns

+

TRUE on success

-

Since: 0.8

+

Since: 0.10.0


-

FlatpakProgressCallback ()

-
void
-(*FlatpakProgressCallback) (const char *status,
-                            guint progress,
-                            gboolean estimating,
-                            gpointer user_data);
-

The progress callback is called repeatedly during long-running operations -such as installations or updates, and can be used to update progress information -in a user interface.

-

The callback occurs in the thread-default context of the caller.

+

flatpak_installation_get_config ()

+
char *
+flatpak_installation_get_config (FlatpakInstallation *self,
+                                 const char *key,
+                                 GCancellable *cancellable,
+                                 GError **error);
+

Get a global configuration option for the installation, see +flatpak_installation_set_config_sync() for supported keys.

-

Parameters

+

Parameters

@@ -2538,12 +2758,404 @@ - - + + - + + + + + + + + + + + + + + + +

status

A status string, suitable for display

self

a FlatpakInstallation

 

progress

key

the name of the key to get

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

The (newly allocated) value, or NULL on error (G_KEY_FILE_ERROR_KEY_NOT_FOUND error if key is not set)

+
+
+
+
+

flatpak_installation_prune_local_repo ()

+
gboolean
+flatpak_installation_prune_local_repo (FlatpakInstallation *self,
+                                       GCancellable *cancellable,
+                                       GError **error);
+

Remove all orphaned OSTree objects from the underlying OSTree repo in +self +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success

+
+

Since: 0.10.0

+
+
+
+

flatpak_installation_remove_local_ref_sync ()

+
gboolean
+flatpak_installation_remove_local_ref_sync
+                               (FlatpakInstallation *self,
+                                const char *remote_name,
+                                const char *ref,
+                                GCancellable *cancellable,
+                                GError **error);
+

Remove the OSTree ref given by remote_name +:ref + from the local flatpak +repository. The next time the underlying OSTree repo is pruned, objects +which were attached to that ref will be removed. This is useful if you +pulled a flatpak ref using flatpak_installation_install_full() and +specified FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to +deploy the ref later on and want to remove the local ref to prevent it +from taking up disk space. Note that this will not remove the objects +referred to by ref + from the underlying OSTree repo, you should use +flatpak_installation_prune_local_repo() to do that.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

remote_name

the name of the remote

 

ref

the ref

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success

+
+

Since: 0.10.0

+
+
+
+

flatpak_installation_set_config_sync ()

+
gboolean
+flatpak_installation_set_config_sync (FlatpakInstallation *self,
+                                      const char *key,
+                                      const char *value,
+                                      GCancellable *cancellable,
+                                      GError **error);
+

Set a global configuration option for the installation, currently +the only supported key is "languages", which is a comman-separated +list of langue codes like "sv;en;pl", or "" to mean all languages.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

key

the name of the key to set

 

value

the new value, or NULL to unset

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE if the option was set correctly

+
+
+
+
+

flatpak_installation_update_appstream_full_sync ()

+
gboolean
+flatpak_installation_update_appstream_full_sync
+                               (FlatpakInstallation *self,
+                                const char *remote_name,
+                                const char *arch,
+                                FlatpakProgressCallback progress,
+                                gpointer progress_data,
+                                gboolean *out_changed,
+                                GCancellable *cancellable,
+                                GError **error);
+

Updates the local copy of appstream for remote_name + for the specified arch +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

remote_name

the name of the remote

 

arch

Architecture to update, or NULL for the local machine arch

 

progress

progress callback.

[scope call][nullable]

progress_data

user data passed to progress +.

[closure progress][nullable]

out_changed

Set to TRUE if the contents of the appstream changed, FALSE if nothing changed.

[nullable]

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success, or FALSE on error

+
+
+
+
+

flatpak_installation_run_triggers ()

+
gboolean
+flatpak_installation_run_triggers (FlatpakInstallation *self,
+                                   GCancellable *cancellable,
+                                   GError **error);
+

Run the trigger commands to update the files exported by the apps in +self +. Should be used after one or more app install, upgrade or +uninstall operations with the FLATPAK_INSTALL_FLAGS_NO_TRIGGERS, +FLATPAK_UPDATE_FLAGS_NO_TRIGGERS or FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS +flags set.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

self

a FlatpakInstallation

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success

+
+

Since: 1.0.3

+
+
+
+

flatpak_get_default_arch ()

+
const char *
+flatpak_get_default_arch (void);
+

Returns the canonical name for the arch of the current machine.

+
+

Returns

+

an arch string

+
+
+
+
+

flatpak_get_supported_arches ()

+
const char *const *
+flatpak_get_supported_arches (void);
+

Returns the canonical names for the arches that are supported (i.e. can run) +on the current machine, in order of priority (default is first).

+
+

Returns

+

a zero terminated array of arch strings

+
+
+
+
+

flatpak_get_system_installations ()

+
GPtrArray *
+flatpak_get_system_installations (GCancellable *cancellable,
+                                  GError **error);
+

Lists the system installations according to the current configuration and current +availability (e.g. doesn't return a configured installation if not reachable).

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

a GPtrArray of +FlatpakInstallation instances.

+

[transfer container][element-type FlatpakInstallation]

+
+

Since: 0.8

+
+
+
+

FlatpakProgressCallback ()

+
void
+(*FlatpakProgressCallback) (const char *status,
+                            guint progress,
+                            gboolean estimating,
+                            gpointer user_data);
+

The progress callback is called repeatedly during long-running operations +such as installations or updates, and can be used to update progress information +in a user interface.

+

The callback occurs in the thread-default context of the caller.

+
+

Parameters

+
+++++ + + + + + + + + @@ -2605,8 +3217,26 @@ - - + + + + + + + + + + + +

status

A status string, suitable for display

 

progress

percentage of completion

 

FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS

   +

Don't use static deltas when pulling

+
 

FLATPAK_UPDATE_FLAGS_NO_PRUNE

+

Don't prune the local OSTree repository after updating (Since: 0.11.8)

+
 

FLATPAK_UPDATE_FLAGS_NO_TRIGGERS

+

Don't call triggers after updating. If used, +the caller must later call flatpak_installation_run_triggers() to update +the exported files. (Since: 1.0.3)

+
 
@@ -2634,18 +3264,33 @@

FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS

-  -  + +

Don't use static deltas when pulling

+ + 

FLATPAK_INSTALL_FLAGS_NO_DEPLOY

-  -  + +

Don't install any new builds that might be fetched

+ + 

FLATPAK_INSTALL_FLAGS_NO_PULL

-  -  + +

Don't try to fetch new builds from the remote repo

+ +  + + +

FLATPAK_INSTALL_FLAGS_NO_TRIGGERS

+ +

Don't call triggers after installing. If used, +the caller must later call flatpak_installation_run_triggers() to update +the exported files. (Since: 1.0.3)

+ + 
@@ -2653,6 +3298,47 @@

+

enum FlatpakUninstallFlags

+

Flags to alter the behavior of flatpak_installation_uninstall_full().

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + +

FLATPAK_UNINSTALL_FLAGS_NONE

+

Default

+
 

FLATPAK_UNINSTALL_FLAGS_NO_PRUNE

+

Don't prune the local OSTree repository after uninstalling

+
 

FLATPAK_UNINSTALL_FLAGS_NO_TRIGGERS

+

Don't call triggers after uninstalling. If used, +the caller must later call flatpak_installation_run_triggers() to update +the exported file. (Since: 1.0.3)

+
 
+
+

Since: 0.11.8

+
+
+

enum FlatpakStorageType

Flags to alter the behavior of flatpak_installation_install_full().

@@ -2705,8 +3391,12 @@

Since: 0.6.15

+
+

See Also

+

FlatpakTransaction

+
+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakInstalledRef.html flatpak-1.0.7/doc/reference/html/FlatpakInstalledRef.html --- flatpak-0.11.3/doc/reference/html/FlatpakInstalledRef.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakInstalledRef.html 2019-02-11 12:42:41.000000000 +0000 @@ -7,8 +7,8 @@ - - + + @@ -22,7 +22,7 @@ Home Up Prev -Next +Next
@@ -93,6 +93,20 @@ flatpak_installed_ref_get_subpaths () + +const char * + + +flatpak_installed_ref_get_eol () + + + +const char * + + +flatpak_installed_ref_get_eol_rebase () + +
@@ -112,6 +126,18 @@ Read / Write + +gchar * +end-of-life +Read / Write / Construct Only + + + +gchar * +end-of-life-rebase +Read / Write / Construct Only + + guint64 installed-size Read / Write @@ -372,6 +398,62 @@

[transfer none]

+
+
+

flatpak_installed_ref_get_eol ()

+
const char *
+flatpak_installed_ref_get_eol (FlatpakInstalledRef *self);
+

Returns the end-of-life reason string, or NULL if the +ref is not end-of-lifed.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakInstalledRef

 
+
+
+

Returns

+

the end-of-life reason or NULL.

+

[transfer none]

+
+
+
+
+

flatpak_installed_ref_get_eol_rebase ()

+
const char *
+flatpak_installed_ref_get_eol_rebase (FlatpakInstalledRef *self);
+

Returns the end-of-life rebased ref, or NULL if the +ref is not end-of-lifed.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakInstalledRef

 
+
+
+

Returns

+

the end-of-life rebased ref or NULL.

+

[transfer none]

+
+

Types and Values

@@ -391,6 +473,22 @@

+

The “end-of-life” property

+
  “end-of-life”              gchar *
+

The reason for the ref to be end of life.

+

Flags: Read / Write / Construct Only

+

Default value: NULL

+
+
+
+

The “end-of-life-rebase” property

+
  “end-of-life-rebase”       gchar *
+

The new ref for the end-of-lifed ref.

+

Flags: Read / Write / Construct Only

+

Default value: NULL

+
+
+

The “installed-size” property

  “installed-size”           guint64

The installed size of the application.

@@ -425,11 +523,12 @@

The “subpaths” property

  “subpaths”                 GStrv
+

The subpaths for a partially installed ref.

Flags: Read / Write

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakRef.html flatpak-1.0.7/doc/reference/html/FlatpakRef.html --- flatpak-0.11.3/doc/reference/html/FlatpakRef.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakRef.html 2019-02-11 12:42:41.000000000 +0000 @@ -6,9 +6,9 @@ - + - + @@ -21,7 +21,7 @@ Home Up -Prev +Prev Next
@@ -67,6 +67,13 @@ const char * +flatpak_ref_get_collection_id () + + + +const char * + + flatpak_ref_get_commit () @@ -109,36 +116,36 @@ gchar * arch -Read / Write +Read / Write / Construct Only gchar * branch -Read / Write +Read / Write / Construct Only gchar * collection-id -Read / Write +Read / Write / Construct Only gchar * commit -Read / Write +Read / Write / Construct Only FlatpakRefKind kind -Read / Write +Read / Write / Construct Only gchar * name -Read / Write +Read / Write / Construct Only
@@ -166,14 +173,15 @@

Object Hierarchy

    GObject
     ╰── FlatpakRef
-        ├── FlatpakBundleRef
+        ├── FlatpakBundleRef
         ├── FlatpakInstalledRef
+        ├── FlatpakRelatedRef
         ╰── FlatpakRemoteRef
 

Description

-

Currently flatpak manages two types of binary artifacts: applications, and +

Currently Flatpak manages two types of binary artifacts: applications, and runtimes. Applications contain a program that desktop users can run, while runtimes contain only libraries and data. An FlatpakRef object (or short: ref) can refer to either of these.

@@ -181,6 +189,7 @@ name, arch and branch, e.g. app/org.gnome.evince/x86_64/master. The functions flatpak_ref_parse() and flatpak_ref_format_ref() can be used to convert FlatpakRef objects into this string representation and back.

+

FlatpakRef objects are immutable and can be passed freely between threads.

To uniquely identify a particular version of an application or runtime, you need a commit.

The subclasses FlatpakInstalledRef and FlatpakRemoteRef provide more information @@ -271,6 +280,33 @@


+

flatpak_ref_get_collection_id ()

+
const char *
+flatpak_ref_get_collection_id (FlatpakRef *self);
+

Gets the collection ID of the ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRef

 
+
+
+

Returns

+

the collection ID.

+

[transfer none]

+
+
+
+

flatpak_ref_get_commit ()

const char *
 flatpak_ref_get_commit (FlatpakRef *self);
@@ -430,7 +466,7 @@

The “arch” property

  “arch”                     gchar *

The architecture of the application or runtime.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL


@@ -438,7 +474,7 @@

The “branch” property

  “branch”                   gchar *

The branch of the application or runtime.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL


@@ -446,7 +482,7 @@

The “collection-id” property

  “collection-id”            gchar *

The collection ID.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL


@@ -454,7 +490,7 @@

The “commit” property

  “commit”                   gchar *

The commit.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL


@@ -462,7 +498,7 @@

The “kind” property

  “kind”                     FlatpakRefKind

The kind of artifact.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: FLATPAK_REF_KIND_APP


@@ -470,12 +506,12 @@

The “name” property

  “name”                     gchar *

The name of the application or runtime.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakRelatedRef.html flatpak-1.0.7/doc/reference/html/FlatpakRelatedRef.html --- flatpak-0.11.3/doc/reference/html/FlatpakRelatedRef.html 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakRelatedRef.html 2019-02-11 12:42:41.000000000 +0000 @@ -0,0 +1,357 @@ + + + + +FlatpakRelatedRef: Flatpak Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

FlatpakRelatedRef

+

FlatpakRelatedRef — Related application reference

+
+
+

Functions

+
++++ + + + + + + + + + + + + + + + + + + + + + + +
+FlatpakRelatedRef * + +flatpak_related_ref_new () +
const char * const * + +flatpak_related_ref_get_subpaths () +
+gboolean + +flatpak_related_ref_should_download () +
+gboolean + +flatpak_related_ref_should_delete () +
+gboolean + +flatpak_related_ref_should_autoprune () +
+
+
+

Properties

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +
gbooleanshould-autopruneRead / Write / Construct Only
gbooleanshould-deleteRead / Write / Construct Only
gbooleanshould-downloadRead / Write / Construct Only
GStrvsubpathsRead / Write / Construct Only
+
+
+

Types and Values

+
++++ + + + + +
structFlatpakRelatedRef
+
+
+

Object Hierarchy

+
    GObject
+    ╰── FlatpakRef
+        ╰── FlatpakRelatedRef
+
+
+
+

Description

+

A FlatpakRelatedRef provides information about an ref that is related +to another ref. For instance, the local extension ref of an app.

+
+
+

Functions

+
+

flatpak_related_ref_new ()

+
FlatpakRelatedRef *
+flatpak_related_ref_new (const char *collection_id,
+                         const char *full_ref,
+                         const char *commit,
+                         char **subpaths,
+                         gboolean download,
+                         gboolean delete);
+

Creates a new FlatpakRelatedRef object.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

collection_id

the collection ID.

[nullable]

full_ref

a full ref to refer to

 

commit

a commit ID to refer to.

[nullable]

subpaths

a nul-terminated array of subpaths.

[nullable]

download

whether to auto-download the ref with the main ref

 

delete

whether to auto-delete the ref with the main ref

 
+
+
+

Returns

+

a new ref

+
+
+
+
+

flatpak_related_ref_get_subpaths ()

+
const char * const *
+flatpak_related_ref_get_subpaths (FlatpakRelatedRef *self);
+

Returns the subpaths that should be installed/updated for the ref. +This returns NULL if all files should be installed.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRelatedRef

 
+
+
+

Returns

+

A strv, or NULL.

+

[transfer none]

+
+

Since: 0.6.7

+
+
+
+

flatpak_related_ref_should_download ()

+
gboolean
+flatpak_related_ref_should_download (FlatpakRelatedRef *self);
+

Returns whether to auto-download the ref with the main ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRelatedRef

 
+
+
+

Returns

+

TRUE if the ref should be downloaded with the main ref.

+
+

Since: 0.6.7

+
+
+
+

flatpak_related_ref_should_delete ()

+
gboolean
+flatpak_related_ref_should_delete (FlatpakRelatedRef *self);
+

Returns whether to auto-delete the ref with the main ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRelatedRef

 
+
+
+

Returns

+

TRUE if the ref should be deleted with the main ref.

+
+

Since: 0.6.7

+
+
+
+

flatpak_related_ref_should_autoprune ()

+
gboolean
+flatpak_related_ref_should_autoprune (FlatpakRelatedRef *self);
+

Returns whether to delete when pruning unused refs.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRelatedRef

 
+
+
+

Returns

+

TRUE if the ref should be considered unused when pruning.

+
+

Since: 0.11.8

+
+
+
+

Types and Values

+
+

struct FlatpakRelatedRef

+
struct FlatpakRelatedRef;
+
+
+
+

Property Details

+
+

The “should-autoprune” property

+
  “should-autoprune”         gboolean
+

Whether to delete when pruning unused refs.

+

Flags: Read / Write / Construct Only

+

Default value: FALSE

+
+
+
+

The “should-delete” property

+
  “should-delete”            gboolean
+

Whether to auto-delete the ref with the main ref.

+

Flags: Read / Write / Construct Only

+

Default value: FALSE

+
+
+
+

The “should-download” property

+
  “should-download”          gboolean
+

Whether to auto-download the ref with the main ref.

+

Flags: Read / Write / Construct Only

+

Default value: FALSE

+
+
+
+

The “subpaths” property

+
  “subpaths”                 GStrv
+

The subpaths for a partially installed ref.

+

Flags: Read / Write / Construct Only

+
+
+
+ + + \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakRemote.html flatpak-1.0.7/doc/reference/html/FlatpakRemote.html --- flatpak-0.11.3/doc/reference/html/FlatpakRemote.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakRemote.html 2019-02-11 12:42:41.000000000 +0000 @@ -6,9 +6,9 @@ - - - + + + @@ -21,8 +21,8 @@ Home Up -Prev -Next +Prev +Next
@@ -74,6 +74,38 @@ +char * + + +flatpak_remote_get_collection_id () + + + + +void + + +flatpak_remote_set_collection_id () + + + + +char * + + +flatpak_remote_get_default_branch () + + + + +void + + +flatpak_remote_set_default_branch () + + + + gboolean @@ -101,6 +133,22 @@ gboolean +flatpak_remote_get_nodeps () + + + + +void + + +flatpak_remote_set_nodeps () + + + + +gboolean + + flatpak_remote_get_noenumerate () @@ -130,6 +178,14 @@ +FlatpakRemoteType + + +flatpak_remote_get_remote_type () + + + + char * @@ -195,7 +251,7 @@ Read / Write -FlatpakRemoteType +FlatpakRemoteType type Read / Write / Construct Only @@ -209,10 +265,16 @@ - + + struct FlatpakRemote - + + +enum +FlatpakRemoteType + +
@@ -369,6 +431,128 @@

+

flatpak_remote_get_collection_id ()

+
char *
+flatpak_remote_get_collection_id (FlatpakRemote *self);
+

Returns the repository collection ID of this remote, if set.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemote

 
+
+
+

Returns

+

the collection ID, or NULL if unset.

+

[transfer full][nullable]

+
+
+
+
+

flatpak_remote_set_collection_id ()

+
void
+flatpak_remote_set_collection_id (FlatpakRemote *self,
+                                  const char *collection_id);
+

Sets the repository collection ID of this remote.

+

Note: This is a local modification of this object, you must commit changes +using flatpak_installation_modify_remote() for the changes to take +effect.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakRemote

 

collection_id

The new collection ID, or NULL to unset.

[nullable]
+
+
+
+
+

flatpak_remote_get_default_branch ()

+
char *
+flatpak_remote_get_default_branch (FlatpakRemote *self);
+

Returns the default branch configured for the remote.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemote

 
+
+
+

Returns

+

the default branch, or NULL.

+

[transfer full]

+
+

Since: 0.6.12

+
+
+
+

flatpak_remote_set_default_branch ()

+
void
+flatpak_remote_set_default_branch (FlatpakRemote *self,
+                                   const char *default_branch);
+

Sets the default branch configured for this remote.

+

Note: This is a local modification of this object, you must commit changes +using flatpak_installation_modify_remote() for the changes to take +effect.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakRemote

 

default_branch

The new default_branch

 
+
+

Since: 0.6.12

+
+
+

flatpak_remote_get_gpg_verify ()

gboolean
 flatpak_remote_get_gpg_verify (FlatpakRemote *self);
@@ -461,6 +645,65 @@

+

flatpak_remote_get_nodeps ()

+
gboolean
+flatpak_remote_get_nodeps (FlatpakRemote *self);
+

Returns whether this remote should be used to find dependencies.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemote

 
+
+
+

Returns

+

whether the remote is marked as "don't use for dependencies"

+
+
+
+
+

flatpak_remote_set_nodeps ()

+
void
+flatpak_remote_set_nodeps (FlatpakRemote *self,
+                           gboolean nodeps);
+

Sets the nodeps config of this remote. See flatpak_remote_get_nodeps().

+

Note: This is a local modification of this object, you must commit changes +using flatpak_installation_modify_remote() for the changes to take +effect.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakRemote

 

nodeps

a bool

 
+
+
+
+

flatpak_remote_get_noenumerate ()

gboolean
 flatpak_remote_get_noenumerate (FlatpakRemote *self);
@@ -579,6 +822,33 @@

+

flatpak_remote_get_remote_type ()

+
FlatpakRemoteType
+flatpak_remote_get_remote_type (FlatpakRemote *self);
+

Get the value of “type”.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemote

 
+
+
+

Returns

+

the type of remote this is

+
+

Since: 0.9.8

+
+
+

flatpak_remote_get_title ()

char *
 flatpak_remote_get_title (FlatpakRemote *self);
@@ -720,7 +990,7 @@

Returns

-

whether the remote is marked as "don't enumerate"

+

whether the remote is marked as disabled


@@ -729,7 +999,7 @@
void
 flatpak_remote_set_disabled (FlatpakRemote *self,
                              gboolean disabled);
-

Sets the disabled config of this remote. See flatpak_remote_get_disable().

+

Sets the disabled config of this remote. See flatpak_remote_get_disabled().

Note: This is a local modification of this object, you must commit changes using flatpak_installation_modify_remote() for the changes to take effect.

@@ -763,6 +1033,45 @@

struct FlatpakRemote

struct FlatpakRemote;
+
+
+

enum FlatpakRemoteType

+

Different types of FlatpakRemote +.

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + +

FLATPAK_REMOTE_TYPE_STATIC

+

Statically configured remote

+
 

FLATPAK_REMOTE_TYPE_USB

+

Dynamically detected local pathname remote

+
 

FLATPAK_REMOTE_TYPE_LAN

+

Dynamically detected network remote

+
 
+
+

Property Details

@@ -779,7 +1088,7 @@

The “type” property

-
  “type”                     FlatpakRemoteType
+
  “type”                     FlatpakRemoteType

The type of the remote: whether it comes from static configuration files (FLATPAK_REMOTE_TYPE_STATIC ) or has been dynamically found from the local @@ -795,6 +1104,6 @@

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakRemoteRef.html flatpak-1.0.7/doc/reference/html/FlatpakRemoteRef.html --- flatpak-0.11.3/doc/reference/html/FlatpakRemoteRef.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakRemoteRef.html 2019-02-11 12:42:41.000000000 +0000 @@ -6,9 +6,9 @@ - - - + + + @@ -21,8 +21,8 @@ Home Up -Prev -Next +Prev +Next
@@ -40,13 +40,53 @@ - + + const char * flatpak_remote_ref_get_remote_name () - + + + +guint64 + + +flatpak_remote_ref_get_download_size () + + + +const char * + + +flatpak_remote_ref_get_eol () + + + +const char * + + +flatpak_remote_ref_get_eol_rebase () + + + + +guint64 + + +flatpak_remote_ref_get_installed_size () + + + + +GBytes * + + +flatpak_remote_ref_get_metadata () + + +
@@ -57,12 +97,42 @@ - + + +guint64 +download-size +Read / Write / Construct Only + + + +gchar * +end-of-life +Read / Write / Construct Only + + + +gchar * +end-of-life-rebase +Read / Write / Construct Only + + +guint64 +installed-size +Read / Write / Construct Only + + + +GBytes * +metadata +Read / Write / Construct Only + + gchar * remote-name -Read / Write - +Read / Write / Construct Only + +
@@ -118,6 +188,142 @@

[transfer none]

+
+
+

flatpak_remote_ref_get_download_size ()

+
guint64
+flatpak_remote_ref_get_download_size (FlatpakRemoteRef *self);
+

Returns the download size of the ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemoteRef

 
+
+
+

Returns

+

the download size

+
+
+
+
+

flatpak_remote_ref_get_eol ()

+
const char *
+flatpak_remote_ref_get_eol (FlatpakRemoteRef *self);
+

Returns the end-of-life reason string, or NULL if the +ref is not end-of-lifed.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemoteRef

 
+
+
+

Returns

+

the end-of-life reason or NULL.

+

[transfer none]

+
+
+
+
+

flatpak_remote_ref_get_eol_rebase ()

+
const char *
+flatpak_remote_ref_get_eol_rebase (FlatpakRemoteRef *self);
+

Returns the end-of-life rebased ref, or NULL if the +ref is not end-of-lifed.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemoteRef

 
+
+
+

Returns

+

the end-of-life rebased ref or NULL.

+

[transfer none]

+
+
+
+
+

flatpak_remote_ref_get_installed_size ()

+
guint64
+flatpak_remote_ref_get_installed_size (FlatpakRemoteRef *self);
+

Returns the installed size of the ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemoteRef

 
+
+
+

Returns

+

the installed size

+
+
+
+
+

flatpak_remote_ref_get_metadata ()

+
GBytes *
+flatpak_remote_ref_get_metadata (FlatpakRemoteRef *self);
+

Returns the app metadata from the metadata cach of the ref.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakRemoteRef

 
+
+
+

Returns

+

a GBytes with the metadata file +contents or NULL.

+

[transfer none][nullable]

+
+

Types and Values

@@ -129,15 +335,54 @@

Property Details

+

The “download-size” property

+
  “download-size”            guint64
+

The download size of the application.

+

Flags: Read / Write / Construct Only

+

Default value: 0

+
+
+
+

The “end-of-life” property

+
  “end-of-life”              gchar *
+

The reason for the ref to be end of life.

+

Flags: Read / Write / Construct Only

+

Default value: NULL

+
+
+
+

The “end-of-life-rebase” property

+
  “end-of-life-rebase”       gchar *
+

The new ref for the end of lifeed ref.

+

Flags: Read / Write / Construct Only

+

Default value: NULL

+
+
+
+

The “installed-size” property

+
  “installed-size”           guint64
+

The installed size of the application.

+

Flags: Read / Write / Construct Only

+

Default value: 0

+
+
+
+

The “metadata” property

+
  “metadata”                 GBytes *
+

The metadata info for the application.

+

Flags: Read / Write / Construct Only

+
+
+

The “remote-name” property

  “remote-name”              gchar *

The name of the remote.

-

Flags: Read / Write

+

Flags: Read / Write / Construct Only

Default value: NULL

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakTransaction.html flatpak-1.0.7/doc/reference/html/FlatpakTransaction.html --- flatpak-0.11.3/doc/reference/html/FlatpakTransaction.html 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakTransaction.html 2019-02-11 12:42:41.000000000 +0000 @@ -0,0 +1,1643 @@ + + + + +FlatpakTransaction: Flatpak Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

FlatpakTransaction

+

FlatpakTransaction — Transaction information

+
+
+

Functions

+ +
+
+

Properties

+
+++++ + + + + + +
+FlatpakInstallation *installationRead / Write / Construct Only
+
+
+

Signals

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
gbooleanadd-new-remoteRun Last
gintchoose-remote-for-refRun Last
voidend-of-lifedRun Last
voidnew-operationRun Last
voidoperation-doneRun Last
gbooleanoperation-errorRun Last
gbooleanreadyRun Last
+
+
+

Types and Values

+ +
+
+

Object Hierarchy

+
    GObject
+    ╰── FlatpakTransaction
+
+
+
+

Implemented Interfaces

+

+FlatpakTransaction implements + GInitable.

+
+
+

Description

+

FlatpakTransaction is an object representing an install/update +transaction. You create an object like this using flatpak_transaction_new_for_installation() +and then you add all the operations (installs, updates, etc) you wish to do. Then +you start the transaction with flatpak_transaction_run() which will resolve all kinds +of dependencies and report progress and status while downloading and installing these.

+

A transaction is a blocking operation, and all signals are emitted in the same thread. +This means you should either handle the signals directly (say, by doing blocking console +interaction, or by just returning without interaction), or run the operation in a separate +thread and do your own forwarding to the GUI thread.

+

Despite the name, a FlatpakTransaction is more like a batch operation than a transaction +in the database sense. Individual operations are carried out sequentially, and are atomic. +They become visible to the system as they are completed. When an error occurs, already +completed operations are not rolled back.

+

The FlatpakTransaction API is threadsafe in the sense that it is safe to run two +transactions at the same time, in different threads (or processes).

+
+
+

Functions

+
+

flatpak_transaction_new_for_installation ()

+
FlatpakTransaction *
+flatpak_transaction_new_for_installation
+                               (FlatpakInstallation *installation,
+                                GCancellable *cancellable,
+                                GError **error);
+

Creates a new FlatpakTransaction object that can be used to do installation +and updates of multiple refs, as well as their dependencies, in a single +operation. Set the options you want on the transaction and add the +refs you want to install/update, then start the transaction with +flatpak_transaction_run().

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

installation

a FlatpakInstallation

 

cancellable

a GCancellable.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

a FlatpakTransaction, or NULL on failure.

+

[transfer full]

+
+
+
+
+

flatpak_transaction_add_install ()

+
gboolean
+flatpak_transaction_add_install (FlatpakTransaction *self,
+                                 const char *remote,
+                                 const char *ref,
+                                 const char **subpaths,
+                                 GError **error);
+

Adds installing the given ref to this transaction.

+

The remote + can either be a configured remote of the installation, +or a file:// uri pointing at a local repository to install from, +in which case an origin remote is created.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

remote

the name of the remote

 

ref

the ref

 

subpaths

subpaths to install, or the +empty list or NULL to pull all subpaths.

[nullable][array zero-terminated=1]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success; FALSE with error +set on failure.

+
+
+
+
+

flatpak_transaction_add_install_bundle ()

+
gboolean
+flatpak_transaction_add_install_bundle
+                               (FlatpakTransaction *self,
+                                GFile *file,
+                                GBytes *gpg_data,
+                                GError **error);
+

Adds installing the given bundle to this transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

file

a GFile that is an flatpak bundle

 

gpg_data

GPG key with which to check bundle signatures, or +NULL to use the key embedded in the bundle (if any).

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success; FALSE with error +set on failure.

+
+
+
+
+

flatpak_transaction_add_install_flatpakref ()

+
gboolean
+flatpak_transaction_add_install_flatpakref
+                               (FlatpakTransaction *self,
+                                GBytes *flatpakref_data,
+                                GError **error);
+

Adds installing the given flatpakref to this transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

flatpakref_data

data from a flatpakref file

 

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success; FALSE with error +set on failure.

+
+
+
+
+

flatpak_transaction_add_update ()

+
gboolean
+flatpak_transaction_add_update (FlatpakTransaction *self,
+                                const char *ref,
+                                const char **subpaths,
+                                const char *commit,
+                                GError **error);
+

Adds updating the given ref to this transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

ref

the ref

 

subpaths

subpaths to install; NULL +to use the current set, or { "", NULL } to pull all subpaths.

[nullable][array zero-terminated=1]

commit

the commit to update to, or NULL to use the latest.

[nullable]

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success; FALSE with error +set on failure.

+
+
+
+
+

flatpak_transaction_add_uninstall ()

+
gboolean
+flatpak_transaction_add_uninstall (FlatpakTransaction *self,
+                                   const char *ref,
+                                   GError **error);
+

Adds uninstalling the given ref to this transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

ref

the ref

 

error

return location for a GError

 
+
+
+

Returns

+

TRUE on success; FALSE with error +set on failure.

+
+
+
+
+

flatpak_transaction_add_default_dependency_sources ()

+
void
+flatpak_transaction_add_default_dependency_sources
+                               (FlatpakTransaction *self);
+

Similar to flatpak_transaction_add_dependency_source(), but adds +all the default installations, which means all the defined system-wide +(but not per-user) installations.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransaction

 
+
+
+
+
+

flatpak_transaction_add_dependency_source ()

+
void
+flatpak_transaction_add_dependency_source
+                               (FlatpakTransaction *self,
+                                FlatpakInstallation *installation);
+

Adds an extra installation as a source for application dependencies. +This means that applications can be installed in this transaction relying +on runtimes from this additional installation (wheres it would normally +install required runtimes that are not installed in the installation +the transaction works on).

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

installation

a FlatpakInstallation

 
+
+
+
+
+

flatpak_transaction_run ()

+
gboolean
+flatpak_transaction_run (FlatpakTransaction *self,
+                         GCancellable *cancellable,
+                         GError **error);
+

Executes the transaction.

+

During the cause of the execution, various signal will get emitted. +The FlatpakTransaction::choose-remote-for-ref and +“add-new-remote” signals may get emitted while +resolving operations. “ready” is emitted when +the transaction has been fully resolved, and “new-operation” +and “operation-done” are emitted while the operations +are carried out. If an error occurs at any point during the execution, +“operation-error” is emitted.

+

Note that this call blocks until the transaction is done.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

self

a FlatpakTransaction

 

cancellable

a GCancellable.

[nullable]

error

return location for an error

 
+
+
+

Returns

+

TRUE on success, FALSE if an error occurred

+
+
+
+
+

flatpak_transaction_get_current_operation ()

+
FlatpakTransactionOperation *
+flatpak_transaction_get_current_operation
+                               (FlatpakTransaction *self);
+

Gets the current operation.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransaction

 
+
+
+

Returns

+

the current FlatpakTransactionOperation.

+

[transfer full]

+
+
+
+
+

flatpak_transaction_get_installation ()

+
FlatpakInstallation *
+flatpak_transaction_get_installation (FlatpakTransaction *self);
+

Gets the installation this transaction was created for.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

a FlatpakInstallation.

+

[transfer full]

+
+
+
+
+

flatpak_transaction_get_operations ()

+
GList *
+flatpak_transaction_get_operations (FlatpakTransaction *self);
+

Gets the list of operations.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransaction

 
+
+
+

Returns

+

a GList of operations.

+

[transfer full][element-type FlatpakTransactionOperation]

+
+
+
+
+

flatpak_transaction_is_empty ()

+
gboolean
+flatpak_transaction_is_empty (FlatpakTransaction *self);
+

Returns whether the transaction contains any operations.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransaction

 
+
+
+

Returns

+

TRUE if the transaction is empty

+
+
+
+
+

flatpak_transaction_set_disable_dependencies ()

+
void
+flatpak_transaction_set_disable_dependencies
+                               (FlatpakTransaction *self,
+                                gboolean disable_dependencies);
+

Sets whether the transaction should ignore runtime dependencies +when resolving operations for applications.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

disable_dependencies

whether to disable runtime dependencies

 
+
+
+
+
+

flatpak_transaction_set_disable_prune ()

+
void
+flatpak_transaction_set_disable_prune (FlatpakTransaction *self,
+                                       gboolean disable_prune);
+

Sets whether the transaction should avoid pruning the local OSTree +repository after updating.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

disable_prune

whether to avoid pruning

 
+
+
+
+
+

flatpak_transaction_set_disable_related ()

+
void
+flatpak_transaction_set_disable_related
+                               (FlatpakTransaction *self,
+                                gboolean disable_related);
+

Sets whether the transaction should avoid adding related refs +when resolving operations. Related refs are extensions that are +suggested by apps, such as locales.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

disable_related

whether to avoid adding related refs

 
+
+
+
+
+

flatpak_transaction_set_disable_static_deltas ()

+
void
+flatpak_transaction_set_disable_static_deltas
+                               (FlatpakTransaction *self,
+                                gboolean disable_static_deltas);
+

Sets whether the transaction should avoid using static +deltas when pulling.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

disable_static_deltas

whether to avoid static deltas

 
+
+
+
+
+

flatpak_transaction_set_no_deploy ()

+
void
+flatpak_transaction_set_no_deploy (FlatpakTransaction *self,
+                                   gboolean no_deploy);
+

Sets whether the transaction should download updates, but +not deploy them.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

no_deploy

whether to avoid deploying

 
+
+
+
+
+

flatpak_transaction_set_no_pull ()

+
void
+flatpak_transaction_set_no_pull (FlatpakTransaction *self,
+                                 gboolean no_pull);
+

Sets whether the transaction should operate only on locally +available data.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

no_pull

whether to avoid pulls

 
+
+
+
+
+

flatpak_transaction_set_reinstall ()

+
void
+flatpak_transaction_set_reinstall (FlatpakTransaction *self,
+                                   gboolean reinstall);
+

Sets whether the transaction should uninstall first if a +ref is already installed.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

reinstall

whether to reinstall refs

 
+
+
+
+
+

flatpak_transaction_set_force_uninstall ()

+
void
+flatpak_transaction_set_force_uninstall
+                               (FlatpakTransaction *self,
+                                gboolean force_uninstall);
+

Sets whether the transaction should uninstall files even +if they're used by a running application.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

force_uninstall

whether to force-uninstall refs

 
+
+
+
+
+

flatpak_transaction_set_default_arch ()

+
void
+flatpak_transaction_set_default_arch (FlatpakTransaction *self,
+                                      const char *arch);
+

Sets the architecture to default to where it is unspecified.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransaction

 

arch

the arch to make default

 
+
+
+
+
+

Types and Values

+
+

FlatpakTransaction

+
typedef struct _FlatpakTransaction FlatpakTransaction;
+
+
+
+

enum FlatpakTransactionOperationType

+

The type of a FlatpakTransactionOperation.

+
+

Members

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

FLATPAK_TRANSACTION_OPERATION_INSTALL

+

Install a ref from a remote

+
 

FLATPAK_TRANSACTION_OPERATION_UPDATE

+

Update an installed ref

+
 

FLATPAK_TRANSACTION_OPERATION_INSTALL_BUNDLE

+

Install a bundle from a file

+
 

FLATPAK_TRANSACTION_OPERATION_UNINSTALL

+

Uninstall a ref

+
 

FLATPAK_TRANSACTION_OPERATION_LAST_TYPE

+

The (currently) last operation type

+
 
+
+
+
+
+

enum FlatpakTransactionErrorDetails

+

The details for “operation-error”.

+
+

Members

+
+++++ + + + + + +

FLATPAK_TRANSACTION_ERROR_DETAILS_NON_FATAL

+

The operation failure was not fatal

+
 
+
+
+
+
+

enum FlatpakTransactionRemoteReason

+

The reason for “add-new-remote”.

+
+

Members

+
+++++ + + + + + + + + + + + + +

FLATPAK_TRANSACTION_REMOTE_GENERIC_REPO

+

The remote specified in the flatpakref has other apps too

+
 

FLATPAK_TRANSACTION_REMOTE_RUNTIME_DEPS

+

The remote has runtimes needed for the app

+
 
+
+
+
+
+

enum FlatpakTransactionResult

+

The details for “operation-done”.

+
+

Members

+
+++++ + + + + + +

FLATPAK_TRANSACTION_RESULT_NO_CHANGE

+

The update caused no changes

+
 
+
+
+
+
+

Property Details

+
+

The “installation” property

+
  “installation”             FlatpakInstallation *
+

The installation that the transaction operates on.

+

Flags: Read / Write / Construct Only

+
+
+
+

Signal Details

+
+

The “add-new-remote” signal

+
gboolean
+user_function (FlatpakTransaction *object,
+               gint                reason,
+               gchar              *from_id,
+               gchar              *suggested_remote_name,
+               gchar              *url,
+               gpointer            user_data)
+

The ::add-new-remote signal gets emitted if, as part of the transaction, +it is required or recommended that a new remote is added, for the reason +described in reason +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

reason

A FlatpakTransactionRemoteReason for this suggestion

 

from_id

The id of the app/runtime

 

suggested_remote_name

The suggested remote name

 

url

The repo url

 

user_data

user data set when the signal handler was connected.

 
+
+
+

Returns

+

TRUE to add the remote

+
+

Flags: Run Last

+
+
+
+

The “choose-remote-for-ref” signal

+
gint
+user_function (FlatpakTransaction *object,
+               gchar              *for_ref,
+               gchar              *runtime_ref,
+               GStrv               remotes,
+               gpointer            user_data)
+

The ::choose-remote-for-ref signal gets emitted when a +remote needs to be selected during the execution of the transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

for_ref

The ref we are installing

 

runtime_ref

The ref we are looking for

 

remotes

the remotes that has the ref, sorted in prio order

 

user_data

user data set when the signal handler was connected.

 
+
+
+

Returns

+

the index of the remote to use, or -1 to not pick one (and fail)

+
+

Flags: Run Last

+
+
+
+

The “end-of-lifed” signal

+
void
+user_function (FlatpakTransaction *object,
+               gchar              *ref,
+               gchar              *reason,
+               gchar              *rebase,
+               gpointer            user_data)
+

The ::end-of-lifed signal gets emitted when a ref is found to +be marked as end-of-life during the execution of the transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

ref

The ref we are installing

 

reason

The eol reason, or NULL

 

rebase

The new name, if rebased, or NULL

 

user_data

user data set when the signal handler was connected.

 
+
+

Flags: Run Last

+
+
+
+

The “new-operation” signal

+
void
+user_function (FlatpakTransaction          *object,
+               FlatpakTransactionOperation *operation,
+               FlatpakTransactionProgress  *progress,
+               gpointer                     user_data)
+

The ::new-operation signal gets emitted during the execution of +the transaction when a new operation is beginning.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

operation

The new FlatpakTransactionOperation

 

progress

A FlatpakTransactionProgress for operation +

 

user_data

user data set when the signal handler was connected.

 
+
+

Flags: Run Last

+
+
+
+

The “operation-done” signal

+
void
+user_function (FlatpakTransaction          *object,
+               FlatpakTransactionOperation *operation,
+               gchar                       *commit,
+               gint                         result,
+               gpointer                     user_data)
+

The ::operation-done signal gets emitted during the execution of +the transaction when an operation is finished.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

operation

The FlatpakTransactionOperation which finished

 

commit

The commit

 

result

A FlatpakTransactionResult giving details about the result

 

user_data

user data set when the signal handler was connected.

 
+
+

Flags: Run Last

+
+
+
+

The “operation-error” signal

+
gboolean
+user_function (FlatpakTransaction          *object,
+               FlatpakTransactionOperation *operation,
+               GError                      *error,
+               gint                         details,
+               gpointer                     user_data)
+

The ::operation-error signal gets emitted when an error occurs during the +execution of the transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

object

A FlatpakTransaction

 

operation

The FlatpakTransactionOperation which failed

 

error

A GError

 

details

A FlatpakTransactionErrorDetails with details about the error

 

user_data

user data set when the signal handler was connected.

 
+
+
+

Returns

+

the TRUE to contine transaction, FALSE to stop

+
+

Flags: Run Last

+
+
+
+

The “ready” signal

+
gboolean
+user_function (FlatpakTransaction *object,
+               gpointer            user_data)
+

The ::ready signal is emitted when all the refs involved in the operation +have been resolved to commits. At this point flatpak_transaction_get_operations() +will return all the operations that will be executed as part of the +transaction.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

object

A FlatpakTransaction

 

user_data

user data set when the signal handler was connected.

 
+
+
+

Returns

+

TRUE to carry on with the transaction, FALSE to abort

+
+

Flags: Run Last

+
+
+
+ + + \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakTransactionOperation.html flatpak-1.0.7/doc/reference/html/FlatpakTransactionOperation.html --- flatpak-0.11.3/doc/reference/html/FlatpakTransactionOperation.html 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakTransactionOperation.html 2019-02-11 12:42:41.000000000 +0000 @@ -0,0 +1,379 @@ + + + + +FlatpakTransactionOperation: Flatpak Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

FlatpakTransactionOperation

+

FlatpakTransactionOperation — Operation in a transaction

+
+
+

Functions

+ +
+
+

Types and Values

+
++++ + + + + +
 FlatpakTransactionOperation
+
+
+

Object Hierarchy

+
    GObject
+    ╰── FlatpakTransactionOperation
+
+
+
+

Description

+

FlatpakTransactionOperation is an object that represents a single operation +in a transaction. You receive a FlatpakTransactionOperation object with the +“new-operation” signal.

+
+
+

Functions

+
+

flatpak_transaction_operation_get_bundle_path ()

+
GFile *
+flatpak_transaction_operation_get_bundle_path
+                               (FlatpakTransactionOperation *self);
+

Gets the path to the bundle.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the bundle GFile or NULL.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_get_commit ()

+
const char *
+flatpak_transaction_operation_get_commit
+                               (FlatpakTransactionOperation *self);
+

Gets the commit ID for the operation.

+

This information is available when the transaction is resolved, +i.e. when “ready” is emitted.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the commit ID.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_get_operation_type ()

+
FlatpakTransactionOperationType
+flatpak_transaction_operation_get_operation_type
+                               (FlatpakTransactionOperation *self);
+

Gets the type of the operation.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the type of operation, as FlatpakTransactionOperationType

+
+
+
+
+

flatpak_transaction_operation_get_ref ()

+
const char *
+flatpak_transaction_operation_get_ref (FlatpakTransactionOperation *self);
+

Gets the ref that the operation applies to.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the ref.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_get_remote ()

+
const char *
+flatpak_transaction_operation_get_remote
+                               (FlatpakTransactionOperation *self);
+

Gets the remote that the operation applies to.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the remote.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_get_metadata ()

+
GKeyFile *
+flatpak_transaction_operation_get_metadata
+                               (FlatpakTransactionOperation *self);
+

Gets the metadata that will be applicable when the +operation is done.

+

This can be compared to the current metadata returned +by flatpak_transaction_operation_get_old_metadata() +to find new required permissions and similar changes.

+

This information is available when the transaction is resolved, +i.e. when “ready” is emitted.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the metadata GKeyFile.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_get_old_metadata ()

+
GKeyFile *
+flatpak_transaction_operation_get_old_metadata
+                               (FlatpakTransactionOperation *self);
+

Gets the metadata current metadata for the ref that self + works on. +Also see flatpak_transaction_operation_get_metadata().

+

This information is available when the transaction is resolved, +i.e. when “ready” is emitted.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionOperation

 
+
+
+

Returns

+

the old metadata GKeyFile.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_operation_type_to_string ()

+
const char *
+flatpak_transaction_operation_type_to_string
+                               (FlatpakTransactionOperationType kind);
+

Converts the operation type to a string.

+
+

Parameters

+
+++++ + + + + + +

kind

a FlatpakTransactionOperationType

 
+
+
+

Returns

+

a string representing kind +.

+

[transfer none]

+
+
+
+
+

Types and Values

+
+

FlatpakTransactionOperation

+
typedef struct _FlatpakTransactionOperation FlatpakTransactionOperation;
+
+
+
+ + + \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/FlatpakTransactionProgress.html flatpak-1.0.7/doc/reference/html/FlatpakTransactionProgress.html --- flatpak-0.11.3/doc/reference/html/FlatpakTransactionProgress.html 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/FlatpakTransactionProgress.html 2019-02-11 12:42:41.000000000 +0000 @@ -0,0 +1,278 @@ + + + + +FlatpakTransactionProgress: Flatpak Library Reference Manual + + + + + + + + + + + + + + + + +
+
+
+ + +
+

FlatpakTransactionProgress

+

FlatpakTransactionProgress — Progress of an operation

+
+
+

Functions

+ +
+
+

Signals

+
+++++ + + + + + +
voidchangedRun Last
+
+
+

Types and Values

+
++++ + + + + +
 FlatpakTransactionProgress
+
+
+

Object Hierarchy

+
    GObject
+    ╰── FlatpakTransactionProgress
+
+
+
+

Description

+

FlatpakTransactionProgress is an object that represents the progress +of a single operation in a transaction. You obtain a FlatpakTransactionProgress +with the “new-operation” signal.

+
+
+

Functions

+
+

flatpak_transaction_progress_get_is_estimating ()

+
gboolean
+flatpak_transaction_progress_get_is_estimating
+                               (FlatpakTransactionProgress *self);
+

Gets whether the progress is currently estimating

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionProgress

 
+
+
+

Returns

+

whether we're estimating

+
+
+
+
+

flatpak_transaction_progress_get_progress ()

+
int
+flatpak_transaction_progress_get_progress
+                               (FlatpakTransactionProgress *self);
+

Gets the current progress.

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionProgress

 
+
+
+

Returns

+

the current progress, as an integer between 0 and 100

+
+
+
+
+

flatpak_transaction_progress_get_status ()

+
char *
+flatpak_transaction_progress_get_status
+                               (FlatpakTransactionProgress *self);
+

Gets the current status string

+
+

Parameters

+
+++++ + + + + + +

self

a FlatpakTransactionProgress

 
+
+
+

Returns

+

the current status.

+

[transfer none]

+
+
+
+
+

flatpak_transaction_progress_set_update_frequency ()

+
void
+flatpak_transaction_progress_set_update_frequency
+                               (FlatpakTransactionProgress *self,
+                                guint update_frequency);
+

Sets how often progress should be updated.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

self

a FlatpakTransactionProgress

 

update_frequency

the update frequency, in milliseconds

 
+
+
+
+
+

Types and Values

+
+

FlatpakTransactionProgress

+
typedef struct _FlatpakTransactionProgress FlatpakTransactionProgress;
+
+
+
+

Signal Details

+
+

The “changed” signal

+
void
+user_function (FlatpakTransactionProgress *object,
+               gpointer                    user_data)
+

Emitted when some detail of the progress object changes, you can call the various methods to get the current status.

+
+

Parameters

+
+++++ + + + + + + + + + + + + +

object

A FlatpakTransactionProgress

 

user_data

user data set when the signal handler was connected.

 
+
+

Flags: Run Last

+
+
+
+ + + \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/flatpak-Version-information.html flatpak-1.0.7/doc/reference/html/flatpak-Version-information.html --- flatpak-0.11.3/doc/reference/html/flatpak-Version-information.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/flatpak-Version-information.html 2019-02-11 12:42:41.000000000 +0000 @@ -8,7 +8,7 @@ - + @@ -32,6 +32,21 @@
+

Functions

+
++++ + + + + +
#define +FLATPAK_CHECK_VERSION() +
+
+

Types and Values

@@ -51,10 +66,6 @@ - - - -
#define FLATPAK_MICRO_VERSION
#defineFLATPAK_EXTERN
@@ -63,36 +74,67 @@

Functions

-

+
+

FLATPAK_CHECK_VERSION()

+
#define             FLATPAK_CHECK_VERSION(major,minor,micro)
+

Check that the current version is at least major +.minor +.micro +.

+
+

Parameters

+
+++++ + + + + + + + + + + + + + + + + + +

major

major version to compare against

 

minor

minor version to compare against

 

micro

micro version to compare against

 
+
+

Types and Values

FLATPAK_MAJOR_VERSION

-
#define FLATPAK_MAJOR_VERSION (0)
+
#define FLATPAK_MAJOR_VERSION (1)
 
+

The major version.


FLATPAK_MINOR_VERSION

-
#define FLATPAK_MINOR_VERSION (11)
+
#define FLATPAK_MINOR_VERSION (0)
 
+

The minor version.


FLATPAK_MICRO_VERSION

-
#define FLATPAK_MICRO_VERSION (3)
-
-
-
-
-

FLATPAK_EXTERN

-
#define FLATPAK_EXTERN extern
+
#define FLATPAK_MICRO_VERSION (7)
 
+

The micro version.

+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/full-api-index.html flatpak-1.0.7/doc/reference/html/full-api-index.html --- flatpak-0.11.3/doc/reference/html/full-api-index.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/full-api-index.html 2019-02-11 12:42:41.000000000 +0000 @@ -8,13 +8,15 @@ - + @@ -40,56 +44,57 @@ API Index

B

-FlatpakBundleRef, struct in flatpak-bundle-ref +FlatpakBundleRef, struct in FlatpakBundleRef
-FlatpakBundleRef:file, object property in flatpak-bundle-ref +FlatpakBundleRef:file, object property in FlatpakBundleRef
-flatpak_bundle_ref_get_appstream, function in flatpak-bundle-ref +flatpak_bundle_ref_get_appstream, function in FlatpakBundleRef
-flatpak_bundle_ref_get_file, function in flatpak-bundle-ref +flatpak_bundle_ref_get_file, function in FlatpakBundleRef
-flatpak_bundle_ref_get_icon, function in flatpak-bundle-ref +flatpak_bundle_ref_get_icon, function in FlatpakBundleRef
-flatpak_bundle_ref_get_installed_size, function in flatpak-bundle-ref +flatpak_bundle_ref_get_installed_size, function in FlatpakBundleRef
-flatpak_bundle_ref_get_metadata, function in flatpak-bundle-ref +flatpak_bundle_ref_get_metadata, function in FlatpakBundleRef
-flatpak_bundle_ref_get_origin, function in flatpak-bundle-ref +flatpak_bundle_ref_get_origin, function in FlatpakBundleRef
-flatpak_bundle_ref_new, function in flatpak-bundle-ref +flatpak_bundle_ref_get_runtime_repo_url, function in FlatpakBundleRef
-

E

-FLATPAK_ERROR, macro in Error codes +flatpak_bundle_ref_new, function in FlatpakBundleRef
+

C

-FlatpakError, enum in Error codes +FLATPAK_CHECK_VERSION, macro in Version information
+

E

-flatpak_error_quark, function in Error codes +FLATPAK_ERROR, macro in Error codes
-FLATPAK_EXTERN, macro in Version information +FlatpakError, enum in Error codes

G

@@ -111,6 +116,10 @@
+flatpak_installation_cleanup_local_refs_sync, function in FlatpakInstallation +
+
+
flatpak_installation_create_monitor, function in FlatpakInstallation
@@ -131,6 +140,10 @@
+flatpak_installation_get_config, function in FlatpakInstallation +
+
+
flatpak_installation_get_current_installed_app, function in FlatpakInstallation
@@ -207,6 +220,10 @@
+flatpak_installation_list_remotes_by_type, function in FlatpakInstallation +
+
+
flatpak_installation_list_remote_refs_sync, function in FlatpakInstallation
@@ -239,18 +256,42 @@
+flatpak_installation_prune_local_repo, function in FlatpakInstallation +
+
+
+flatpak_installation_remove_local_ref_sync, function in FlatpakInstallation +
+
+
flatpak_installation_remove_remote, function in FlatpakInstallation
+flatpak_installation_run_triggers, function in FlatpakInstallation +
+
+
+flatpak_installation_set_config_sync, function in FlatpakInstallation +
+
+
flatpak_installation_uninstall, function in FlatpakInstallation
+flatpak_installation_uninstall_full, function in FlatpakInstallation +
+
+
flatpak_installation_update, function in FlatpakInstallation
+flatpak_installation_update_appstream_full_sync, function in FlatpakInstallation +
+
+
flatpak_installation_update_appstream_sync, function in FlatpakInstallation
@@ -271,6 +312,14 @@
+FlatpakInstalledRef:end-of-life, object property in FlatpakInstalledRef +
+
+
+FlatpakInstalledRef:end-of-life-rebase, object property in FlatpakInstalledRef +
+
+
FlatpakInstalledRef:installed-size, object property in FlatpakInstalledRef
@@ -295,6 +344,14 @@
+flatpak_installed_ref_get_eol, function in FlatpakInstalledRef +
+
+
+flatpak_installed_ref_get_eol_rebase, function in FlatpakInstalledRef +
+
+
flatpak_installed_ref_get_installed_size, function in FlatpakInstalledRef
@@ -337,6 +394,14 @@

P

+FlatpakPortalError, enum in Error codes +
+
+
+FLATPAK_PORTAL_ERROR, macro in Error codes +
+
+
FlatpakProgressCallback, user_function in FlatpakInstallation
@@ -386,6 +451,10 @@
+flatpak_ref_get_collection_id, function in FlatpakRef +
+
+
flatpak_ref_get_commit, function in FlatpakRef
@@ -402,6 +471,46 @@
+FlatpakRelatedRef, struct in FlatpakRelatedRef +
+
+
+FlatpakRelatedRef:should-autoprune, object property in FlatpakRelatedRef +
+
+
+FlatpakRelatedRef:should-delete, object property in FlatpakRelatedRef +
+
+
+FlatpakRelatedRef:should-download, object property in FlatpakRelatedRef +
+
+
+FlatpakRelatedRef:subpaths, object property in FlatpakRelatedRef +
+
+
+flatpak_related_ref_get_subpaths, function in FlatpakRelatedRef +
+
+
+flatpak_related_ref_new, function in FlatpakRelatedRef +
+
+
+flatpak_related_ref_should_autoprune, function in FlatpakRelatedRef +
+
+
+flatpak_related_ref_should_delete, function in FlatpakRelatedRef +
+
+
+flatpak_related_ref_should_download, function in FlatpakRelatedRef +
+
+
FlatpakRemote, struct in FlatpakRemote
@@ -418,10 +527,34 @@
+FlatpakRemoteRef:download-size, object property in FlatpakRemoteRef +
+
+
+FlatpakRemoteRef:end-of-life, object property in FlatpakRemoteRef +
+
+
+FlatpakRemoteRef:end-of-life-rebase, object property in FlatpakRemoteRef +
+
+
+FlatpakRemoteRef:installed-size, object property in FlatpakRemoteRef +
+
+
+FlatpakRemoteRef:metadata, object property in FlatpakRemoteRef +
+
+
FlatpakRemoteRef:remote-name, object property in FlatpakRemoteRef
+FlatpakRemoteType, enum in FlatpakRemote +
+
+
flatpak_remote_get_appstream_dir, function in FlatpakRemote
@@ -430,6 +563,14 @@
+flatpak_remote_get_collection_id, function in FlatpakRemote +
+
+
+flatpak_remote_get_default_branch, function in FlatpakRemote +
+
+
flatpak_remote_get_disabled, function in FlatpakRemote
@@ -442,6 +583,10 @@
+flatpak_remote_get_nodeps, function in FlatpakRemote +
+
+
flatpak_remote_get_noenumerate, function in FlatpakRemote
@@ -450,6 +595,10 @@
+flatpak_remote_get_remote_type, function in FlatpakRemote +
+
+
flatpak_remote_get_title, function in FlatpakRemote
@@ -462,10 +611,38 @@
+flatpak_remote_ref_get_download_size, function in FlatpakRemoteRef +
+
+
+flatpak_remote_ref_get_eol, function in FlatpakRemoteRef +
+
+
+flatpak_remote_ref_get_eol_rebase, function in FlatpakRemoteRef +
+
+
+flatpak_remote_ref_get_installed_size, function in FlatpakRemoteRef +
+
+
+flatpak_remote_ref_get_metadata, function in FlatpakRemoteRef +
+
+
flatpak_remote_ref_get_remote_name, function in FlatpakRemoteRef
+flatpak_remote_set_collection_id, function in FlatpakRemote +
+
+
+flatpak_remote_set_default_branch, function in FlatpakRemote +
+
+
flatpak_remote_set_disabled, function in FlatpakRemote
@@ -478,6 +655,10 @@
+flatpak_remote_set_nodeps, function in FlatpakRemote +
+
+
flatpak_remote_set_noenumerate, function in FlatpakRemote
@@ -498,13 +679,218 @@ FlatpakStorageType, enum in FlatpakInstallation
+

T

+
+FlatpakTransaction, struct in FlatpakTransaction +
+
+
+FlatpakTransaction::add-new-remote, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::choose-remote-for-ref, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::end-of-lifed, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::new-operation, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::operation-done, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::operation-error, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction::ready, object signal in FlatpakTransaction +
+
+
+FlatpakTransaction:installation, object property in FlatpakTransaction +
+
+
+FlatpakTransactionErrorDetails, enum in FlatpakTransaction +
+
+
+FlatpakTransactionOperation, struct in FlatpakTransactionOperation +
+
+
+FlatpakTransactionOperationType, enum in FlatpakTransaction +
+
+
+FlatpakTransactionProgress, struct in FlatpakTransactionProgress +
+
+
+FlatpakTransactionProgress::changed, object signal in FlatpakTransactionProgress +
+
+
+FlatpakTransactionRemoteReason, enum in FlatpakTransaction +
+
+
+FlatpakTransactionResult, enum in FlatpakTransaction +
+
+
+flatpak_transaction_add_default_dependency_sources, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_dependency_source, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_install, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_install_bundle, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_install_flatpakref, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_uninstall, function in FlatpakTransaction +
+
+
+flatpak_transaction_add_update, function in FlatpakTransaction +
+
+
+flatpak_transaction_get_current_operation, function in FlatpakTransaction +
+
+
+flatpak_transaction_get_installation, function in FlatpakTransaction +
+
+
+flatpak_transaction_get_operations, function in FlatpakTransaction +
+
+
+flatpak_transaction_is_empty, function in FlatpakTransaction +
+
+
+flatpak_transaction_new_for_installation, function in FlatpakTransaction +
+
+
+flatpak_transaction_operation_get_bundle_path, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_commit, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_metadata, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_old_metadata, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_operation_type, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_ref, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_get_remote, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_operation_type_to_string, function in FlatpakTransactionOperation +
+
+
+flatpak_transaction_progress_get_is_estimating, function in FlatpakTransactionProgress +
+
+
+flatpak_transaction_progress_get_progress, function in FlatpakTransactionProgress +
+
+
+flatpak_transaction_progress_get_status, function in FlatpakTransactionProgress +
+
+
+flatpak_transaction_progress_set_update_frequency, function in FlatpakTransactionProgress +
+
+
+flatpak_transaction_run, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_default_arch, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_disable_dependencies, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_disable_prune, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_disable_related, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_disable_static_deltas, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_force_uninstall, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_no_deploy, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_no_pull, function in FlatpakTransaction +
+
+
+flatpak_transaction_set_reinstall, function in FlatpakTransaction +
+

U

+FlatpakUninstallFlags, enum in FlatpakInstallation +
+
+
FlatpakUpdateFlags, enum in FlatpakInstallation
+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/index.html flatpak-1.0.7/doc/reference/html/index.html --- flatpak-0.11.3/doc/reference/html/index.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/index.html 2019-02-11 12:42:41.000000000 +0000 @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@

- For flatpak 0.11.3 + For flatpak 1.0.7

@@ -28,19 +28,31 @@ FlatpakInstallation — Installation information
+FlatpakRemote — Remote repository +
+
+FlatpakTransactionOperation — Operation in a transaction +
+
+FlatpakTransactionProgress — Progress of an operation +
+
+FlatpakTransaction — Transaction information +
+
FlatpakRef — Application reference
FlatpakInstalledRef — Installed application reference
-FlatpakRemoteRef — Remote application reference +FlatpakRelatedRef — Related application reference
-FlatpakRemote — Remote repository +FlatpakRemoteRef — Remote application reference
-flatpak-bundle-ref +FlatpakBundleRef — Application bundle reference
Error codes @@ -55,6 +67,6 @@ +
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/object-tree.html flatpak-1.0.7/doc/reference/html/object-tree.html --- flatpak-0.11.3/doc/reference/html/object-tree.html 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/object-tree.html 2019-02-11 12:42:41.000000000 +0000 @@ -8,7 +8,7 @@ - + @@ -25,14 +25,18 @@
     GObject
     ├── FlatpakRef
-       ├── FlatpakBundleRef
+       ├── FlatpakBundleRef
        ├── FlatpakInstalledRef
+       ├── FlatpakRelatedRef
        ╰── FlatpakRemoteRef
     ├── FlatpakInstallation
-    ╰── FlatpakRemote
+    ├── FlatpakRemote
+    ├── FlatpakTransaction
+    ├── FlatpakTransactionOperation
+    ╰── FlatpakTransactionProgress
 
+
Generated by GTK-Doc V1.29.1 \ No newline at end of file diff -Nru flatpak-0.11.3/doc/reference/html/style.css flatpak-1.0.7/doc/reference/html/style.css --- flatpak-0.11.3/doc/reference/html/style.css 2018-02-19 13:20:12.000000000 +0000 +++ flatpak-1.0.7/doc/reference/html/style.css 2019-02-11 12:42:41.000000000 +0000 @@ -30,6 +30,10 @@ vertical-align: top; } +span.nowrap { + white-space: nowrap; +} + div.gallery-float { float: left; diff -Nru flatpak-0.11.3/doc/reference/Makefile.am flatpak-1.0.7/doc/reference/Makefile.am --- flatpak-0.11.3/doc/reference/Makefile.am 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/doc/reference/Makefile.am 2019-02-11 12:42:20.000000000 +0000 @@ -1,6 +1,6 @@ DOC_MODULE = flatpak DOC_MAIN_SGML_FILE = flatpak-docs.xml -DOC_SOURCE_DIR = $(top_srcdir)/lib $(top_builddir)/lib +DOC_SOURCE_DIR = $(top_srcdir)/common $(top_builddir)/common SCAN_OPTIONS = --rebuild-types \ --ignore-decorators='FLATPAK_EXTERN' @@ -8,14 +8,32 @@ MKDB_OPTIONS = --output-format=xml --name-space=flatpak FIXXREF_OPTIONS = -HFILE_GLOB = $(top_srcdir)/lib/*.h $(top_builddir)/lib/*.h -CFILE_GLOB = $(top_srcdir)/lib/*.c +HFILE_GLOB = $(top_srcdir)/common/*.h $(top_builddir)/common/*.h +CFILE_GLOB = $(top_srcdir)/common/*.c IGNORE_HFILES = \ + valgrind-private.h \ + flatpak-bwrap-private.h \ + flatpak-chain-input-stream-private.h \ + flatpak-common-types-private.h \ + flatpak-context-private.h \ + flatpak-dbus-generated.h \ + flatpak-dir-private.h \ + flatpak-document-dbus-generated.h \ flatpak-enum-types.h \ + flatpak-exports-private.h \ flatpak-installed-ref-private.h \ + flatpak-json-oci-private.h \ + flatpak-json-private.h \ + flatpak-oci-registry-private.h \ + flatpak-remote-private.h \ flatpak-remote-ref-private.h \ - flatpak-remote-private.h + flatpak-run-private.h \ + flatpak-systemd-dbus-generated.h \ + flatpak-installation-private.h \ + flatpak-transaction-private.h \ + flatpak-utils-private.h \ + $(NULL) EXTRA_HFILES = @@ -24,7 +42,7 @@ content_files = expand_content_files = -AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib $(BASE_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/common -I$(top_builddir)/common $(BASE_CFLAGS) GTKDOC_LIBS = $(top_builddir)/libflatpak.la $(BASE_LIBS) include $(top_srcdir)/gtk-doc.make diff -Nru flatpak-0.11.3/doc/reference/Makefile.in flatpak-1.0.7/doc/reference/Makefile.in --- flatpak-0.11.3/doc/reference/Makefile.in 2018-02-19 13:20:06.000000000 +0000 +++ flatpak-1.0.7/doc/reference/Makefile.in 2019-02-11 12:42:27.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -15,6 +15,24 @@ @SET_MAKE@ # -*- mode: makefile -*- +# +# gtk-doc.make - make rules for gtk-doc +# Copyright (C) 2003 James Henstridge +# 2004-2007 Damon Chaplin +# 2007-2017 Stefan Sauer +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . #################################### # Everything below here is generic # @@ -351,6 +369,7 @@ BASE_CFLAGS = @BASE_CFLAGS@ BASE_LIBS = @BASE_LIBS@ BWRAP = @BWRAP@ +CAP_LIB = @CAP_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -358,6 +377,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CONFIG_DIR = @DBUS_CONFIG_DIR@ +DBUS_PROXY = @DBUS_PROXY@ DBUS_SERVICE_DIR = @DBUS_SERVICE_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -487,6 +507,8 @@ XMLTO_FLAGS = @XMLTO_FLAGS@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -545,26 +567,44 @@ top_srcdir = @top_srcdir@ DOC_MODULE = flatpak DOC_MAIN_SGML_FILE = flatpak-docs.xml -DOC_SOURCE_DIR = $(top_srcdir)/lib $(top_builddir)/lib +DOC_SOURCE_DIR = $(top_srcdir)/common $(top_builddir)/common SCAN_OPTIONS = --rebuild-types \ --ignore-decorators='FLATPAK_EXTERN' SCANGOBJ_OPTIONS = MKDB_OPTIONS = --output-format=xml --name-space=flatpak FIXXREF_OPTIONS = -HFILE_GLOB = $(top_srcdir)/lib/*.h $(top_builddir)/lib/*.h -CFILE_GLOB = $(top_srcdir)/lib/*.c +HFILE_GLOB = $(top_srcdir)/common/*.h $(top_builddir)/common/*.h +CFILE_GLOB = $(top_srcdir)/common/*.c IGNORE_HFILES = \ + valgrind-private.h \ + flatpak-bwrap-private.h \ + flatpak-chain-input-stream-private.h \ + flatpak-common-types-private.h \ + flatpak-context-private.h \ + flatpak-dbus-generated.h \ + flatpak-dir-private.h \ + flatpak-document-dbus-generated.h \ flatpak-enum-types.h \ + flatpak-exports-private.h \ flatpak-installed-ref-private.h \ + flatpak-json-oci-private.h \ + flatpak-json-private.h \ + flatpak-oci-registry-private.h \ + flatpak-remote-private.h \ flatpak-remote-ref-private.h \ - flatpak-remote-private.h + flatpak-run-private.h \ + flatpak-systemd-dbus-generated.h \ + flatpak-installation-private.h \ + flatpak-transaction-private.h \ + flatpak-utils-private.h \ + $(NULL) EXTRA_HFILES = HTML_IMAGES = content_files = expand_content_files = -AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_builddir)/lib $(BASE_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/common -I$(top_builddir)/common $(BASE_CFLAGS) GTKDOC_LIBS = $(top_builddir)/libflatpak.la $(BASE_LIBS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -666,8 +706,8 @@ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_srcdir)/gtk-doc.make $(am__empty): @@ -814,7 +854,7 @@ fi; \ $$success || exit 1 -check-TESTS: +check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @@ -850,7 +890,10 @@ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ @@ -1106,6 +1149,7 @@ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ + test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/flatpak.png and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/flatpak.png differ diff -Nru flatpak-0.11.3/gtk-doc.make flatpak-1.0.7/gtk-doc.make --- flatpak-0.11.3/gtk-doc.make 2017-08-30 06:33:23.000000000 +0000 +++ flatpak-1.0.7/gtk-doc.make 2019-02-10 16:40:28.000000000 +0000 @@ -1,4 +1,22 @@ # -*- mode: makefile -*- +# +# gtk-doc.make - make rules for gtk-doc +# Copyright (C) 2003 James Henstridge +# 2004-2007 Damon Chaplin +# 2007-2017 Stefan Sauer +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . #################################### # Everything below here is generic # @@ -194,6 +212,7 @@ for file in $(HTML_IMAGES) ; do \ test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \ + test -f $$file && cp $$file $(abs_builddir)/html; \ done; $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) $(AM_V_at)touch html-build.stamp diff -Nru flatpak-0.11.3/install-sh flatpak-1.0.7/install-sh --- flatpak-0.11.3/install-sh 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/install-sh 2019-02-10 17:12:18.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2013-12-25.23; # UTC +scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -271,15 +271,18 @@ fi dst=$dst_arg - # If destination is a directory, append the input filename; won't work - # if double slashes aren't ignored. + # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst - dst=$dstdir/`basename "$src"` + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac dstdir_status=0 else dstdir=`dirname "$dst"` @@ -288,6 +291,11 @@ fi fi + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + obsolete_mkdir_used=false if test $dstdir_status != 0; then @@ -324,34 +332,43 @@ # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) + # Note that $RANDOM variable is not portable (e.g. dash); Use it + # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p' feature. if (umask $mkdir_umask && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - ls_ld_tmpdir=`ls -ld "$tmpdir"` + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && - $mkdirprog -m$different_mode -p -- "$tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi - rmdir "$tmpdir/d" "$tmpdir" + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; @@ -427,8 +444,8 @@ else # Make a couple of temp file names in the proper directory. - dsttmp=$dstdir/_inst.$$_ - rmtmp=$dstdir/_rm.$$_ + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 @@ -493,9 +510,9 @@ done # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru flatpak-0.11.3/lib/flatpak-bundle-ref.c flatpak-1.0.7/lib/flatpak-bundle-ref.c --- flatpak-0.11.3/lib/flatpak-bundle-ref.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-bundle-ref.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,339 +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 "flatpak-utils.h" -#include "flatpak-bundle-ref.h" -#include "flatpak-enum-types.h" - -typedef struct _FlatpakBundleRefPrivate FlatpakBundleRefPrivate; - -struct _FlatpakBundleRefPrivate -{ - GFile *file; - char *origin; - char *runtime_repo; - GBytes *metadata; - GBytes *appstream; - GBytes *icon_64; - GBytes *icon_128; - guint64 installed_size; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakBundleRef, flatpak_bundle_ref, FLATPAK_TYPE_REF) - -enum { - PROP_0, - - PROP_FILE, -}; - -static void -flatpak_bundle_ref_finalize (GObject *object) -{ - FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - g_clear_object (&priv->file); - - g_bytes_unref (priv->metadata); - g_bytes_unref (priv->appstream); - g_bytes_unref (priv->icon_64); - g_bytes_unref (priv->icon_128); - g_free (priv->origin); - g_free (priv->runtime_repo); - - G_OBJECT_CLASS (flatpak_bundle_ref_parent_class)->finalize (object); -} - -static void -flatpak_bundle_ref_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_FILE: - g_set_object (&priv->file, g_value_get_object (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_bundle_ref_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakBundleRef *self = FLATPAK_BUNDLE_REF (object); - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_FILE: - g_value_set_object (value, priv->file); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_bundle_ref_class_init (FlatpakBundleRefClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_bundle_ref_get_property; - object_class->set_property = flatpak_bundle_ref_set_property; - object_class->finalize = flatpak_bundle_ref_finalize; - - g_object_class_install_property (object_class, - PROP_FILE, - g_param_spec_object ("file", - "", - "", - G_TYPE_FILE, - G_PARAM_READWRITE)); -} - -static void -flatpak_bundle_ref_init (FlatpakBundleRef *self) -{ -} - -/** - * flatpak_bundle_ref_get_file: - * @self: a #FlatpakBundleRef - * - * Get the file this bundle is stored in. - * - * Returns: (transfer full) : an #GFile - */ -GFile * -flatpak_bundle_ref_get_file (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - return g_object_ref (priv->file); -} - -/** - * flatpak_bundle_ref_get_metadata: - * @self: a #FlatpakBundleRef - * - * Get the metadata for the app/runtime - * - * Returns: (transfer full) : an #GBytes with the metadata contents, or %NULL - */ -GBytes * -flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - if (priv->metadata) - return g_bytes_ref (priv->metadata); - return NULL; -} - -/** - * flatpak_bundle_ref_get_appstream: - * @self: a #FlatpakBundleRef - * - * Get the compressed appstream for the app/runtime - * - * Returns: (transfer full) : an #GBytes with the appstream contents, or %NULL - */ -GBytes * -flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - if (priv->appstream) - return g_bytes_ref (priv->appstream); - return NULL; -} - -/** - * flatpak_bundle_ref_get_icon: - * @self: a #FlatpakBundleRef - * @size: 64 or 128 - * - * Get the icon png data for the app/runtime - * - * Returns: (transfer full) : an #GBytes with png contents - */ -GBytes * -flatpak_bundle_ref_get_icon (FlatpakBundleRef *self, - int size) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - if (size == 64 && priv->icon_64) - return g_bytes_ref (priv->icon_64); - - if (size == 128 && priv->icon_128) - return g_bytes_ref (priv->icon_128); - - return NULL; -} - -/** - * flatpak_bundle_ref_get_origin: - * @self: a #FlatpakBundleRef - * - * Get the origin url stored in the bundle - * - * Returns: (transfer full) : an url string, or %NULL - */ -char * -flatpak_bundle_ref_get_origin (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - return g_strdup (priv->origin); -} - - -/** - * flatpak_bundle_ref_get_runtime_repo: - * @self: a #FlatpakBundleRef - * - * Get the runtime flatpakrepo url stored in the bundle (if any) - * - * Returns: (transfer full) : an url string, or %NULL - * - * Since: 0.8.0 - */ -char * -flatpak_bundle_ref_get_runtime_repo_url (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - return g_strdup (priv->runtime_repo); -} - -/** - * flatpak_bundle_ref_get_installed_size: - * @self: a FlatpakBundleRef - * - * Returns the installed size for the bundle. - * - * Returns: the installed size - */ -guint64 -flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self) -{ - FlatpakBundleRefPrivate *priv = flatpak_bundle_ref_get_instance_private (self); - - return priv->installed_size; -} - -/** - * flatpak_bundle_ref_new: - * @file: a #GFile - * @error: (allow-none): return location for an error - * - * Creates a new bundle ref for the given file. - * - * Returns: a new bundle ref. - */ -FlatpakBundleRef * -flatpak_bundle_ref_new (GFile *file, - GError **error) -{ - FlatpakRefKind kind = FLATPAK_REF_KIND_APP; - FlatpakBundleRefPrivate *priv; - - g_auto(GStrv) parts = NULL; - FlatpakBundleRef *ref; - g_autoptr(GVariant) metadata = NULL; - g_autofree char *commit = NULL; - g_autofree char *full_ref = NULL; - g_autofree char *origin = NULL; - g_autofree char *runtime_repo = NULL; - g_autofree char *metadata_contents = NULL; - g_autoptr(GVariant) appstream = NULL; - g_autoptr(GVariant) icon_64 = NULL; - g_autoptr(GVariant) icon_128 = NULL; - guint64 installed_size; - g_autofree char *collection_id = NULL; - - metadata = flatpak_bundle_load (file, &commit, &full_ref, &origin, &runtime_repo, &metadata_contents, &installed_size, - NULL, &collection_id, error); - if (metadata == NULL) - return NULL; - - parts = flatpak_decompose_ref (full_ref, error); - if (parts == NULL) - return NULL; - - if (strcmp (parts[0], "app") != 0) - kind = FLATPAK_REF_KIND_RUNTIME; - - ref = g_object_new (FLATPAK_TYPE_BUNDLE_REF, - "kind", kind, - "name", parts[1], - "arch", parts[2], - "branch", parts[3], - "commit", commit, - "file", file, -#ifdef FLATPAK_ENABLE_P2P - "collection-id", collection_id, -#endif /* FLATPAK_ENABLE_P2P */ - NULL); - priv = flatpak_bundle_ref_get_instance_private (ref); - - if (metadata_contents) - priv->metadata = g_bytes_new_take (metadata_contents, - strlen (metadata_contents)); - metadata_contents = NULL; /* Stolen */ - - appstream = g_variant_lookup_value (metadata, "appdata", G_VARIANT_TYPE_BYTESTRING); - if (appstream) - priv->appstream = g_variant_get_data_as_bytes (appstream); - - icon_64 = g_variant_lookup_value (metadata, "icon-64", G_VARIANT_TYPE_BYTESTRING); - if (icon_64) - priv->icon_64 = g_variant_get_data_as_bytes (icon_64); - - icon_128 = g_variant_lookup_value (metadata, "icon-128", G_VARIANT_TYPE_BYTESTRING); - if (icon_128) - priv->icon_128 = g_variant_get_data_as_bytes (icon_128); - - priv->installed_size = installed_size; - - priv->origin = g_steal_pointer (&origin); - priv->runtime_repo = g_steal_pointer (&runtime_repo); - - return ref; -} diff -Nru flatpak-0.11.3/lib/flatpak-bundle-ref.h flatpak-1.0.7/lib/flatpak-bundle-ref.h --- flatpak-0.11.3/lib/flatpak-bundle-ref.h 2017-05-11 15:32:10.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-bundle-ref.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_BUNDLE_REF_H__ -#define __FLATPAK_BUNDLE_REF_H__ - -typedef struct _FlatpakBundleRef FlatpakBundleRef; - -#include -#include - -#define FLATPAK_TYPE_BUNDLE_REF flatpak_bundle_ref_get_type () -#define FLATPAK_BUNDLE_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_BUNDLE_REF, FlatpakBundleRef)) -#define FLATPAK_IS_BUNDLE_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_BUNDLE_REF)) - -FLATPAK_EXTERN GType flatpak_bundle_ref_get_type (void); - -struct _FlatpakBundleRef -{ - FlatpakRef parent; -}; - -typedef struct -{ - FlatpakRefClass parent_class; -} FlatpakBundleRefClass; - -FLATPAK_EXTERN FlatpakBundleRef *flatpak_bundle_ref_new (GFile *file, - GError **error); -FLATPAK_EXTERN GFile *flatpak_bundle_ref_get_file (FlatpakBundleRef *self); -FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_metadata (FlatpakBundleRef *self); -FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_appstream (FlatpakBundleRef *self); -FLATPAK_EXTERN GBytes *flatpak_bundle_ref_get_icon (FlatpakBundleRef *self, - int size); -FLATPAK_EXTERN char *flatpak_bundle_ref_get_origin (FlatpakBundleRef *self); -FLATPAK_EXTERN guint64 flatpak_bundle_ref_get_installed_size (FlatpakBundleRef *self); -FLATPAK_EXTERN char *flatpak_bundle_ref_get_runtime_repo_url (FlatpakBundleRef *self); - - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakBundleRef, g_object_unref) -#endif - -#endif /* __FLATPAK_BUNDLE_REF_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak.c flatpak-1.0.7/lib/flatpak.c --- flatpak-0.11.3/lib/flatpak.c 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,3 +0,0 @@ -#include "config.h" - -#include "flatpak-version-macros.h" diff -Nru flatpak-0.11.3/lib/flatpak-enum-types.c.template flatpak-1.0.7/lib/flatpak-enum-types.c.template --- flatpak-0.11.3/lib/flatpak-enum-types.c.template 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-enum-types.c.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -/*** BEGIN file-header ***/ -#include "config.h" -#include -#include -#include -#include - -/*** END file-header ***/ - -/*** BEGIN file-production ***/ -/* enumerations from "@filename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -GType -@enum_name@_get_type (void) -{ - static volatile gsize g_define_type_id__volatile = 0; - - if (g_once_init_enter (&g_define_type_id__volatile)) - { - static const G@Type@Value values[] = { -/*** END value-header ***/ - -/*** BEGIN value-production ***/ - { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, -/*** END value-production ***/ - -/*** BEGIN value-tail ***/ - { 0, NULL, NULL } - }; - GType g_define_type_id = - g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); - g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); - } - - return g_define_type_id__volatile; -} - -/*** END value-tail ***/ diff -Nru flatpak-0.11.3/lib/flatpak-enum-types.h.template flatpak-1.0.7/lib/flatpak-enum-types.h.template --- flatpak-0.11.3/lib/flatpak-enum-types.h.template 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-enum-types.h.template 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -/*** BEGIN file-header ***/ -#ifndef __FLATPAK_ENUM_TYPES_H__ -#define __FLATPAK_ENUM_TYPES_H__ - -#include - -G_BEGIN_DECLS -/*** END file-header ***/ - -/*** BEGIN file-production ***/ - -/* enumerations from "@filename@" */ -/*** END file-production ***/ - -/*** BEGIN value-header ***/ -FLATPAK_EXTERN GType @enum_name@_get_type (void) G_GNUC_CONST; -#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ()) -/*** END value-header ***/ - -/*** BEGIN file-tail ***/ -G_END_DECLS - -#endif /* __GIO_ENUM_TYPES_H__ */ -/*** END file-tail ***/ diff -Nru flatpak-0.11.3/lib/flatpak-error.c flatpak-1.0.7/lib/flatpak-error.c --- flatpak-0.11.3/lib/flatpak-error.c 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-error.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -/* flatpak-error.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 "flatpak-error.h" - -#include - -/** - * SECTION:flatpak-error - * @Title: Error codes - * - */ - -/* This is actually defined in common/flatpak-utils.c so the common code can report errors */ diff -Nru flatpak-0.11.3/lib/flatpak-error.h flatpak-1.0.7/lib/flatpak-error.h --- flatpak-0.11.3/lib/flatpak-error.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-error.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* flatpak-error.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 - */ - -#ifndef FLATPAK_ERROR_H -#define FLATPAK_ERROR_H - -#include - -G_BEGIN_DECLS - -/** - * FlatpakError: - * @FLATPAK_ERROR_ALREADY_INSTALLED: App/runtime is already installed - * @FLATPAK_ERROR_NOT_INSTALLED: App/runtime is not installed - * @FLATPAK_ERROR_ONLY_PULLED: App/runtime was only pulled into the local - * repository but not installed. - * - * Error codes for library functions. - */ -typedef enum { - FLATPAK_ERROR_ALREADY_INSTALLED, - FLATPAK_ERROR_NOT_INSTALLED, - FLATPAK_ERROR_ONLY_PULLED -} FlatpakError; - -#define FLATPAK_ERROR flatpak_error_quark () - -FLATPAK_EXTERN GQuark flatpak_error_quark (void); - -G_END_DECLS - -#endif /* FLATPAK_ERROR_H */ diff -Nru flatpak-0.11.3/lib/flatpak.h flatpak-1.0.7/lib/flatpak.h --- flatpak-0.11.3/lib/flatpak.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +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_H__ -#define __FLATPAK_H__ - -#define __FLATPAK_H_INSIDE__ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#undef __FLATPAK_H_INSIDE__ - -#endif /* __FLATPAK_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-installation.c flatpak-1.0.7/lib/flatpak-installation.c --- flatpak-0.11.3/lib/flatpak-installation.c 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-installation.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,2318 +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 - -#ifdef FLATPAK_ENABLE_P2P -#include -#include -#endif /* FLATPAK_ENABLE_P2P */ - -#include "flatpak-utils.h" -#include "flatpak-installation.h" -#include "flatpak-installed-ref-private.h" -#include "flatpak-related-ref-private.h" -#include "flatpak-remote-private.h" -#include "flatpak-remote-ref-private.h" -#include "flatpak-enum-types.h" -#include "flatpak-dir.h" -#include "flatpak-run.h" -#include "flatpak-error.h" - -/** - * SECTION:flatpak-installation - * @Title: FlatpakInstallation - * @Short_description: Installation information - * - * FlatpakInstallation is the toplevel object that software installers - * should use to operate on an flatpak applications. - * - * An FlatpakInstallation object provides information about an installation - * location for flatpak applications. Typical installation locations are either - * system-wide (in $prefix/var/lib/flatpak) or per-user (in ~/.local/share/flatpak). - * - * FlatpakInstallation can list configured remotes as well as installed application - * and runtime references (in short: refs). It can also run, install, update and - * uninstall applications and runtimes. - */ - -typedef struct _FlatpakInstallationPrivate FlatpakInstallationPrivate; - -G_LOCK_DEFINE_STATIC (dir); - -struct _FlatpakInstallationPrivate -{ - /* All raw access to this should be protected by the dir lock. The FlatpakDir object is mostly - threadsafe (apart from pull transactions being a singleton on it), however we replace it during - flatpak_installation_drop_caches(), so every user needs to keep its own reference alive until - done. */ - FlatpakDir *dir_unlocked; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakInstallation, flatpak_installation, G_TYPE_OBJECT) - -enum { - PROP_0, -}; - -static void -no_progress_cb (OstreeAsyncProgress *progress, gpointer user_data) -{ -} - -static void -flatpak_installation_finalize (GObject *object) -{ - FlatpakInstallation *self = FLATPAK_INSTALLATION (object); - FlatpakInstallationPrivate *priv = flatpak_installation_get_instance_private (self); - - g_object_unref (priv->dir_unlocked); - - G_OBJECT_CLASS (flatpak_installation_parent_class)->finalize (object); -} - -static void -flatpak_installation_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - - switch (prop_id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_installation_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - - switch (prop_id) - { - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_installation_class_init (FlatpakInstallationClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_installation_get_property; - object_class->set_property = flatpak_installation_set_property; - object_class->finalize = flatpak_installation_finalize; - -} - -static void -flatpak_installation_init (FlatpakInstallation *self) -{ -} - -static FlatpakInstallation * -flatpak_installation_new_for_dir (FlatpakDir *dir, - GCancellable *cancellable, - GError **error) -{ - FlatpakInstallation *self; - FlatpakInstallationPrivate *priv; - - if (!flatpak_dir_maybe_ensure_repo (dir, NULL, error)) - { - g_object_unref (dir); - return NULL; - } - - self = g_object_new (FLATPAK_TYPE_INSTALLATION, NULL); - priv = flatpak_installation_get_instance_private (self); - - priv->dir_unlocked = dir; - - return self; -} -/** - * flatpak_get_default_arch: - * - * Returns the canonical name for the arch of the current machine. - * - * Returns: an arch string - */ -const char * -flatpak_get_default_arch (void) -{ - return flatpak_get_arch (); -} - -/** - * flatpak_get_supported_arches: - * - * Returns the canonical names for the arches that are supported (i.e. can run) - * on the current machine, in order of priority (default is first). - * - * Returns: a zero terminated array of arch strings - */ -const char * const * -flatpak_get_supported_arches (void) -{ - return (const char * const *)flatpak_get_arches (); -} - -/** - * flatpak_get_system_installations: - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists the system installations according to the current configuration and current - * availability (e.g. doesn't return a configured installation if not reachable). - * - * Returns: (transfer container) (element-type FlatpakInstallation): an GPtrArray of - * #FlatpakInstallation instances - * - * Since: 0.8 - */ -GPtrArray * -flatpak_get_system_installations (GCancellable *cancellable, - GError **error) -{ - g_autoptr(GPtrArray) system_dirs = NULL; - g_autoptr(GPtrArray) installs = NULL; - GPtrArray *ret = NULL; - int i; - - system_dirs = flatpak_dir_get_system_list (cancellable, error); - if (system_dirs == NULL) - goto out; - - installs = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); - for (i = 0; i < system_dirs->len; i++) - { - g_autoptr(GError) local_error = NULL; - FlatpakDir *install_dir = g_ptr_array_index (system_dirs, i); - 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, g_steal_pointer (&installation)); - else - { - /* 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); - } - } - - if (installs->len == 0) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "No system installations found"); - } - - ret = g_steal_pointer (&installs); - - out: - return ret; -} - -/** - * flatpak_installation_new_system: - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Creates a new #FlatpakInstallation for the system-wide installation. - * - * Returns: (transfer full): a new #FlatpakInstallation - */ -FlatpakInstallation * -flatpak_installation_new_system (GCancellable *cancellable, - GError **error) -{ - return flatpak_installation_new_for_dir (flatpak_dir_get_system_default (), cancellable, error); -} - -/** - * flatpak_installation_new_system_with_id: - * @id: (nullable): the ID of the system-wide installation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Creates a new #FlatpakInstallation for the system-wide installation @id. - * - * Returns: (transfer full): a new #FlatpakInstallation - * - * Since: 0.8 - */ -FlatpakInstallation * -flatpak_installation_new_system_with_id (const char *id, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) install_dir = NULL; - g_autoptr(FlatpakInstallation) installation = NULL; - g_autoptr(GError) local_error = NULL; - - install_dir = flatpak_dir_get_system_by_id (id, cancellable, error); - if (install_dir == NULL) - return NULL; - - installation = flatpak_installation_new_for_dir (g_object_ref (install_dir), - cancellable, - &local_error); - if (installation == NULL) - { - g_debug ("Error creating Flatpak installation: %s", local_error->message); - g_propagate_error (error, g_steal_pointer (&local_error)); - } - - g_debug ("Found Flatpak installation for '%s'", id); - return g_steal_pointer (&installation); -} - -/** - * flatpak_installation_new_user: - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Creates a new #FlatpakInstallation for the per-user installation. - * - * Returns: (transfer full): a new #FlatpakInstallation - */ -FlatpakInstallation * -flatpak_installation_new_user (GCancellable *cancellable, - GError **error) -{ - flatpak_migrate_from_xdg_app (); - - return flatpak_installation_new_for_dir (flatpak_dir_get_user (), cancellable, error); -} - -/** - * flatpak_installation_new_for_path: - * @path: a #GFile - * @user: whether this is a user-specific location - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Creates a new #FlatpakInstallation for the installation at the given @path. - * - * Returns: (transfer full): a new #FlatpakInstallation - */ -FlatpakInstallation * -flatpak_installation_new_for_path (GFile *path, gboolean user, - GCancellable *cancellable, - GError **error) -{ - flatpak_migrate_from_xdg_app (); - - return flatpak_installation_new_for_dir (flatpak_dir_new (path, user), cancellable, error); -} - -static FlatpakDir * -_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 - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Drops all internal (in-memory) caches. For instance, this may be needed to pick up new or changed - * remotes configured outside this installation instance. - * - * Returns: %TRUE on success, %FALSE on error - */ -gboolean -flatpak_installation_drop_caches (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - FlatpakInstallationPrivate *priv = flatpak_installation_get_instance_private (self); - FlatpakDir *clone, *old; - gboolean res = FALSE; - - G_LOCK (dir); - - old = priv->dir_unlocked; - clone = flatpak_dir_clone (priv->dir_unlocked); - - if (flatpak_dir_maybe_ensure_repo (clone, cancellable, error)) - { - priv->dir_unlocked = clone; - g_object_unref (old); - res = TRUE; - } - - G_UNLOCK (dir); - - return res; -} - -/** - * flatpak_installation_get_is_user: - * @self: a #FlatpakInstallation - * - * Returns whether the installation is for a user-specific location. - * - * Returns: %TRUE if @self is a per-user installation - */ -gboolean -flatpak_installation_get_is_user (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - return flatpak_dir_is_user (dir); -} - -/** - * flatpak_installation_get_path: - * @self: a #FlatpakInstallation - * - * Returns the installation location for @self. - * - * Returns: (transfer full): an #GFile - */ -GFile * -flatpak_installation_get_path (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - return g_object_ref (flatpak_dir_get_path (dir)); -} - -/** - * flatpak_installation_get_id: - * @self: a #FlatpakInstallation - * - * Returns the ID of the system installation for @self. - * - * Returns: (transfer none): a string with the installation's ID - * - * Since: 0.8 - */ -const char * -flatpak_installation_get_id (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - return flatpak_dir_get_id (dir); -} - -/** - * flatpak_installation_get_display_name: - * @self: a #FlatpakInstallation - * - * Returns the display name of the system installation for @self. - * - * Returns: (transfer none): a string with the installation's display name - * - * Since: 0.8 - */ -const char * -flatpak_installation_get_display_name (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - return flatpak_dir_get_display_name (dir); -} - -/** - * flatpak_installation_get_priority: - * @self: a #FlatpakInstallation - * - * Returns the numeric priority of the system installation for @self. - * - * Returns: an integer with the configured priority value - * - * Since: 0.8 - */ -gint -flatpak_installation_get_priority (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - return flatpak_dir_get_priority (dir); -} - -/** - * flatpak_installation_get_storage_type: - * @self: a #FlatpakInstallation - * - * Returns the type of storage of the system installation for @self. - * - * Returns: a #FlatpakStorageType - * - * Since: 0.8 - */FlatpakStorageType -flatpak_installation_get_storage_type (FlatpakInstallation *self) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - - switch (flatpak_dir_get_storage_type (dir)) - { - case FLATPAK_DIR_STORAGE_TYPE_HARD_DISK: - return FLATPAK_STORAGE_TYPE_HARD_DISK; - - case FLATPAK_DIR_STORAGE_TYPE_SDCARD: - return FLATPAK_STORAGE_TYPE_SDCARD; - - 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; - } - - return FLATPAK_STORAGE_TYPE_DEFAULT; -} - -/** - * flatpak_installation_launch: - * @self: a #FlatpakInstallation - * @name: name of the app to launch - * @arch: (nullable): which architecture to launch (default: current architecture) - * @branch: (nullable): which branch of the application (default: "master") - * @commit: (nullable): the commit of @branch to launch - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Launch an installed application. - * - * You can use flatpak_installation_get_installed_ref() or - * flatpak_installation_get_current_installed_app() to find out what builds - * are available, in order to get a value for @commit. - * - * Returns: %TRUE, unless an error occurred - */ -gboolean -flatpak_installation_launch (FlatpakInstallation *self, - const char *name, - const char *arch, - const char *branch, - const char *commit, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = NULL; - g_autoptr(FlatpakDeploy) app_deploy = NULL; - g_autofree char *app_ref = NULL; - - dir = flatpak_installation_get_dir (self, error); - if (dir == NULL) - return FALSE; - - app_ref = - flatpak_build_app_ref (name, branch, arch); - - app_deploy = - flatpak_dir_load_deployed (dir, app_ref, - commit, - cancellable, error); - if (app_deploy == NULL) - return FALSE; - - return flatpak_run_app (app_ref, - app_deploy, - NULL, NULL, - NULL, - FLATPAK_RUN_FLAG_BACKGROUND, - NULL, - NULL, 0, - cancellable, error); -} - - -static FlatpakInstalledRef * -get_ref (FlatpakDir *dir, - const char *full_ref, - GCancellable *cancellable, - GError **error) -{ - g_auto(GStrv) parts = NULL; - const char *origin = NULL; - const char *commit = NULL; - const char *alt_id = NULL; - g_autofree char *latest_alt_id = NULL; - g_autoptr(GFile) deploy_dir = NULL; - g_autoptr(GFile) deploy_subdir = NULL; - g_autofree char *deploy_path = NULL; - g_autofree char *latest_commit = NULL; - g_autofree char *deploy_subdirname = NULL; - g_autoptr(GVariant) deploy_data = NULL; - g_autofree const char **subpaths = NULL; - gboolean is_current = FALSE; - guint64 installed_size = 0; - - parts = g_strsplit (full_ref, "/", -1); - - deploy_data = flatpak_dir_get_deploy_data (dir, full_ref, cancellable, error); - if (deploy_data == NULL) - return NULL; - origin = flatpak_deploy_data_get_origin (deploy_data); - commit = flatpak_deploy_data_get_commit (deploy_data); - alt_id = flatpak_deploy_data_get_alt_id (deploy_data); - subpaths = flatpak_deploy_data_get_subpaths (deploy_data); - installed_size = flatpak_deploy_data_get_installed_size (deploy_data); - - deploy_dir = flatpak_dir_get_deploy_dir (dir, full_ref); - deploy_subdirname = flatpak_dir_get_deploy_subdir (dir, commit, subpaths); - deploy_subdir = g_file_get_child (deploy_dir, deploy_subdirname); - deploy_path = g_file_get_path (deploy_subdir); - - if (strcmp (parts[0], "app") == 0) - { - g_autofree char *current = - flatpak_dir_current_ref (dir, parts[1], cancellable); - if (current && strcmp (full_ref, current) == 0) - is_current = TRUE; - } - - latest_commit = flatpak_dir_read_latest (dir, origin, full_ref, &latest_alt_id, NULL, NULL); - - return flatpak_installed_ref_new (full_ref, - alt_id ? alt_id : commit, - latest_alt_id ? latest_alt_id : latest_commit, - origin, subpaths, - deploy_path, - installed_size, - is_current); -} - -/** - * flatpak_installation_get_installed_ref: - * @self: a #FlatpakInstallation - * @kind: whether this is an app or runtime - * @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") - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Returns information about an installed ref, such as the available builds, - * its size, location, etc. - * - * Returns: (transfer full): an #FlatpakInstalledRef, or %NULL if an error occurred - */ -FlatpakInstalledRef * -flatpak_installation_get_installed_ref (FlatpakInstallation *self, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable, - GError **error) -{ - 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 (); - - if (kind == FLATPAK_REF_KIND_APP) - ref = flatpak_build_app_ref (name, branch, arch); - else - ref = flatpak_build_runtime_ref (name, branch, arch); - - - deploy = flatpak_dir_get_if_deployed (dir, - ref, NULL, cancellable); - if (deploy == NULL) - { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - "Ref %s not installed", ref); - return NULL; - } - - return get_ref (dir, ref, cancellable, error); -} - -/** - * flatpak_installation_get_current_installed_app: - * @self: a #FlatpakInstallation - * @name: the name of the app - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Get the last build of reference @name that was installed with - * flatpak_installation_install(), or %NULL if the reference has - * never been installed locally. - * - * Returns: (transfer full): an #FlatpakInstalledRef - */ -FlatpakInstalledRef * -flatpak_installation_get_current_installed_app (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = NULL; - g_autoptr(GFile) deploy = NULL; - 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); - - if (deploy == NULL) - { - g_set_error (error, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - "App %s not installed", name); - return NULL; - } - - return get_ref (dir, current, cancellable, error); -} - -/** - * flatpak_installation_list_installed_refs: - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists the installed references. - * - * Returns: (transfer container) (element-type FlatpakInstalledRef): an GPtrArray of - * #FlatpakInstalledRef instances - */ -GPtrArray * -flatpak_installation_list_installed_refs (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - 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); - int i; - - if (!flatpak_dir_list_refs (dir, - "app", - &raw_refs_app, - cancellable, error)) - return NULL; - - for (i = 0; raw_refs_app[i] != NULL; i++) - { - g_autoptr(GError) local_error = NULL; - FlatpakInstalledRef *ref = get_ref (dir, raw_refs_app[i], cancellable, &local_error); - if (ref != NULL) - g_ptr_array_add (refs, ref); - else - g_warning ("Unexpected failure getting ref for %s: %s", raw_refs_app[i], local_error->message); - } - - if (!flatpak_dir_list_refs (dir, - "runtime", - &raw_refs_runtime, - cancellable, error)) - return NULL; - - for (i = 0; raw_refs_runtime[i] != NULL; i++) - { - g_autoptr(GError) local_error = NULL; - FlatpakInstalledRef *ref = get_ref (dir, raw_refs_runtime[i], cancellable, &local_error); - if (ref != NULL) - g_ptr_array_add (refs, ref); - else - g_warning ("Unexpected failure getting ref for %s: %s", raw_refs_runtime[i], local_error->message); - } - - return g_steal_pointer (&refs); -} - -/** - * flatpak_installation_list_installed_refs_by_kind: - * @self: a #FlatpakInstallation - * @kind: the kind of installation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists the installed references of a specific kind. - * - * Returns: (transfer container) (element-type FlatpakInstalledRef): an GPtrArray of - * #FlatpakInstalledRef instances - */ -GPtrArray * -flatpak_installation_list_installed_refs_by_kind (FlatpakInstallation *self, - FlatpakRefKind kind, - GCancellable *cancellable, - GError **error) -{ - 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; - - if (!flatpak_dir_list_refs (dir, - kind == FLATPAK_REF_KIND_APP ? "app" : "runtime", - &raw_refs, - cancellable, error)) - return NULL; - - for (i = 0; raw_refs[i] != NULL; i++) - { - g_autoptr(GError) local_error = NULL; - FlatpakInstalledRef *ref = get_ref (dir, raw_refs[i], cancellable, &local_error); - if (ref != NULL) - g_ptr_array_add (refs, ref); - else - g_warning ("Unexpected failure getting ref for %s: %s", raw_refs[i], local_error->message); - } - - return g_steal_pointer (&refs); -} - -/** - * flatpak_installation_list_installed_refs_for_update: - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists the installed references that has a remote update that is not - * locally available. However, even though an app is not returned by this - * it can have local updates available that has not been deployed. Look - * at commit vs latest_commit on installed apps for this. - * - * Returns: (transfer container) (element-type FlatpakInstalledRef): an GPtrArray of - * #FlatpakInstalledRef instances - */ -GPtrArray * -flatpak_installation_list_installed_refs_for_update (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(GPtrArray) updates = NULL; - g_autoptr(GPtrArray) installed = NULL; - g_autoptr(GPtrArray) remotes = NULL; - g_autoptr(GHashTable) ht = NULL; - int i, j; - - ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - remotes = flatpak_installation_list_remotes (self, cancellable, error); - if (remotes == NULL) - return NULL; - - for (i = 0; i < remotes->len; i++) - { - FlatpakRemote *remote = g_ptr_array_index (remotes, i); - g_autoptr(GPtrArray) refs = NULL; - g_autoptr(GError) local_error = NULL; - - if (flatpak_remote_get_disabled (remote)) - continue; - - /* We ignore errors here. we don't want one remote to fail us */ - refs = flatpak_installation_list_remote_refs_sync (self, - flatpak_remote_get_name (remote), - cancellable, &local_error); - if (refs != NULL) - { - for (j = 0; j < refs->len; j++) - { - FlatpakRemoteRef *remote_ref = g_ptr_array_index (refs, j); - g_autofree char *full_ref = flatpak_ref_format_ref (FLATPAK_REF (remote_ref)); - g_autofree char *key = g_strdup_printf ("%s:%s", flatpak_remote_get_name (remote), - full_ref); - - g_hash_table_insert (ht, g_steal_pointer (&key), - g_strdup (flatpak_ref_get_commit (FLATPAK_REF (remote_ref)))); - } - } - else - { - g_debug ("Update: Failed to read remote %s: %s", - flatpak_remote_get_name (remote), - local_error->message); - } - } - - installed = flatpak_installation_list_installed_refs (self, cancellable, error); - if (installed == NULL) - return NULL; - - updates = g_ptr_array_new_with_free_func (g_object_unref); - - for (i = 0; i < installed->len; i++) - { - FlatpakInstalledRef *installed_ref = g_ptr_array_index (installed, i); - g_autofree char *full_ref = flatpak_ref_format_ref (FLATPAK_REF (installed_ref)); - g_autofree char *key = g_strdup_printf ("%s:%s", flatpak_installed_ref_get_origin (installed_ref), - full_ref); - const char *remote_ref = g_hash_table_lookup (ht, key); - - if (remote_ref != NULL && - g_strcmp0 (remote_ref, - flatpak_installed_ref_get_latest_commit (installed_ref)) != 0) - g_ptr_array_add (updates, g_object_ref (installed_ref)); - } - - return g_steal_pointer (&updates); -} - -#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 */ - -/* Find all USB and LAN repositories which share the same collection ID as - * @remote_name, and add a #FlatpakRemote to @remotes for each of them. The caller - * must initialise @remotes. Returns %TRUE without modifying @remotes if the - * given remote doesn’t have a collection ID configured. - * - * FIXME: If this were async, the parallelisation could be handled in the caller. */ -static gboolean -list_remotes_for_configured_remote (FlatpakInstallation *self, - const gchar *remote_name, - FlatpakDir *dir, - GPtrArray *remotes /* (element-type FlatpakRemote) */, - GCancellable *cancellable, - GError **error) -{ -#ifdef FLATPAK_ENABLE_P2P - g_autofree gchar *collection_id = NULL; - OstreeCollectionRef ref; - const OstreeCollectionRef *refs[2] = { NULL, }; - g_autofree gchar *appstream_ref = NULL; - g_autoptr(GMainContext) context = NULL; - g_auto(OstreeRepoFinderResultv) results = NULL; - g_autoptr(GAsyncResult) result = NULL; - g_autoptr(OstreeRepoFinder) finder_mount = NULL, finder_avahi = NULL; - OstreeRepoFinder *finders[3] = { NULL, }; - gsize i; - - /* Find the collection ID for @remote_name, or bail if there is none. */ - if (!ostree_repo_get_remote_option (flatpak_dir_get_repo (dir), - remote_name, "collection-id", - NULL, &collection_id, error)) - return FALSE; - if (collection_id == NULL || *collection_id == '\0') - return TRUE; - - context = g_main_context_new (); - g_main_context_push_thread_default (context); - - appstream_ref = g_strdup_printf ("appstream/%s", flatpak_get_arch ()); - ref.collection_id = collection_id; - ref.ref_name = appstream_ref; - refs[0] = &ref; - - finder_mount = OSTREE_REPO_FINDER (ostree_repo_finder_mount_new (NULL)); - finder_avahi = OSTREE_REPO_FINDER (ostree_repo_finder_avahi_new (context)); - finders[0] = finder_mount; - finders[1] = finder_avahi; - - ostree_repo_finder_avahi_start (OSTREE_REPO_FINDER_AVAHI (finder_avahi), NULL); /* ignore failure */ - ostree_repo_find_remotes_async (flatpak_dir_get_repo (dir), - (const OstreeCollectionRef * const *) refs, - NULL, /* no options */ - finders, - NULL, /* no progress */ - cancellable, - async_result_cb, - &result); - - while (result == NULL) - g_main_context_iteration (context, TRUE); - - results = ostree_repo_find_remotes_finish (flatpak_dir_get_repo (dir), result, error); - ostree_repo_finder_avahi_stop (OSTREE_REPO_FINDER_AVAHI (finder_avahi)); - - g_main_context_pop_thread_default (context); - - for (i = 0; results != NULL && results[i] != NULL; i++) - { - g_ptr_array_add (remotes, - flatpak_remote_new_from_ostree (results[i]->remote, - results[i]->finder, - dir)); - } -#endif /* FLATPAK_ENABLE_P2P */ - - return TRUE; -} - -/** - * flatpak_installation_list_remotes: - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists the remotes, in priority (highest first) order. For same priority, - * an earlier added remote comes before a later added one. - * - * Returns: (transfer container) (element-type FlatpakRemote): an GPtrArray of - * #FlatpakRemote instances - */ -GPtrArray * -flatpak_installation_list_remotes (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - 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); - gsize i; - - remote_names = flatpak_dir_list_remotes (dir, cancellable, error); - if (remote_names == NULL) - return 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_maybe_ensure_repo (dir_clone, cancellable, error)) - return NULL; - - for (i = 0; remote_names[i] != NULL; i++) - { - g_ptr_array_add (remotes, - flatpak_remote_new_with_dir (remote_names[i], dir_clone)); - - /* Add the dynamic mirrors of this remote. */ - if (!list_remotes_for_configured_remote (self, remote_names[i], dir_clone, - remotes, cancellable, error)) - return NULL; - } - - return g_steal_pointer (&remotes); -} - -/** - * flatpak_installation_modify_remote: - * @self: a #FlatpakInstallation - * @remote: the modified #FlatpakRemote - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Saves changes in the @remote object. - * - * Returns: %TRUE if the modifications have been committed successfully - */ -gboolean -flatpak_installation_modify_remote (FlatpakInstallation *self, - FlatpakRemote *remote, - GCancellable *cancellable, - GError **error) -{ - 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_maybe_ensure_repo (dir_clone, cancellable, error)) - return FALSE; - - if (!flatpak_remote_commit (remote, dir_clone, cancellable, error)) - return FALSE; - - /* Make sure we pick up the new config */ - flatpak_installation_drop_caches (self, NULL, NULL); - - return TRUE; -} - -/** - * flatpak_installation_remove_remote: - * @self: a #FlatpakInstallation - * @name: the name of the remote to remove - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Removes the remote with the given name from the installation. - * - * Returns: %TRUE if the remote has been removed successfully - */ -gboolean -flatpak_installation_remove_remote (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error) -{ - 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); - if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) - return FALSE; - - if (!flatpak_dir_remove_remote (dir, FALSE, name, - cancellable, error)) - return FALSE; - - /* Make sure we pick up the new config */ - flatpak_installation_drop_caches (self, NULL, NULL); - - return TRUE; -} - -/** - * flatpak_installation_set_config_sync: - * @self: a #FlatpakInstallation - * @key: the name of the key to set - * @value: the new value, or %NULL to unset - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Set a global configuration option for the installation, currently - * the only supported key is "languages", which is a comman-separated - * list of langue codes like "sv;en;pl", or "" to mean all languages. - * - * Returns: %TRUE if the option was set correctly - */ -gboolean -flatpak_installation_set_config_sync (FlatpakInstallation *self, - const char *key, - const char *value, - GCancellable *cancellable, - GError **error) -{ - 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); - if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) - return FALSE; - - if (!flatpak_dir_set_config (dir, key, value, error)) - return FALSE; - - /* Make sure we pick up the new config */ - flatpak_installation_drop_caches (self, NULL, NULL); - - return TRUE; -} - -/** - * flatpak_installation_get_config: - * @self: a #FlatpakInstallation - * @key: the name of the key to get - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Get a global configuration option for the remote, see - * flatpak_installation_set_config_sync() for supported keys. - * - * Returns: The (newly allocated) value, or %NULL on error (%G_KEY_FILE_ERROR_KEY_NOT_FOUND error if key is not set) - */ -char * -flatpak_installation_get_config (FlatpakInstallation *self, - const char *key, - GCancellable *cancellable, - GError **error) -{ - 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); -} - -/** - * flatpak_installation_update_remote_sync: - * @self: a #FlatpakInstallation - * @name: the name of the remote to update - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Updates the local configuration of a remote repository by fetching - * the related information from the summary file in the remote OSTree - * repository and committing the changes to the local installation. - * - * Returns: %TRUE if the remote has been updated successfully - * - * Since: 0.6.13 - */ -gboolean -flatpak_installation_update_remote_sync (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error) -{ - 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); - if (!flatpak_dir_ensure_repo (dir_clone, cancellable, error)) - return FALSE; - - if (!flatpak_dir_update_remote_configuration (dir, name, cancellable, error)) - return FALSE; - - /* Make sure we pick up the new config */ - flatpak_installation_drop_caches (self, NULL, NULL); - - return TRUE; -} - -/** - * flatpak_installation_get_remote_by_name: - * @self: a #FlatpakInstallation - * @name: a remote name - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Looks up a remote by name. - * - * Returns: (transfer full): a #FlatpakRemote instances, or %NULL error - */ -FlatpakRemote * -flatpak_installation_get_remote_by_name (FlatpakInstallation *self, - const gchar *name, - GCancellable *cancellable, - GError **error) -{ - 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; - - remote_names = flatpak_dir_list_remotes (dir, cancellable, error); - if (remote_names == NULL) - return NULL; - - for (i = 0; remote_names[i] != NULL; i++) - { - if (strcmp (remote_names[i], name) == 0) - { - /* 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)) - return NULL; - return flatpak_remote_new_with_dir (remote_names[i], dir_clone); - } - } - - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "No remote named '%s'", name); - return NULL; -} - -/** - * flatpak_installation_load_app_overrides: - * @self: a #FlatpakInstallation - * @app_id: an application id - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Loads the metadata overrides file for an application. - * - * Returns: (transfer full): the contents of the overrides files, - * or %NULL if an error occurred - */ -char * -flatpak_installation_load_app_overrides (FlatpakInstallation *self, - const char *app_id, - GCancellable *cancellable, - GError **error) -{ - 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; - - return metadata_contents; -} - -/** - * flatpak_installation_install_bundle: - * @self: a #FlatpakInstallation - * @file: a #GFile that is an flatpak bundle - * @progress: (scope call) (nullable): progress callback - * @progress_data: (closure progress) (nullable): user data passed to @progress - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Install an application or runtime from an flatpak bundle file. - * See flatpak-build-bundle(1) for how to create bundles. - * - * Returns: (transfer full): The ref for the newly installed app or %NULL on failure - */ -FlatpakInstalledRef * -flatpak_installation_install_bundle (FlatpakInstallation *self, - GFile *file, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - 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; - - /* Make sure we pick up the new config */ - flatpak_installation_drop_caches (self, NULL, NULL); - - /* 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)) - return NULL; - - if (!flatpak_dir_install_bundle (dir_clone, file, remote, NULL, - cancellable, error)) - return NULL; - - result = get_ref (dir, ref, cancellable, error); - if (result == NULL) - return NULL; - - return result; -} - -/** - * flatpak_installation_install_ref_file: - * @self: a #FlatpakInstallation - * @ref_file_data: The ref file contents - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Creates a remote based on the passed in .flatpakref file contents - * in @ref_file_data and returns the #FlatpakRemoteRef that can be used - * to install it. - * - * Note, the #FlatpakRemoteRef will not have the commit field set, to - * avoid unnecessary roundtrips. If you need that you have to resolve it - * explicitly with flatpak_installation_fetch_remote_ref_sync (). - * - * Returns: (transfer full): a #FlatpakRemoteRef if the remote has been added successfully, %NULL - * on error. - * - * Since: 0.6.10 - */ -FlatpakRemoteRef * -flatpak_installation_install_ref_file (FlatpakInstallation *self, - GBytes *ref_file_data, - GCancellable *cancellable, - GError **error) -{ - 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; - - if (!flatpak_installation_drop_caches (self, cancellable, error)) - return NULL; - - return flatpak_remote_ref_new (ref, NULL, remote); -} - -/** - * flatpak_installation_install_full: - * @self: a #FlatpakInstallation - * @flags: set of #FlatpakInstallFlags flag - * @remote_name: name of the remote to use - * @kind: what this ref contains (an #FlatpakRefKind) - * @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) (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 - * @error: return location for a #GError - * - * Install a new application or runtime. - * - * Note that this function was originally written to always return a - * #FlatpakInstalledRef. Since 0.9.13, passing - * FLATPAK_INSTALL_FLAGS_NO_DEPLOY will only pull refs into the local flatpak - * repository without deploying them, however this function will - * be unable to provide information on the installed ref, so - * FLATPAK_ERROR_ONLY_PULLED will be set and the caller must respond - * accordingly. - * - * Returns: (transfer full): The ref for the newly installed app or %NULL on failure - */ -FlatpakInstalledRef * -flatpak_installation_install_full (FlatpakInstallation *self, - FlatpakInstallFlags flags, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - const char * const *subpaths, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = NULL; - g_autofree char *ref = NULL; - g_autoptr(FlatpakDir) dir_clone = NULL; - g_autoptr(GMainContext) main_context = NULL; - g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; - 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; - - deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, cancellable); - if (deploy_dir != NULL) - { - g_set_error (error, - FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, - "%s branch %s already installed", name, branch ? branch : "master"); - return NULL; - } - - /* 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)) - return NULL; - - /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); - - if (progress) - ostree_progress = flatpak_progress_new (progress, progress_data); - else - ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); - - if (!flatpak_dir_install (dir_clone, - (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; - - /* Note that if the caller sets FLATPAK_INSTALL_FLAGS_NO_DEPLOY we must - * always return an error, as explained above. Otherwise get_ref will - * always return an error. */ - if ((flags & FLATPAK_INSTALL_FLAGS_NO_DEPLOY) != 0) - { - g_set_error (error, - FLATPAK_ERROR, FLATPAK_ERROR_ONLY_PULLED, - "As requested, %s was only pulled, but not installed", - name); - goto out; - } - - result = get_ref (dir, ref, cancellable, error); - if (result == NULL) - goto out; - -out: - if (main_context) - g_main_context_pop_thread_default (main_context); - - if (ostree_progress) - ostree_async_progress_finish (ostree_progress); - - return result; -} - -/** - * flatpak_installation_install: - * @self: a #FlatpakInstallation - * @remote_name: name of the remote to use - * @kind: what this ref contains (an #FlatpakRefKind) - * @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') - * @progress: (scope call) (nullable): progress callback - * @progress_data: (closure progress) (nullable): user data passed to @progress - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Install a new application or runtime. - * - * Note that this function was originally written to always return a - * #FlatpakInstalledRef. Since 0.9.13, passing - * FLATPAK_INSTALL_FLAGS_NO_DEPLOY will only pull refs into the local flatpak - * repository without deploying them, however this function will - * be unable to provide information on the installed ref, so - * FLATPAK_ERROR_ONLY_PULLED will be set and the caller must respond - * accordingly. - * - * Returns: (transfer full): The ref for the newly installed app or %NULL on failure - */ -FlatpakInstalledRef * -flatpak_installation_install (FlatpakInstallation *self, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - return flatpak_installation_install_full (self, FLATPAK_INSTALL_FLAGS_NONE, - remote_name, kind, name, arch, branch, - NULL, progress, progress_data, - cancellable, error); -} - -/** - * flatpak_installation_update_full: - * @self: a #FlatpakInstallation - * @flags: set of #FlatpakUpdateFlags flag - * @kind: whether this is an app or runtime - * @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) (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 - * @error: return location for a #GError - * - * Update an application or runtime. - * - * 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, - FlatpakUpdateFlags flags, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - const char * const *subpaths, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = NULL; - g_autofree char *ref = NULL; - g_autoptr(GFile) deploy_dir = NULL; - g_autoptr(FlatpakDir) dir_clone = NULL; - g_autoptr(GMainContext) main_context = NULL; - g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; - g_autofree char *remote_name = NULL; - FlatpakInstalledRef *result = NULL; - 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; - - deploy_dir = flatpak_dir_get_if_deployed (dir, ref, NULL, cancellable); - if (deploy_dir == NULL) - { - g_set_error (error, - FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, - "%s branch %s is not installed", name, branch ? branch : "master"); - return NULL; - } - - remote_name = flatpak_dir_get_origin (dir, ref, cancellable, error); - if (remote_name == NULL) - return NULL; - - target_commit = flatpak_dir_check_for_update (dir, ref, remote_name, NULL, - (const char **)subpaths, - (flags & FLATPAK_UPDATE_FLAGS_NO_PULL) != 0, - &check_results, - cancellable, error); - if (target_commit == NULL) - return NULL; - - /* 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)) - return NULL; - - /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); - - if (progress) - ostree_progress = flatpak_progress_new (progress, progress_data); - else - ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); - - if (!flatpak_dir_update (dir_clone, - (flags & FLATPAK_UPDATE_FLAGS_NO_PULL) != 0, - (flags & FLATPAK_UPDATE_FLAGS_NO_DEPLOY) != 0, - (flags & FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS) != 0, - FALSE, - ref, remote_name, target_commit, - (const OstreeRepoFinderResult * const *) check_results, - (const char **)subpaths, - ostree_progress, cancellable, error)) - goto out; - - result = get_ref (dir, ref, cancellable, error); - if (result == NULL) - goto out; - -out: - if (main_context) - g_main_context_pop_thread_default (main_context); - - if (ostree_progress) - ostree_async_progress_finish (ostree_progress); - - return result; -} - -/** - * flatpak_installation_update: - * @self: a #FlatpakInstallation - * @flags: set of #FlatpakUpdateFlags flag - * @kind: whether this is an app or runtime - * @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) - * @progress: (scope call) (nullable): the callback - * @progress_data: (closure progress) (nullable): user data passed to @progress - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Update an application or runtime. - * - * 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, - FlatpakUpdateFlags flags, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - return flatpak_installation_update_full (self, flags, kind, name, arch, - branch, NULL, progress, progress_data, - cancellable, error); -} - -/** - * flatpak_installation_uninstall: - * @self: a #FlatpakInstallation - * @kind: what this ref contains (an #FlatpakRefKind) - * @name: name of the app or runtime to uninstall - * @arch: architecture of the app or runtime to uninstall - * @branch: name of the branch of the app or runtime to uninstall - * @progress: (scope call) (nullable): the callback - * @progress_data: (closure progress) (nullable): user data passed to @progress - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Uninstall an application or runtime. - * - * Returns: %TRUE on success - */ -FLATPAK_EXTERN gboolean -flatpak_installation_uninstall (FlatpakInstallation *self, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error) -{ - 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; - - /* 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)) - return FALSE; - - if (!flatpak_dir_uninstall (dir_clone, ref, FLATPAK_HELPER_UNINSTALL_FLAGS_NONE, - cancellable, error)) - return FALSE; - - return TRUE; -} - -/** - * flatpak_installation_fetch_remote_size_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @ref: the ref - * @download_size: (out): return location for the (maximum) download size - * @installed_size: (out): return location for the installed size - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Gets information about the maximum amount of data that needs to be transferred - * to pull the ref from a remote repository, and about the amount of - * local disk space that is required to check out this commit. - * - * Note that if there are locally available data that are in the ref, which is common - * for instance if you're doing an update then the real download size may be smaller - * than what is returned here. - * - * Returns: %TRUE, unless an error occurred - */ -gboolean -flatpak_installation_fetch_remote_size_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRef *ref, - guint64 *download_size, - guint64 *installed_size, - GCancellable *cancellable, - GError **error) -{ - 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, - cancellable, - error); -} - -/** - * flatpak_installation_fetch_remote_metadata_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @ref: the ref - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Obtains the metadata file from a commit. - * - * Returns: (transfer full): a #GBytes containing the flatpak metadata file, - * or %NULL if an error occurred - */ -GBytes * -flatpak_installation_fetch_remote_metadata_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRef *ref, - GCancellable *cancellable, - GError **error) -{ - 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, - cancellable, error)) - return NULL; - - return g_bytes_new_take (res, strlen (res)); -} - -/** - * flatpak_installation_list_remote_refs_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists all the applications and runtimes in a remote. - * - * Returns: (transfer container) (element-type FlatpakRemoteRef): an GPtrArray of - * #FlatpakRemoteRef instances - */ -GPtrArray * -flatpak_installation_list_remote_refs_sync (FlatpakInstallation *self, - const char *remote_name, - GCancellable *cancellable, - GError **error) -{ - 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, - cancellable, - error)) - return NULL; - - g_hash_table_iter_init (&iter, ht); - while (g_hash_table_iter_next (&iter, &key, &value)) - { - const char *refspec = key; - const char *checksum = value; - FlatpakRemoteRef *ref; - - ref = flatpak_remote_ref_new (refspec, checksum, remote_name); - - if (ref) - g_ptr_array_add (refs, ref); - } - - return g_steal_pointer (&refs); -} - -/** - * flatpak_installation_fetch_remote_ref_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @kind: what this ref contains (an #FlatpakRefKind) - * @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') - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Gets the current remote branch of a ref in the remote. - * - * Returns: (transfer full): a #FlatpakRemoteRef instance, or %NULL - */ -FlatpakRemoteRef * -flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = NULL; - g_autoptr(GHashTable) ht = NULL; - g_autofree char *ref = NULL; - const char *checksum; - - 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, - cancellable, - error)) - return NULL; - - if (kind == FLATPAK_REF_KIND_APP) - ref = flatpak_build_app_ref (name, - branch, - arch); - else - ref = flatpak_build_runtime_ref (name, - branch, - arch); - - checksum = g_hash_table_lookup (ht, ref); - - if (checksum != NULL) - return flatpak_remote_ref_new (ref, checksum, remote_name); - - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "Reference %s doesn't exist in remote", ref); - return NULL; -} - -/** - * flatpak_installation_update_appstream_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @arch: Architecture to update, or %NULL for the local machine arch - * @out_changed: (nullable): Set to %TRUE if the contents of the appstream changed, %FALSE if nothing changed - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Updates the local copy of appstream for @remote_name for the specified @arch. - * If you need progress feedback, use flatpak_installation_update_appstream_full_sync(). - * - * Returns: %TRUE on success, or %FALSE on error - */ -gboolean -flatpak_installation_update_appstream_sync (FlatpakInstallation *self, - const char *remote_name, - const char *arch, - gboolean *out_changed, - GCancellable *cancellable, - GError **error) -{ - return flatpak_installation_update_appstream_full_sync (self, remote_name, arch, - NULL, NULL, out_changed, - cancellable, error); - -} - -/** - * flatpak_installation_update_appstream_full_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @arch: Architecture to update, or %NULL for the local machine arch - * @progress: (scope call) (nullable): progress callback - * @progress_data: (closure progress) (nullable): user data passed to @progress - * @out_changed: (nullable): Set to %TRUE if the contents of the appstream changed, %FALSE if nothing changed - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Updates the local copy of appstream for @remote_name for the specified @arch. - * - * Returns: %TRUE on success, or %FALSE on error - */ -gboolean -flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self, - const char *remote_name, - const char *arch, - FlatpakProgressCallback progress, - gpointer progress_data, - gboolean *out_changed, - GCancellable *cancellable, - GError **error) -{ - 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)) - return FALSE; - - /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); - - if (progress) - ostree_progress = flatpak_progress_new (progress, progress_data); - else - ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); - - res = flatpak_dir_update_appstream (dir_clone, - remote_name, - arch, - out_changed, - ostree_progress, - cancellable, - error); - - g_main_context_pop_thread_default (main_context); - - if (ostree_progress) - ostree_async_progress_finish (ostree_progress); - - return res; -} - - -/** - * flatpak_installation_create_monitor: - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Gets monitor object for the installation. The returned file monitor will - * emit the #GFileMonitor::changed signal whenever an application or runtime - * was installed, uninstalled or updated. - * - * Returns: (transfer full): a new #GFileMonitor instance, or %NULL on error - */ -GFileMonitor * -flatpak_installation_create_monitor (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(FlatpakDir) dir = flatpak_installation_get_dir_maybe_no_repo (self); - g_autoptr(GFile) path = NULL; - - path = flatpak_dir_get_changed_path (dir); - - return g_file_monitor_file (path, G_FILE_MONITOR_NONE, - cancellable, error); -} - - -/** - * flatpak_installation_list_remote_related_refs_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @ref: the ref - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists all the available refs on @remote_name that are related to - * @ref, and the subpaths to use. These are things that are - * interesting to install, update, or uninstall together with - * @ref. For instance, locale data or debug information. - * - * The returned list contains all available related refs, but not - * everyone should always be installed. For example, - * flatpak_related_ref_should_download () returns TRUE if the - * reference should be installed/updated with the app, and - * flatpak_related_ref_should_delete () returns TRUE if it - * should be uninstalled with the main ref. - * - * Returns: (transfer container) (element-type FlatpakRelatedRef): an GPtrArray of - * #FlatpakRelatedRef instances - * - * Since: 0.6.7 - */ -GPtrArray * -flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error) -{ - 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) - return NULL; - - for (i = 0; i < related->len; i++) - { - FlatpakRelated *rel = g_ptr_array_index (related, i); - FlatpakRelatedRef *ref; - - ref = flatpak_related_ref_new (rel->collection_id, rel->ref, rel->commit, - rel->subpaths, rel->download, rel->delete); - - if (ref) - g_ptr_array_add (refs, ref); - } - - return g_steal_pointer (&refs); -} - -/** - * flatpak_installation_list_installed_related_refs_sync: - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @ref: the ref - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Lists all the locally installed refs from @remote_name that are - * related to @ref. These are things that are interesting to install, - * update, or uninstall together with @ref. For instance, locale data - * or debug information. - * - * This function is similar to flatpak_installation_list_remote_related_refs_sync, - * but instead of looking at what is available on the remote, it only looks - * at the locally installed refs. This is useful for instance when you're - * looking for related refs to uninstall, or when you're planning to use - * FLATPAK_UPDATE_FLAGS_NO_PULL to install previously pulled refs. - * - * Returns: (transfer container) (element-type FlatpakRelatedRef): an GPtrArray of - * #FlatpakRelatedRef instances - * - * Since: 0.6.7 - */ -GPtrArray * -flatpak_installation_list_installed_related_refs_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error) -{ - 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) - return NULL; - - for (i = 0; i < related->len; i++) - { - FlatpakRelated *rel = g_ptr_array_index (related, i); - FlatpakRelatedRef *ref; - - ref = flatpak_related_ref_new (rel->collection_id, rel->ref, rel->commit, - rel->subpaths, rel->download, rel->delete); - - if (ref) - g_ptr_array_add (refs, ref); - } - - return g_steal_pointer (&refs); -} - -/** - * flatpak_installation_remove_local_ref_sync - * @self: a #FlatpakInstallation - * @remote_name: the name of the remote - * @ref: the ref - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Remove the OSTree ref given by @remote_name:@ref from the local flatpak - * repository. The next time the underlying OSTree repo is pruned, objects - * which were attached to that ref will be removed. This is useful if you - * pulled a flatpak ref using flatpak_installation_install_full() and - * specified %FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to - * deploy the ref later on and want to remove the local ref to prevent it - * from taking up disk space. Note that this will not remove the objects - * referred to by @ref from the underlying OSTree repo, you should use - * flatpak_installation_prune_local_repo() to do that. - * - * Returns: %TRUE on success - */ -gboolean -flatpak_installation_remove_local_ref_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error) -{ - 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); -} - -/** - * flatpak_installation_cleanup_local_refs_sync - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Remove all OSTree refs from the local flatpak repository which are not - * in a deployed state. The next time the underlying OSTree repo is pruned, - * objects which were attached to that ref will be removed. This is useful if - * you pulled a flatpak refs using flatpak_installation_install_full() and - * specified %FLATPAK_INSTALL_FLAGS_NO_DEPLOY but then decided not to - * deploy the refs later on and want to remove the local refs to prevent them - * from taking up disk space. Note that this will not remove the objects - * referred to by @ref from the underlying OSTree repo, you should use - * flatpak_installation_prune_local_repo() to do that. - * - * Since: 0.10.0 - * Returns: %TRUE on success - */ -gboolean -flatpak_installation_cleanup_local_refs_sync (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - 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); -} - -/** - * flatpak_installation_prune_local_repo - * @self: a #FlatpakInstallation - * @cancellable: (nullable): a #GCancellable - * @error: return location for a #GError - * - * Remove all orphaned OSTree objects from the underlying OSTree repo in - * @installation. - * - * Returns: %TRUE on success - */ -gboolean -flatpak_installation_prune_local_repo (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error) -{ - 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 -Nru flatpak-0.11.3/lib/flatpak-installation.h flatpak-1.0.7/lib/flatpak-installation.h --- flatpak-0.11.3/lib/flatpak-installation.h 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-installation.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,336 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_INSTALLATION_H__ -#define __FLATPAK_INSTALLATION_H__ - -typedef struct _FlatpakInstallation FlatpakInstallation; - -#include -#include -#include - -#define FLATPAK_TYPE_INSTALLATION flatpak_installation_get_type () -#define FLATPAK_INSTALLATION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_INSTALLATION, FlatpakInstallation)) -#define FLATPAK_IS_INSTALLATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_INSTALLATION)) - -FLATPAK_EXTERN GType flatpak_installation_get_type (void); - -struct _FlatpakInstallation -{ - GObject parent; -}; - -typedef struct -{ - GObjectClass parent_class; -} FlatpakInstallationClass; - -/** - * FlatpakUpdateFlags: - * @FLATPAK_UPDATE_FLAGS_NONE: Fetch remote builds and install the latest one (default) - * @FLATPAK_UPDATE_FLAGS_NO_DEPLOY: Don't install any new builds that might be fetched - * @FLATPAK_UPDATE_FLAGS_NO_PULL: Don't try to fetch new builds from the remote repo - * - * Flags to alter the behavior of flatpak_installation_update(). - */ -typedef enum { - FLATPAK_UPDATE_FLAGS_NONE = 0, - FLATPAK_UPDATE_FLAGS_NO_DEPLOY = (1 << 0), - FLATPAK_UPDATE_FLAGS_NO_PULL = (1 << 1), - FLATPAK_UPDATE_FLAGS_NO_STATIC_DELTAS = (1 << 2), -} FlatpakUpdateFlags; - -/** - * FlatpakInstallFlags: - * @FLATPAK_INSTALL_FLAGS_NONE: Default - * - * Flags to alter the behavior of flatpak_installation_install_full(). - */ -typedef enum { - FLATPAK_INSTALL_FLAGS_NONE = 0, - FLATPAK_INSTALL_FLAGS_NO_STATIC_DELTAS = (1 << 0), - FLATPAK_INSTALL_FLAGS_NO_DEPLOY = (1 << 2), - FLATPAK_INSTALL_FLAGS_NO_PULL = (1 << 3), -} FlatpakInstallFlags; - -/** - * FlatpakStorageType: - * @FLATPAK_STORAGE_TYPE_DEFAULT: default - * @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(). - * - * Since: 0.6.15 - */ -typedef enum { - FLATPAK_STORAGE_TYPE_DEFAULT = 0, - FLATPAK_STORAGE_TYPE_HARD_DISK, - FLATPAK_STORAGE_TYPE_SDCARD, - FLATPAK_STORAGE_TYPE_MMC, - FLATPAK_STORAGE_TYPE_NETWORK, -} FlatpakStorageType; - - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakInstallation, g_object_unref) -#endif - -FLATPAK_EXTERN const char *flatpak_get_default_arch (void); - -FLATPAK_EXTERN const char *const *flatpak_get_supported_arches (void); - -FLATPAK_EXTERN GPtrArray *flatpak_get_system_installations (GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_system (GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_system_with_id (const char *id, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_user (GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstallation *flatpak_installation_new_for_path (GFile *path, - gboolean user, - GCancellable *cancellable, - GError **error); - -/** - * FlatpakProgressCallback: - * @status: A status string, suitable for display - * @progress: percentage of completion - * @estimating: whether @progress is just an estimate - * @user_data: User data passed to the caller - * - * The progress callback is called repeatedly during long-running operations - * such as installations or updates, and can be used to update progress information - * in a user interface. - * - * The callback occurs in the thread-default context of the caller. - */ -typedef void (*FlatpakProgressCallback)(const char *status, - guint progress, - gboolean estimating, - gpointer user_data); - -FLATPAK_EXTERN gboolean flatpak_installation_drop_caches (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_get_is_user (FlatpakInstallation *self); -FLATPAK_EXTERN GFile *flatpak_installation_get_path (FlatpakInstallation *self); -FLATPAK_EXTERN const char *flatpak_installation_get_id (FlatpakInstallation *self); -FLATPAK_EXTERN const char *flatpak_installation_get_display_name (FlatpakInstallation *self); -FLATPAK_EXTERN gint flatpak_installation_get_priority (FlatpakInstallation *self); -FLATPAK_EXTERN FlatpakStorageType flatpak_installation_get_storage_type (FlatpakInstallation *self); -FLATPAK_EXTERN gboolean flatpak_installation_launch (FlatpakInstallation *self, - const char *name, - const char *arch, - const char *branch, - const char *commit, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GFileMonitor *flatpak_installation_create_monitor (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs_by_kind (FlatpakInstallation *self, - FlatpakRefKind kind, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray *flatpak_installation_list_installed_refs_for_update (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_get_installed_ref (FlatpakInstallation *self, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_get_current_installed_app (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray *flatpak_installation_list_remotes (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakRemote *flatpak_installation_get_remote_by_name (FlatpakInstallation *self, - const gchar *name, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_modify_remote (FlatpakInstallation *self, - FlatpakRemote *remote, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_remove_remote (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_update_remote_sync (FlatpakInstallation *self, - const char *name, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_set_config_sync (FlatpakInstallation *self, - const char *key, - const char *value, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN char * flatpak_installation_get_config (FlatpakInstallation *self, - const char *key, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN char * flatpak_installation_load_app_overrides (FlatpakInstallation *self, - const char *app_id, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install (FlatpakInstallation *self, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install_full (FlatpakInstallation *self, - FlatpakInstallFlags flags, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - const char * const *subpaths, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_update (FlatpakInstallation *self, - FlatpakUpdateFlags flags, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_update_full (FlatpakInstallation *self, - FlatpakUpdateFlags flags, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - const char * const *subpaths, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakInstalledRef * flatpak_installation_install_bundle (FlatpakInstallation *self, - GFile *file, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakRemoteRef * flatpak_installation_install_ref_file (FlatpakInstallation *self, - GBytes *ref_file_data, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_uninstall (FlatpakInstallation *self, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - FlatpakProgressCallback progress, - gpointer progress_data, - GCancellable *cancellable, - GError **error); - -FLATPAK_EXTERN gboolean flatpak_installation_fetch_remote_size_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRef *ref, - guint64 *download_size, - guint64 *installed_size, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GBytes * flatpak_installation_fetch_remote_metadata_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRef *ref, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray * flatpak_installation_list_remote_refs_sync (FlatpakInstallation *self, - const char *remote_name, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN FlatpakRemoteRef *flatpak_installation_fetch_remote_ref_sync (FlatpakInstallation *self, - const char *remote_name, - FlatpakRefKind kind, - const char *name, - const char *arch, - const char *branch, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_update_appstream_sync (FlatpakInstallation *self, - const char *remote_name, - const char *arch, - gboolean *out_changed, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_update_appstream_full_sync (FlatpakInstallation *self, - const char *remote_name, - const char *arch, - FlatpakProgressCallback progress, - gpointer progress_data, - gboolean *out_changed, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray * flatpak_installation_list_remote_related_refs_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN GPtrArray * flatpak_installation_list_installed_related_refs_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); - -FLATPAK_EXTERN gboolean flatpak_installation_remove_local_ref_sync (FlatpakInstallation *self, - const char *remote_name, - const char *ref, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_cleanup_local_refs_sync (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); -FLATPAK_EXTERN gboolean flatpak_installation_prune_local_repo (FlatpakInstallation *self, - GCancellable *cancellable, - GError **error); - - -#endif /* __FLATPAK_INSTALLATION_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-installed-ref.c flatpak-1.0.7/lib/flatpak-installed-ref.c --- flatpak-0.11.3/lib/flatpak-installed-ref.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-installed-ref.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,393 +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 "flatpak-utils.h" -#include "flatpak-installed-ref.h" -#include "flatpak-installed-ref-private.h" -#include "flatpak-enum-types.h" - -/** - * SECTION:flatpak-installed-ref - * @Title: FlatpakInstalledRef - * @Short_description: Installed application reference - * - * A FlatpakInstalledRef provides information about an installed - * application or runtime (in short: ref), such as the available - * builds, its size, location, etc. - */ - -typedef struct _FlatpakInstalledRefPrivate FlatpakInstalledRefPrivate; - -struct _FlatpakInstalledRefPrivate -{ - gboolean is_current; - char *origin; - char *latest_commit; - char *deploy_dir; - char **subpaths; - guint64 installed_size; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakInstalledRef, flatpak_installed_ref, FLATPAK_TYPE_REF) - -enum { - PROP_0, - - PROP_IS_CURRENT, - PROP_ORIGIN, - PROP_LATEST_COMMIT, - PROP_DEPLOY_DIR, - PROP_INSTALLED_SIZE, - PROP_SUBPATHS -}; - -static void -flatpak_installed_ref_finalize (GObject *object) -{ - FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - g_free (priv->origin); - g_free (priv->latest_commit); - g_free (priv->deploy_dir); - g_strfreev (priv->subpaths); - - G_OBJECT_CLASS (flatpak_installed_ref_parent_class)->finalize (object); -} - -static void -flatpak_installed_ref_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_IS_CURRENT: - priv->is_current = g_value_get_boolean (value); - break; - - case PROP_INSTALLED_SIZE: - priv->installed_size = g_value_get_uint64 (value); - break; - - case PROP_ORIGIN: - g_clear_pointer (&priv->origin, g_free); - priv->origin = g_value_dup_string (value); - break; - - case PROP_LATEST_COMMIT: - g_clear_pointer (&priv->latest_commit, g_free); - priv->latest_commit = g_value_dup_string (value); - break; - - case PROP_DEPLOY_DIR: - g_clear_pointer (&priv->deploy_dir, g_free); - priv->deploy_dir = g_value_dup_string (value); - break; - - case PROP_SUBPATHS: - g_clear_pointer (&priv->subpaths, g_strfreev); - priv->subpaths = g_strdupv (g_value_get_boxed (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_installed_ref_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakInstalledRef *self = FLATPAK_INSTALLED_REF (object); - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_IS_CURRENT: - g_value_set_boolean (value, priv->is_current); - break; - - case PROP_INSTALLED_SIZE: - g_value_set_uint64 (value, priv->installed_size); - break; - - case PROP_ORIGIN: - g_value_set_string (value, priv->origin); - break; - - case PROP_LATEST_COMMIT: - g_value_set_string (value, priv->latest_commit); - break; - - case PROP_DEPLOY_DIR: - g_value_set_string (value, priv->deploy_dir); - break; - - case PROP_SUBPATHS: - g_value_set_boxed (value, priv->subpaths); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_installed_ref_class_init (FlatpakInstalledRefClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_installed_ref_get_property; - object_class->set_property = flatpak_installed_ref_set_property; - object_class->finalize = flatpak_installed_ref_finalize; - - g_object_class_install_property (object_class, - PROP_IS_CURRENT, - g_param_spec_boolean ("is-current", - "Is Current", - "Whether the application is current", - FALSE, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_INSTALLED_SIZE, - g_param_spec_uint64 ("installed-size", - "Installed Size", - "The installed size of the application", - 0, G_MAXUINT64, 0, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_ORIGIN, - g_param_spec_string ("origin", - "Origin", - "The origin", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_LATEST_COMMIT, - g_param_spec_string ("latest-commit", - "Latest Commit", - "The latest commit", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_DEPLOY_DIR, - g_param_spec_string ("deploy-dir", - "Deploy Dir", - "Where the application is installed", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_SUBPATHS, - g_param_spec_boxed ("subpaths", - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE)); -} - -static void -flatpak_installed_ref_init (FlatpakInstalledRef *self) -{ -} - -/** - * flatpak_installed_ref_get_origin: - * @self: a #FlatpakInstalledRef - * - * Gets the origin of the ref. - * - * Returns: (transfer none): the origin - */ -const char * -flatpak_installed_ref_get_origin (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return priv->origin; -} - -/** - * flatpak_installed_ref_get_latest_commit: - * @self: a #FlatpakInstalledRef - * - * Gets the latest commit of the ref. - * - * Returns: (transfer none): the latest commit - */ -const char * -flatpak_installed_ref_get_latest_commit (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return priv->latest_commit; -} - -/** - * flatpak_installed_ref_get_deploy_dir: - * @self: a #FlatpakInstalledRef - * - * Gets the deploy dir of the ref. - * - * Returns: (transfer none): the deploy dir - */ -const char * -flatpak_installed_ref_get_deploy_dir (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return priv->deploy_dir; -} - -/** - * flatpak_installed_ref_get_is_current: - * @self: a #FlatpakInstalledRef - * - * Returns whether the ref is current. - * - * Returns: %TRUE if the ref is current - */ -gboolean -flatpak_installed_ref_get_is_current (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return priv->is_current; -} - -/** - * flatpak_installed_ref_get_subpaths: - * @self: a #FlatpakInstalledRef - * - * Returns the subpaths that are installed, or %NULL if all files installed. - * - * Returns: (transfer none): A strv, or %NULL - */ -const char * const * -flatpak_installed_ref_get_subpaths (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return (const char * const *) priv->subpaths; -} - -/** - * flatpak_installed_ref_get_installed_size: - * @self: a #FlatpakInstalledRef - * - * Returns the installed size of the ref. - * - * Returns: the installed size - */ -guint64 -flatpak_installed_ref_get_installed_size (FlatpakInstalledRef *self) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - - return priv->installed_size; -} - -/** - * flatpak_installed_ref_load_metadata: - * @self: a #FlatpakInstalledRef - * @cancellable: (nullable): a #GCancellable - * @error: a return location for a #GError - * - * Loads the metadata file for this ref. - * - * Returns: (transfer full): a #GBytes containing the metadata file, - * or %NULL if an error occurred - */ -GBytes * -flatpak_installed_ref_load_metadata (FlatpakInstalledRef *self, - GCancellable *cancellable, - GError **error) -{ - FlatpakInstalledRefPrivate *priv = flatpak_installed_ref_get_instance_private (self); - g_autofree char *path = NULL; - char *metadata; - gsize length; - - if (priv->deploy_dir == NULL) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "Unknown deploy directory"); - return NULL; - } - - path = g_build_filename (priv->deploy_dir, "metadata", NULL); - if (!g_file_get_contents (path, &metadata, &length, error)) - return NULL; - - return g_bytes_new_take (metadata, length); -} - -FlatpakInstalledRef * -flatpak_installed_ref_new (const char *full_ref, - const char *commit, - const char *latest_commit, - const char *origin, - const char **subpaths, - const char *deploy_dir, - guint64 installed_size, - gboolean is_current) -{ - FlatpakRefKind kind = FLATPAK_REF_KIND_APP; - FlatpakInstalledRef *ref; - - g_auto(GStrv) parts = NULL; - - parts = g_strsplit (full_ref, "/", -1); - - if (strcmp (parts[0], "app") != 0) - kind = FLATPAK_REF_KIND_RUNTIME; - - /* Canonicalize the "no subpaths" case */ - if (subpaths && *subpaths == NULL) - subpaths = NULL; - - ref = g_object_new (FLATPAK_TYPE_INSTALLED_REF, - "kind", kind, - "name", parts[1], - "arch", parts[2], - "branch", parts[3], - "commit", commit, - "latest-commit", latest_commit, - "origin", origin, - "subpaths", subpaths, - "is-current", is_current, - "installed-size", installed_size, - "deploy-dir", deploy_dir, - NULL); - - return ref; -} diff -Nru flatpak-0.11.3/lib/flatpak-installed-ref.h flatpak-1.0.7/lib/flatpak-installed-ref.h --- flatpak-0.11.3/lib/flatpak-installed-ref.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-installed-ref.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_INSTALLED_REF_H__ -#define __FLATPAK_INSTALLED_REF_H__ - -typedef struct _FlatpakInstalledRef FlatpakInstalledRef; - -#include -#include - -#define FLATPAK_TYPE_INSTALLED_REF flatpak_installed_ref_get_type () -#define FLATPAK_INSTALLED_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_INSTALLED_REF, FlatpakInstalledRef)) -#define FLATPAK_IS_INSTALLED_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_INSTALLED_REF)) - -FLATPAK_EXTERN GType flatpak_installed_ref_get_type (void); - -struct _FlatpakInstalledRef -{ - FlatpakRef parent; -}; - -typedef struct -{ - FlatpakRefClass parent_class; -} FlatpakInstalledRefClass; - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakInstalledRef, g_object_unref) -#endif - -FLATPAK_EXTERN const char *flatpak_installed_ref_get_origin (FlatpakInstalledRef * self); -FLATPAK_EXTERN const char * const *flatpak_installed_ref_get_subpaths (FlatpakInstalledRef *self); -FLATPAK_EXTERN guint64 flatpak_installed_ref_get_installed_size (FlatpakInstalledRef *self); -FLATPAK_EXTERN const char *flatpak_installed_ref_get_deploy_dir (FlatpakInstalledRef *self); -FLATPAK_EXTERN const char *flatpak_installed_ref_get_latest_commit (FlatpakInstalledRef *self); -FLATPAK_EXTERN gboolean flatpak_installed_ref_get_is_current (FlatpakInstalledRef *self); -FLATPAK_EXTERN GBytes *flatpak_installed_ref_load_metadata (FlatpakInstalledRef *self, - GCancellable *cancellable, - GError **error); - -#endif /* __FLATPAK_INSTALLED_REF_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-installed-ref-private.h flatpak-1.0.7/lib/flatpak-installed-ref-private.h --- flatpak-0.11.3/lib/flatpak-installed-ref-private.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-installed-ref-private.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_INSTALLED_REF_PRIVATE_H__ -#define __FLATPAK_INSTALLED_REF_PRIVATE_H__ - -#include -#include - -FlatpakInstalledRef *flatpak_installed_ref_new (const char *full_ref, - const char *commit, - const char *latest_commit, - const char *origin, - const char **subpaths, - const char *deploy_dir, - guint64 installed_size, - gboolean current); - -#endif /* __FLATPAK_INSTALLED_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-ref.c flatpak-1.0.7/lib/flatpak-ref.c --- flatpak-0.11.3/lib/flatpak-ref.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-ref.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,397 +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 "flatpak-utils.h" -#include "flatpak-ref.h" -#include "flatpak-enum-types.h" - -/** - * SECTION:flatpak-ref - * @Title: FlatpakRef - * @Short_description: Application reference - * - * Currently flatpak manages two types of binary artifacts: applications, and - * runtimes. Applications contain a program that desktop users can run, while - * runtimes contain only libraries and data. An FlatpakRef object (or short: ref) - * can refer to either of these. - * - * Both applications and runtimes are identified by a 4-tuple of strings: kind, - * name, arch and branch, e.g. app/org.gnome.evince/x86_64/master. The functions - * flatpak_ref_parse() and flatpak_ref_format_ref() can be used to convert - * FlatpakRef objects into this string representation and back. - * - * To uniquely identify a particular version of an application or runtime, you - * need a commit. - * - * The subclasses #FlatpakInstalledRef and #FlatpakRemoteRef provide more information - * for artifacts that are locally installed or available from a remote repository. - */ -typedef struct _FlatpakRefPrivate FlatpakRefPrivate; - -struct _FlatpakRefPrivate -{ - char *name; - char *arch; - char *branch; - char *commit; - FlatpakRefKind kind; - char *collection_id; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRef, flatpak_ref, G_TYPE_OBJECT) - -enum { - PROP_0, - - PROP_NAME, - PROP_ARCH, - PROP_BRANCH, - PROP_COMMIT, - PROP_KIND, - PROP_COLLECTION_ID, -}; - -static void -flatpak_ref_finalize (GObject *object) -{ - FlatpakRef *self = FLATPAK_REF (object); - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - g_free (priv->name); - g_free (priv->arch); - g_free (priv->branch); - g_free (priv->commit); - - G_OBJECT_CLASS (flatpak_ref_parent_class)->finalize (object); -} - -static void -flatpak_ref_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakRef *self = FLATPAK_REF (object); - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_NAME: - g_clear_pointer (&priv->name, g_free); - priv->name = g_value_dup_string (value); - break; - - case PROP_ARCH: - g_clear_pointer (&priv->arch, g_free); - priv->arch = g_value_dup_string (value); - break; - - case PROP_BRANCH: - g_clear_pointer (&priv->branch, g_free); - priv->branch = g_value_dup_string (value); - break; - - case PROP_COMMIT: - g_clear_pointer (&priv->commit, g_free); - priv->commit = g_value_dup_string (value); - break; - - case PROP_KIND: - priv->kind = g_value_get_enum (value); - break; - - case PROP_COLLECTION_ID: - g_clear_pointer (&priv->collection_id, g_free); - priv->collection_id = g_value_dup_string (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_ref_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakRef *self = FLATPAK_REF (object); - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - - case PROP_ARCH: - g_value_set_string (value, priv->arch); - break; - - case PROP_BRANCH: - g_value_set_string (value, priv->branch); - break; - - case PROP_COMMIT: - g_value_set_string (value, priv->commit); - break; - - case PROP_KIND: - g_value_set_enum (value, priv->kind); - break; - - case PROP_COLLECTION_ID: - g_value_set_string (value, priv->collection_id); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_ref_class_init (FlatpakRefClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_ref_get_property; - object_class->set_property = flatpak_ref_set_property; - object_class->finalize = flatpak_ref_finalize; - - g_object_class_install_property (object_class, - PROP_NAME, - g_param_spec_string ("name", - "Name", - "The name of the application or runtime", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_ARCH, - g_param_spec_string ("arch", - "Architecture", - "The architecture of the application or runtime", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_BRANCH, - g_param_spec_string ("branch", - "Branch", - "The branch of the application or runtime", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_COMMIT, - g_param_spec_string ("commit", - "Commit", - "The commit", - NULL, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_KIND, - g_param_spec_enum ("kind", - "Kind", - "The kind of artifact", - FLATPAK_TYPE_REF_KIND, - FLATPAK_REF_KIND_APP, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_COLLECTION_ID, - g_param_spec_string ("collection-id", - "Collection ID", - "The collection ID", - NULL, - G_PARAM_READWRITE)); -} - -static void -flatpak_ref_init (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - priv->kind = FLATPAK_REF_KIND_APP; -} - -/** - * flatpak_ref_get_name: - * @self: a #FlatpakRef - * - * Gets the name of the ref. - * - * Returns: (transfer none): the name - */ -const char * -flatpak_ref_get_name (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->name; -} - -/** - * flatpak_ref_get_arch: - * @self: a #FlatpakRef - * - * Gets the arch or the ref. - * - * Returns: (transfer none): the arch - */ -const char * -flatpak_ref_get_arch (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->arch; -} - -/** - * flatpak_ref_get_branch: - * @self: a #FlatpakRef - * - * Gets the branch of the ref. - * - * Returns: (transfer none): the branch - */ -const char * -flatpak_ref_get_branch (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->branch; -} - -/** - * flatpak_ref_get_commit: - * @self: a #FlatpakRef - * - * Gets the commit of the ref. - * - * Returns: (transfer none): the commit - */ -const char * -flatpak_ref_get_commit (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->commit; -} - -/** - * flatpak_ref_get_kind: - * @self: a #FlatpakRef - * - * Gets the kind of artifact that this ref refers to. - * - * Returns: the kind of artifact - */ -FlatpakRefKind -flatpak_ref_get_kind (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->kind; -} - -/** - * flatpak_ref_format_ref: - * @self: a #FlatpakRef - * - * Convert an FlatpakRef object into a string representation that - * can be parsed by flatpak_ref_parse(). - * - * Returns: (transfer full): string representation - */ -char * -flatpak_ref_format_ref (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - if (priv->kind == FLATPAK_REF_KIND_APP) - return flatpak_build_app_ref (priv->name, - priv->branch, - priv->arch); - else - return flatpak_build_runtime_ref (priv->name, - priv->branch, - priv->arch); -} - -/** - * flatpak_ref_parse: - * @ref: A string ref name, such as "app/org.test.App/86_64/master" - * @error: return location for a #GError - * - * Tries to parse a full ref name and return a #FlatpakRef (without a - * commit set) or fail if the ref is invalid somehow. - * - * Returns: (transfer full): an #FlatpakRef, or %NULL - */ -FlatpakRef * -flatpak_ref_parse (const char *ref, GError **error) -{ - g_auto(GStrv) parts = NULL; - - parts = flatpak_decompose_ref (ref, error); - if (parts == NULL) - return NULL; - - FlatpakRefKind kind; - if (g_strcmp0 (parts[0], "app") == 0) - { - kind = FLATPAK_REF_KIND_APP; - } - else if (g_strcmp0 (parts[0], "runtime") == 0) - { - kind = FLATPAK_REF_KIND_RUNTIME; - } - else - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, - "Invalid kind: %s", parts[0]); - return NULL; - } - - return FLATPAK_REF (g_object_new (FLATPAK_TYPE_REF, - "kind", kind, - "name", parts[1], - "arch", parts[2], - "branch", parts[3], - NULL)); -} - -/** - * flatpak_ref_get_collection_id: - * @self: a #FlatpakRef - * - * Gets the collection ID of the ref. - * - * Returns: (transfer none): the collection ID - */ -const char * -flatpak_ref_get_collection_id (FlatpakRef *self) -{ - FlatpakRefPrivate *priv = flatpak_ref_get_instance_private (self); - - return priv->collection_id; -} diff -Nru flatpak-0.11.3/lib/flatpak-ref.h flatpak-1.0.7/lib/flatpak-ref.h --- flatpak-0.11.3/lib/flatpak-ref.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-ref.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,75 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_REF_H__ -#define __FLATPAK_REF_H__ - -typedef struct _FlatpakRef FlatpakRef; - -#include - -#define FLATPAK_TYPE_REF flatpak_ref_get_type () -#define FLATPAK_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REF, FlatpakRef)) -#define FLATPAK_IS_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REF)) - -FLATPAK_EXTERN GType flatpak_ref_get_type (void); - -struct _FlatpakRef -{ - GObject parent; -}; - -typedef struct -{ - GObjectClass parent_class; -} FlatpakRefClass; - - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRef, g_object_unref) -#endif - -/** - * FlatpakRefKind: - * @FLATPAK_REF_KIND_APP: An application - * @FLATPAK_REF_KIND_RUNTIME: A runtime that applications can use. - * - * The kind of artifact that a FlatpakRef refers to. - */ -typedef enum { - FLATPAK_REF_KIND_APP, - FLATPAK_REF_KIND_RUNTIME, -} FlatpakRefKind; - -FLATPAK_EXTERN const char * flatpak_ref_get_name (FlatpakRef *self); -FLATPAK_EXTERN const char * flatpak_ref_get_arch (FlatpakRef *self); -FLATPAK_EXTERN const char * flatpak_ref_get_branch (FlatpakRef *self); -FLATPAK_EXTERN const char * flatpak_ref_get_commit (FlatpakRef *self); -FLATPAK_EXTERN FlatpakRefKind flatpak_ref_get_kind (FlatpakRef *self); -FLATPAK_EXTERN char * flatpak_ref_format_ref (FlatpakRef *self); -FLATPAK_EXTERN FlatpakRef * flatpak_ref_parse (const char *ref, - GError **error); -FLATPAK_EXTERN const char * flatpak_ref_get_collection_id (FlatpakRef *self); - -#endif /* __FLATPAK_REF_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-related-ref.c flatpak-1.0.7/lib/flatpak-related-ref.c --- flatpak-0.11.3/lib/flatpak-related-ref.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-related-ref.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,260 +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 "flatpak-utils.h" -#include "flatpak-related-ref.h" -#include "flatpak-related-ref-private.h" -#include "flatpak-enum-types.h" - -/** - * SECTION:flatpak-related-ref - * @Title: FlatpakRelatedRef - * @Short_description: Related application reference - * - * A FlatpakRelatedRef provides information about an ref that is related - * to another ref. For instance, the local extension ref of an app. - * - * Since: 0.6.7 - */ - -typedef struct _FlatpakRelatedRefPrivate FlatpakRelatedRefPrivate; - -struct _FlatpakRelatedRefPrivate -{ - char **subpaths; - gboolean download; - gboolean delete; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRelatedRef, flatpak_related_ref, FLATPAK_TYPE_REF) - -enum { - PROP_0, - - PROP_SUBPATHS, - PROP_SHOULD_DOWNLOAD, - PROP_SHOULD_DELETE, -}; - -static void -flatpak_related_ref_finalize (GObject *object) -{ - FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - g_strfreev (priv->subpaths); - - G_OBJECT_CLASS (flatpak_related_ref_parent_class)->finalize (object); -} - -static void -flatpak_related_ref_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_SHOULD_DOWNLOAD: - priv->download = g_value_get_boolean (value); - break; - - case PROP_SHOULD_DELETE: - priv->delete = g_value_get_boolean (value); - break; - - case PROP_SUBPATHS: - g_clear_pointer (&priv->subpaths, g_strfreev); - priv->subpaths = g_strdupv (g_value_get_boxed (value)); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_related_ref_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakRelatedRef *self = FLATPAK_RELATED_REF (object); - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_SHOULD_DOWNLOAD: - g_value_set_boolean (value, priv->download); - break; - - case PROP_SHOULD_DELETE: - g_value_set_boolean (value, priv->delete); - break; - - case PROP_SUBPATHS: - g_value_set_boxed (value, priv->subpaths); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_related_ref_class_init (FlatpakRelatedRefClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_related_ref_get_property; - object_class->set_property = flatpak_related_ref_set_property; - object_class->finalize = flatpak_related_ref_finalize; - - g_object_class_install_property (object_class, - PROP_SHOULD_DOWNLOAD, - g_param_spec_boolean ("should-download", - "Should download", - "Whether to auto-download the ref with the main ref", - FALSE, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_SHOULD_DELETE, - g_param_spec_boolean ("should-delete", - "Should delete", - "Whether to auto-delete the ref with the main ref", - FALSE, - G_PARAM_READWRITE)); - g_object_class_install_property (object_class, - PROP_SUBPATHS, - g_param_spec_boxed ("subpaths", - "", - "", - G_TYPE_STRV, - G_PARAM_READWRITE)); -} - -static void -flatpak_related_ref_init (FlatpakRelatedRef *self) -{ -} - -/** - * flatpak_related_ref_get_download: - * @self: a #FlatpakRelatedRef - * - * Returns whether to auto-download the ref with the main ref. - * - * Returns: %TRUE if the ref should be downloaded with the main ref. - * - * Since: 0.6.7 -*/ -gboolean -flatpak_related_ref_should_download (FlatpakRelatedRef *self) -{ - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - return priv->download; -} - -/** - * flatpak_related_ref_should_delete: - * @self: a #FlatpakRelatedRef - * - * Returns whether to auto-delete the ref with the main ref. - * - * Returns: %TRUE if the ref should be deleted with the main ref. - * - * Since: 0.6.7 - */ -gboolean -flatpak_related_ref_should_delete (FlatpakRelatedRef *self) -{ - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - return priv->delete; -} - -/** - * flatpak_related_ref_get_subpaths: - * @self: a #FlatpakRelatedRef - * - * Returns the subpaths that should be installed/updated for the ref. - * This returns %NULL if all files should be installed. - * - * Returns: (transfer none): A strv, or %NULL - * - * Since: 0.6.7 - */ -const char * const * -flatpak_related_ref_get_subpaths (FlatpakRelatedRef *self) -{ - FlatpakRelatedRefPrivate *priv = flatpak_related_ref_get_instance_private (self); - - return (const char * const *) priv->subpaths; -} - - -FlatpakRelatedRef * -flatpak_related_ref_new (const char *collection_id, - const char *full_ref, - const char *commit, - char **subpaths, - gboolean download, - gboolean delete) -{ - FlatpakRefKind kind = FLATPAK_REF_KIND_APP; - FlatpakRelatedRef *ref; - - g_auto(GStrv) parts = NULL; - - parts = g_strsplit (full_ref, "/", -1); - - if (strcmp (parts[0], "app") != 0) - kind = FLATPAK_REF_KIND_RUNTIME; - - /* Canonicalize the "no subpaths" case */ - if (subpaths && *subpaths == NULL) - subpaths = NULL; - - ref = g_object_new (FLATPAK_TYPE_RELATED_REF, - "kind", kind, - "name", parts[1], - "arch", parts[2], - "branch", parts[3], - "commit", commit, - "subpaths", subpaths, - "should-download", download, - "should-delete", delete, -#ifdef FLATPAK_ENABLE_P2P - "collection-id", collection_id, -#endif /* FLATPAK_ENABLE_P2P */ - NULL); - - return ref; -} diff -Nru flatpak-0.11.3/lib/flatpak-related-ref.h flatpak-1.0.7/lib/flatpak-related-ref.h --- flatpak-0.11.3/lib/flatpak-related-ref.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-related-ref.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,57 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_RELATED_REF_H__ -#define __FLATPAK_RELATED_REF_H__ - -typedef struct _FlatpakRelatedRef FlatpakRelatedRef; - -#include -#include - -#define FLATPAK_TYPE_RELATED_REF flatpak_related_ref_get_type () -#define FLATPAK_RELATED_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_RELATED_REF, FlatpakRelatedRef)) -#define FLATPAK_IS_RELATED_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_RELATED_REF)) - -FLATPAK_EXTERN GType flatpak_related_ref_get_type (void); - -struct _FlatpakRelatedRef -{ - FlatpakRef parent; -}; - -typedef struct -{ - FlatpakRefClass parent_class; -} FlatpakRelatedRefClass; - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRelatedRef, g_object_unref) -#endif - -FLATPAK_EXTERN const char * const *flatpak_related_ref_get_subpaths (FlatpakRelatedRef *self); -FLATPAK_EXTERN gboolean flatpak_related_ref_should_download (FlatpakRelatedRef *self); -FLATPAK_EXTERN gboolean flatpak_related_ref_should_delete (FlatpakRelatedRef *self); - -#endif /* __FLATPAK_RELATED_REF_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-related-ref-private.h flatpak-1.0.7/lib/flatpak-related-ref-private.h --- flatpak-0.11.3/lib/flatpak-related-ref-private.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-related-ref-private.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_RELATED_REF_PRIVATE_H__ -#define __FLATPAK_RELATED_REF_PRIVATE_H__ - -#include -#include - -FlatpakRelatedRef *flatpak_related_ref_new (const char *collection_id, - const char *full_ref, - const char *commit, - char **subpaths, - gboolean download, - gboolean delete); - -#endif /* __FLATPAK_RELATED_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-remote.c flatpak-1.0.7/lib/flatpak-remote.c --- flatpak-0.11.3/lib/flatpak-remote.c 2018-02-07 09:00:13.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,866 +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 "flatpak-utils.h" -#include "flatpak-remote-private.h" -#include "flatpak-remote-ref-private.h" -#include "flatpak-enum-types.h" - -#include -#include - -#ifdef FLATPAK_ENABLE_P2P -#include -#endif /* FLATPAK_ENABLE_P2P */ - -/** - * SECTION:flatpak-remote - * @Short_description: Remote repository - * @Title: FlatpakRemote - * - * A #FlatpakRemote object provides information about a remote - * repository (or short: remote) that has been configured. - * - * At its most basic level, a remote has a name and the URL for - * the repository. In addition, they provide some additional - * information that can be useful when presenting repositories - * in a UI, such as a title, a priority or a "don't enumerate" - * flags. - * - * To obtain FlatpakRemote objects for the configured remotes - * on a system, use flatpak_installation_list_remotes() or - * flatpak_installation_get_remote_by_name(). - */ - -typedef struct _FlatpakRemotePrivate FlatpakRemotePrivate; - -struct _FlatpakRemotePrivate -{ - char *name; - FlatpakDir *dir; - - char *local_url; - char *local_collection_id; - char *local_title; - char *local_default_branch; - gboolean local_gpg_verify; - gboolean local_noenumerate; - gboolean local_nodeps; - gboolean local_disabled; - int local_prio; - FlatpakRemoteType type; - - guint local_url_set : 1; - guint local_collection_id_set : 1; - guint local_title_set : 1; - guint local_default_branch_set : 1; - guint local_gpg_verify_set : 1; - guint local_noenumerate_set : 1; - guint local_nodeps_set : 1; - guint local_disabled_set : 1; - guint local_prio_set : 1; - - GBytes *local_gpg_key; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRemote, flatpak_remote, G_TYPE_OBJECT) - -enum { - PROP_0, - - PROP_NAME, - PROP_TYPE, -}; - -static void -flatpak_remote_finalize (GObject *object) -{ - FlatpakRemote *self = FLATPAK_REMOTE (object); - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - g_free (priv->name); - if (priv->dir) - g_object_unref (priv->dir); - if (priv->local_gpg_key) - g_bytes_unref (priv->local_gpg_key); - - g_free (priv->local_url); - g_free (priv->local_collection_id); - g_free (priv->local_title); - g_free (priv->local_default_branch); - - G_OBJECT_CLASS (flatpak_remote_parent_class)->finalize (object); -} - -static void -flatpak_remote_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakRemote *self = FLATPAK_REMOTE (object); - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - switch (prop_id) - { - case PROP_NAME: - g_clear_pointer (&priv->name, g_free); - priv->name = g_value_dup_string (value); - break; - - case PROP_TYPE: - priv->type = g_value_get_enum (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_remote_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakRemote *self = FLATPAK_REMOTE (object); - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - switch (prop_id) - { - case PROP_NAME: - g_value_set_string (value, priv->name); - break; - - case PROP_TYPE: - g_value_set_enum (value, priv->type); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_remote_class_init (FlatpakRemoteClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_remote_get_property; - object_class->set_property = flatpak_remote_set_property; - object_class->finalize = flatpak_remote_finalize; - - /** - * FlatpakRemote:name: - * - * Name of the remote, as used in configuration files and when interfacing - * with OSTree. This is typically human readable, but could be generated, and - * must conform to ostree_validate_remote_name(). It should typically not be - * presented in the UI. - */ - g_object_class_install_property (object_class, - PROP_NAME, - g_param_spec_string ("name", - "Name", - "The name of the remote", - NULL, - G_PARAM_READWRITE)); - - /** - * FlatpakRemote:type: - * - * The type of the remote: whether it comes from static configuration files - * (@FLATPAK_REMOTE_TYPE_STATIC) or has been dynamically found from the local - * network or a mounted USB drive (@FLATPAK_REMOTE_TYPE_LAN, - * @FLATPAK_REMOTE_TYPE_USB). Dynamic remotes may be added and removed over - * time. - * - * Since: 0.9.8 - */ - g_object_class_install_property (object_class, - PROP_TYPE, - g_param_spec_enum ("type", - "Type", - "The type of the remote", - FLATPAK_TYPE_REMOTE_TYPE, - FLATPAK_REMOTE_TYPE_STATIC, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); -} - -static void -flatpak_remote_init (FlatpakRemote *self) -{ -} - -/** - * flatpak_remote_get_name: - * @self: a #FlatpakRemote - * - * Returns the name of the remote repository. - * - * Returns: (transfer none): the name - */ -const char * -flatpak_remote_get_name (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - return priv->name; -} - -/** - * flatpak_remote_get_appstream_dir: - * @self: a #FlatpakRemote - * @arch: (nullable): which architecture to fetch (default: current architecture) - * - * Returns the directory where this remote will store locally cached - * appstream information for the specified @arch. - * - * Returns: (transfer full): a #GFile - **/ -GFile * -flatpak_remote_get_appstream_dir (FlatpakRemote *self, - const char *arch) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - g_autofree char *subdir = NULL; - - if (priv->dir == NULL) - return NULL; - - if (arch == NULL) - arch = flatpak_get_arch (); - - subdir = g_strdup_printf ("appstream/%s/%s/active", priv->name, arch); - return g_file_resolve_relative_path (flatpak_dir_get_path (priv->dir), - subdir); -} - -/** - * flatpak_remote_get_appstream_timestamp: - * @self: a #FlatpakRemote - * @arch: (nullable): which architecture to fetch (default: current architecture) - * - * Returns the timestamp file that will be updated whenever the appstream information - * has been updated (or tried to update) for the specified @arch. - * - * Returns: (transfer full): a #GFile - **/ -GFile * -flatpak_remote_get_appstream_timestamp (FlatpakRemote *self, - const char *arch) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - g_autofree char *subdir = NULL; - - if (priv->dir == NULL) - return NULL; - - if (arch == NULL) - arch = flatpak_get_arch (); - - subdir = g_strdup_printf ("appstream/%s/%s/.timestamp", priv->name, arch); - return g_file_resolve_relative_path (flatpak_dir_get_path (priv->dir), - subdir); -} - -/** - * flatpak_remote_get_url: - * @self: a #FlatpakRemote - * - * Returns the repository URL of this remote. - * - * Returns: (transfer full): the URL - */ -char * -flatpak_remote_get_url (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - char *url; - - if (priv->local_url_set) - return g_strdup (priv->local_url); - - if (priv->dir) - { - OstreeRepo *repo = flatpak_dir_get_repo (priv->dir); - if (ostree_repo_remote_get_url (repo, priv->name, &url, NULL)) - return url; - } - - return NULL; -} - -/** - * flatpak_remote_set_url: - * @self: a #FlatpakRemote - * @url: The new url - * - * Sets the repository URL of this remote. - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_url (FlatpakRemote *self, - const char *url) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - g_free (priv->local_url); - priv->local_url = g_strdup (url); - priv->local_url_set = TRUE; -} - -/** - * flatpak_remote_get_collection_id: - * @self: a #FlatpakRemote - * - * Returns the repository collection ID of this remote, if set. - * - * Returns: (transfer full) (nullable): the collection ID, or %NULL if unset - */ -char * -flatpak_remote_get_collection_id (FlatpakRemote *self) -{ -#ifdef FLATPAK_ENABLE_P2P - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_collection_id_set) - return g_strdup (priv->local_collection_id); - - if (priv->dir) - return flatpak_dir_get_remote_collection_id (priv->dir, priv->name); -#endif /** FLATPAK_ENABLE_P2P */ - - return NULL; -} - -/** - * flatpak_remote_set_collection_id: - * @self: a #FlatpakRemote - * @collection_id: (nullable): The new collection ID, or %NULL to unset - * - * Sets the repository collection ID of this remote. - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_collection_id (FlatpakRemote *self, - const char *collection_id) -{ -#ifdef FLATPAK_ENABLE_P2P - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (collection_id != NULL && *collection_id == '\0') - collection_id = NULL; - - g_free (priv->local_collection_id); - priv->local_collection_id = g_strdup (collection_id); - priv->local_collection_id_set = TRUE; -#endif /* FLATPAK_ENABLE_P2P */ -} - -/** - * flatpak_remote_get_title: - * @self: a #FlatpakRemote - * - * Returns the title of the remote. - * - * Returns: (transfer full): the title - */ -char * -flatpak_remote_get_title (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_title_set) - return g_strdup (priv->local_title); - - if (priv->dir) - return flatpak_dir_get_remote_title (priv->dir, priv->name); - - return NULL; -} - -/** - * flatpak_remote_set_title: - * @self: a #FlatpakRemote - * @title: The new title - * - * Sets the repository title of this remote. - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_title (FlatpakRemote *self, - const char *title) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - g_free (priv->local_title); - priv->local_title = g_strdup (title); - priv->local_title_set = TRUE; -} - -/** - * flatpak_remote_get_default_branch: - * @self: a #FlatpakRemote - * - * Returns the default branch configured for the remote. - * - * Returns: (transfer full): the default branch, or %NULL - * - * Since: 0.6.12 - */ -char * -flatpak_remote_get_default_branch (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_default_branch_set) - return g_strdup (priv->local_default_branch); - - if (priv->dir) - return flatpak_dir_get_remote_default_branch (priv->dir, priv->name); - - return NULL; -} - -/** - * flatpak_remote_set_default_branch: - * @self: a #FlatpakRemote - * @default_branch: The new default_branch - * - * Sets the default branch configured for this remote. - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - * - * Since: 0.6.12 - */ -void -flatpak_remote_set_default_branch (FlatpakRemote *self, - const char *default_branch) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - g_free (priv->local_default_branch); - priv->local_default_branch = g_strdup (default_branch); - priv->local_default_branch_set = TRUE; -} - -/** - * flatpak_remote_get_noenumerate: - * @self: a #FlatpakRemote - * - * Returns whether this remote should be used to list applications. - * - * Returns: whether the remote is marked as "don't enumerate" - */ -gboolean -flatpak_remote_get_noenumerate (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_noenumerate_set) - return priv->local_noenumerate; - - if (priv->dir) - return flatpak_dir_get_remote_noenumerate (priv->dir, priv->name); - - return FALSE; -} - -/** - * flatpak_remote_set_noenumerate: - * @self: a #FlatpakRemote - * @noenumerate: a bool - * - * Sets the noenumeration config of this remote. See flatpak_remote_get_noenumerate(). - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_noenumerate (FlatpakRemote *self, - gboolean noenumerate) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - priv->local_noenumerate = noenumerate; - priv->local_noenumerate_set = TRUE; -} - -/** - * flatpak_remote_get_nodeps: - * @self: a #FlatpakRemote - * - * Returns whether this remote should be used to find dependencies. - * - * Returns: whether the remote is marked as "don't use for dependencies" - */ -gboolean -flatpak_remote_get_nodeps (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_nodeps_set) - return priv->local_nodeps; - - if (priv->dir) - return flatpak_dir_get_remote_nodeps (priv->dir, priv->name); - - return FALSE; -} - -/** - * flatpak_remote_set_nodeps: - * @self: a #FlatpakRemote - * @nodeps: a bool - * - * Sets the nodeps config of this remote. See flatpak_remote_get_nodeps(). - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_nodeps (FlatpakRemote *self, - gboolean nodeps) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - priv->local_nodeps = nodeps; - priv->local_nodeps_set = TRUE; -} - -/** - * flatpak_remote_get_disabled: - * @self: a #FlatpakRemote - * - * Returns whether this remote is disabled. - * - * Returns: whether the remote is marked as "don't enumerate" - */ -gboolean -flatpak_remote_get_disabled (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_disabled_set) - return priv->local_disabled; - - if (priv->dir) - return flatpak_dir_get_remote_disabled (priv->dir, priv->name); - - return FALSE; -} -/** - * flatpak_remote_set_disabled: - * @self: a #FlatpakRemote - * @disabled: a bool - * - * Sets the disabled config of this remote. See flatpak_remote_get_disable(). - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_disabled (FlatpakRemote *self, - gboolean disabled) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - priv->local_disabled = disabled; - priv->local_disabled_set = TRUE; -} - -/** - * flatpak_remote_get_prio: - * @self: a #FlatpakRemote - * - * Returns the priority for the remote. - * - * Returns: the priority - */ -int -flatpak_remote_get_prio (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_prio_set) - return priv->local_prio; - - if (priv->dir) - return flatpak_dir_get_remote_prio (priv->dir, priv->name); - - return 1; -} - -/** - * flatpak_remote_set_prio: - * @self: a #FlatpakRemote - * @prio: a bool - * - * Sets the prio config of this remote. See flatpak_remote_get_prio(). - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_prio (FlatpakRemote *self, - int prio) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - priv->local_prio = prio; - priv->local_prio_set = TRUE; -} - -/** - * flatpak_remote_get_gpg_verify: - * @self: a #FlatpakRemote - * - * Returns whether GPG verification is enabled for the remote. - * - * Returns: whether GPG verification is enabled - */ -gboolean -flatpak_remote_get_gpg_verify (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - gboolean res; - - if (priv->local_gpg_verify_set) - return priv->local_gpg_verify; - - if (priv->dir) - { - OstreeRepo *repo = flatpak_dir_get_repo (priv->dir); - if (ostree_repo_remote_get_gpg_verify (repo, priv->name, &res, NULL)) - return res; - } - - return FALSE; -} - -/** - * flatpak_remote_set_gpg_verify: - * @self: a #FlatpakRemote - * @gpg_verify: a bool - * - * Sets the gpg_verify config of this remote. See flatpak_remote_get_gpg_verify(). - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_gpg_verify (FlatpakRemote *self, - gboolean gpg_verify) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - priv->local_gpg_verify = gpg_verify; - priv->local_gpg_verify_set = TRUE; -} - -/** - * flatpak_remote_set_gpg_key: - * @self: a #FlatpakRemote - * @gpg_key: a #GBytes with gpg binary key data - * - * Sets the trusted gpg key for this remote. - * - * Note: This is a local modification of this object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - */ -void -flatpak_remote_set_gpg_key (FlatpakRemote *self, - GBytes *gpg_key) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - if (priv->local_gpg_key != NULL) - g_bytes_unref (priv->local_gpg_key); - priv->local_gpg_key = g_bytes_ref (gpg_key); -} - -FlatpakRemote * -flatpak_remote_new_with_dir (const char *name, - FlatpakDir *dir) -{ - FlatpakRemotePrivate *priv; - FlatpakRemote *self = g_object_new (FLATPAK_TYPE_REMOTE, - "name", name, - NULL); - - priv = flatpak_remote_get_instance_private (self); - if (dir) - priv->dir = g_object_ref (dir); - - return self; -} - -#ifdef FLATPAK_ENABLE_P2P -static FlatpakRemoteType -repo_finder_to_remote_type (OstreeRepoFinder *repo_finder) -{ - if (OSTREE_IS_REPO_FINDER_AVAHI (repo_finder)) - return FLATPAK_REMOTE_TYPE_LAN; - else if (OSTREE_IS_REPO_FINDER_MOUNT (repo_finder)) - return FLATPAK_REMOTE_TYPE_USB; - else - return FLATPAK_REMOTE_TYPE_STATIC; -} - -FlatpakRemote * -flatpak_remote_new_from_ostree (OstreeRemote *remote, - OstreeRepoFinder *repo_finder, - FlatpakDir *dir) -{ - FlatpakRemotePrivate *priv; - FlatpakRemote *self = g_object_new (FLATPAK_TYPE_REMOTE, - "name", ostree_remote_get_name (remote), - "type", repo_finder_to_remote_type (repo_finder), - NULL); - - priv = flatpak_remote_get_instance_private (self); - if (dir) - priv->dir = g_object_ref (dir); - - return self; -} -#endif /* FLATPAK_ENABLE_P2P */ - -/** - * flatpak_remote_new: - * @name: a name - * - * Returns a new remote object which can be used to configure a new remote. - * - * Note: This is a local configuration object, you must commit changes - * using flatpak_installation_modify_remote() for the changes to take - * effect. - * - * Returns: (transfer full): a new #FlatpakRemote - **/ -FlatpakRemote * -flatpak_remote_new (const char *name) -{ - return flatpak_remote_new_with_dir (name, NULL); -} - -gboolean -flatpak_remote_commit (FlatpakRemote *self, - FlatpakDir *dir, - GCancellable *cancellable, - 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); - - url = flatpak_remote_get_url (self); - if (url == NULL || *url == 0) - return flatpak_fail (error, "No url specified"); - - if (priv->type != FLATPAK_REMOTE_TYPE_STATIC) - return flatpak_fail (error, "Dynamic remote cannot be committed"); - - 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); - - if (priv->local_collection_id_set) - { - if (priv->local_collection_id != NULL) - g_key_file_set_string (config, group, "collection-id", priv->local_collection_id); - else - g_key_file_remove_key (config, group, "collection-id", NULL); - } - - if (priv->local_title_set) - g_key_file_set_string (config, group, "xa.title", priv->local_title); - - if (priv->local_default_branch_set) - g_key_file_set_string (config, group, "xa.default-branch", priv->local_default_branch); - - if (priv->local_gpg_verify_set) - { - g_key_file_set_boolean (config, group, "gpg-verify", priv->local_gpg_verify); - g_key_file_set_boolean (config, group, "gpg-verify-summary", priv->local_gpg_verify); - } - - if (priv->local_noenumerate_set) - g_key_file_set_boolean (config, group, "xa.noenumerate", priv->local_noenumerate); - - if (priv->local_disabled_set) - g_key_file_set_boolean (config, group, "xa.disable", priv->local_disabled); - - if (priv->local_prio_set) - { - g_autofree char *prio_as_string = g_strdup_printf ("%d", priv->local_prio); - g_key_file_set_string (config, group, "xa.prio", prio_as_string); - } - - return flatpak_dir_modify_remote (dir, priv->name, config, priv->local_gpg_key, cancellable, error); -} - -/** - * flatpak_remote_get_remote_type: - * @self: a #FlatpakRemote - * - * Get the value of #FlatpakRemote:type. - * - * Returns: the type of remote this is - * Since: 0.9.8 - */ -FlatpakRemoteType -flatpak_remote_get_remote_type (FlatpakRemote *self) -{ - FlatpakRemotePrivate *priv = flatpak_remote_get_instance_private (self); - - g_return_val_if_fail (FLATPAK_IS_REMOTE (self), FLATPAK_REMOTE_TYPE_STATIC); - - return priv->type; -} diff -Nru flatpak-0.11.3/lib/flatpak-remote.h flatpak-1.0.7/lib/flatpak-remote.h --- flatpak-0.11.3/lib/flatpak-remote.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_REMOTE_H__ -#define __FLATPAK_REMOTE_H__ - -typedef enum -{ - FLATPAK_REMOTE_TYPE_STATIC, - FLATPAK_REMOTE_TYPE_USB, - FLATPAK_REMOTE_TYPE_LAN, -} FlatpakRemoteType; - -typedef struct _FlatpakRemote FlatpakRemote; - -#include -#include - -#define FLATPAK_TYPE_REMOTE flatpak_remote_get_type () -#define FLATPAK_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REMOTE, FlatpakRemote)) -#define FLATPAK_IS_REMOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REMOTE)) - -FLATPAK_EXTERN GType flatpak_remote_get_type (void); - -struct _FlatpakRemote -{ - GObject parent; -}; - -typedef struct -{ - GObjectClass parent_class; -} FlatpakRemoteClass; - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRemote, g_object_unref) -#endif - -FLATPAK_EXTERN FlatpakRemote * flatpak_remote_new (const char *name); - -FLATPAK_EXTERN const char * flatpak_remote_get_name (FlatpakRemote *self); -FLATPAK_EXTERN GFile * flatpak_remote_get_appstream_dir (FlatpakRemote *self, - const char *arch); -FLATPAK_EXTERN GFile * flatpak_remote_get_appstream_timestamp (FlatpakRemote *self, - const char *arch); -FLATPAK_EXTERN char * flatpak_remote_get_url (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_url (FlatpakRemote *self, - const char *url); -FLATPAK_EXTERN char * flatpak_remote_get_collection_id (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_collection_id (FlatpakRemote *self, - const char *collection_id); -FLATPAK_EXTERN char * flatpak_remote_get_title (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_title (FlatpakRemote *self, - const char *title); -FLATPAK_EXTERN char * flatpak_remote_get_default_branch (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_default_branch (FlatpakRemote *self, - const char *default_branch); -FLATPAK_EXTERN gboolean flatpak_remote_get_gpg_verify (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_gpg_verify (FlatpakRemote *self, - gboolean gpg_verify); -FLATPAK_EXTERN void flatpak_remote_set_gpg_key (FlatpakRemote *self, - GBytes *gpg_key); -FLATPAK_EXTERN gboolean flatpak_remote_get_noenumerate (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_noenumerate (FlatpakRemote *self, - gboolean noenumerate); -FLATPAK_EXTERN gboolean flatpak_remote_get_nodeps (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_nodeps (FlatpakRemote *self, - gboolean nodeps); -FLATPAK_EXTERN gboolean flatpak_remote_get_disabled (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_disabled (FlatpakRemote *self, - gboolean disabled); -FLATPAK_EXTERN int flatpak_remote_get_prio (FlatpakRemote *self); -FLATPAK_EXTERN void flatpak_remote_set_prio (FlatpakRemote *self, - int prio); - -FLATPAK_EXTERN FlatpakRemoteType flatpak_remote_get_remote_type (FlatpakRemote *self); - - -#endif /* __FLATPAK_REMOTE_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-remote-private.h flatpak-1.0.7/lib/flatpak-remote-private.h --- flatpak-0.11.3/lib/flatpak-remote-private.h 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote-private.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_REMOTE_PRIVATE_H__ -#define __FLATPAK_REMOTE_PRIVATE_H__ - -#include -#include -#include - -FlatpakRemote *flatpak_remote_new_with_dir (const char *name, - FlatpakDir *dir); - -#ifdef FLATPAK_ENABLE_P2P -FlatpakRemote *flatpak_remote_new_from_ostree (OstreeRemote *remote, - OstreeRepoFinder *repo_finder, - FlatpakDir *dir); -#endif /* FLATPAK_ENABLE_P2P */ - -gboolean flatpak_remote_commit (FlatpakRemote *self, - FlatpakDir *dir, - GCancellable *cancellable, - GError **error); - -#endif /* __FLATPAK_REMOTE_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-remote-ref.c flatpak-1.0.7/lib/flatpak-remote-ref.c --- flatpak-0.11.3/lib/flatpak-remote-ref.c 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote-ref.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,174 +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 "flatpak-utils.h" -#include "flatpak-remote-ref-private.h" -#include "flatpak-remote-ref.h" -#include "flatpak-enum-types.h" - -/** - * SECTION:flatpak-remote-ref - * @Title: FlatpakRemoteRef - * @Short_description: Remote application reference - * - * A FlatpakRemoteRef provides information about an application or runtime - * (in short: ref) that is available from a remote repository. - */ -typedef struct _FlatpakRemoteRefPrivate FlatpakRemoteRefPrivate; - -struct _FlatpakRemoteRefPrivate -{ - char *remote_name; -}; - -G_DEFINE_TYPE_WITH_PRIVATE (FlatpakRemoteRef, flatpak_remote_ref, FLATPAK_TYPE_REF) - -enum { - PROP_0, - - PROP_REMOTE_NAME, -}; - -static void -flatpak_remote_ref_finalize (GObject *object) -{ - FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); - FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); - - g_free (priv->remote_name); - - G_OBJECT_CLASS (flatpak_remote_ref_parent_class)->finalize (object); -} - -static void -flatpak_remote_ref_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); - FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_REMOTE_NAME: - g_clear_pointer (&priv->remote_name, g_free); - priv->remote_name = g_value_dup_string (value); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_remote_ref_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - FlatpakRemoteRef *self = FLATPAK_REMOTE_REF (object); - FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); - - switch (prop_id) - { - case PROP_REMOTE_NAME: - g_value_set_string (value, priv->remote_name); - break; - - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static void -flatpak_remote_ref_class_init (FlatpakRemoteRefClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->get_property = flatpak_remote_ref_get_property; - object_class->set_property = flatpak_remote_ref_set_property; - object_class->finalize = flatpak_remote_ref_finalize; - - g_object_class_install_property (object_class, - PROP_REMOTE_NAME, - g_param_spec_string ("remote-name", - "Remote Name", - "The name of the remote", - NULL, - G_PARAM_READWRITE)); -} - -static void -flatpak_remote_ref_init (FlatpakRemoteRef *self) -{ -} - -/** - * flatpak_remote_ref_get_remote_name: - * @self: a #FlatpakRemoteRef - * - * Gets the remote name of the ref. - * - * Returns: (transfer none): the remote name - */ -const char * -flatpak_remote_ref_get_remote_name (FlatpakRemoteRef *self) -{ - FlatpakRemoteRefPrivate *priv = flatpak_remote_ref_get_instance_private (self); - - return priv->remote_name; -} - - -FlatpakRemoteRef * -flatpak_remote_ref_new (const char *full_ref, - const char *commit, - const char *remote_name) -{ - FlatpakRefKind kind = FLATPAK_REF_KIND_APP; - - g_auto(GStrv) parts = NULL; - FlatpakRemoteRef *ref; - - parts = flatpak_decompose_ref (full_ref, NULL); - if (parts == NULL) - return NULL; - - if (strcmp (parts[0], "app") != 0) - kind = FLATPAK_REF_KIND_RUNTIME; - - ref = g_object_new (FLATPAK_TYPE_REMOTE_REF, - "kind", kind, - "name", parts[1], - "arch", parts[2], - "branch", parts[3], - "commit", commit, - "remote-name", remote_name, - NULL); - - return ref; -} diff -Nru flatpak-0.11.3/lib/flatpak-remote-ref.h flatpak-1.0.7/lib/flatpak-remote-ref.h --- flatpak-0.11.3/lib/flatpak-remote-ref.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote-ref.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,55 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_REMOTE_REF_H__ -#define __FLATPAK_REMOTE_REF_H__ - -typedef struct _FlatpakRemoteRef FlatpakRemoteRef; - -#include -#include - -#define FLATPAK_TYPE_REMOTE_REF flatpak_remote_ref_get_type () -#define FLATPAK_REMOTE_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), FLATPAK_TYPE_REMOTE_REF, FlatpakRemoteRef)) -#define FLATPAK_IS_REMOTE_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), FLATPAK_TYPE_REMOTE_REF)) - -FLATPAK_EXTERN GType flatpak_remote_ref_get_type (void); - -struct _FlatpakRemoteRef -{ - FlatpakRef parent; -}; - -typedef struct -{ - FlatpakRefClass parent_class; -} FlatpakRemoteRefClass; - -FLATPAK_EXTERN const char * flatpak_remote_ref_get_remote_name (FlatpakRemoteRef *self); - -#ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC -G_DEFINE_AUTOPTR_CLEANUP_FUNC (FlatpakRemoteRef, g_object_unref) -#endif - -#endif /* __FLATPAK_REMOTE_REF_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-remote-ref-private.h flatpak-1.0.7/lib/flatpak-remote-ref-private.h --- flatpak-0.11.3/lib/flatpak-remote-ref-private.h 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-remote-ref-private.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,35 +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 - */ - -#if !defined(__FLATPAK_H_INSIDE__) && !defined(FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_REMOTE_REF_PRIVATE_H__ -#define __FLATPAK_REMOTE_REF_PRIVATE_H__ - -#include -#include - -FlatpakRemoteRef *flatpak_remote_ref_new (const char *full_ref, - const char *commit, - const char *remote_name); - -#endif /* __FLATPAK_REMOTE_REF_PRIVATE_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-version-macros.h flatpak-1.0.7/lib/flatpak-version-macros.h --- flatpak-0.11.3/lib/flatpak-version-macros.h 2018-02-19 13:20:10.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-version-macros.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +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 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 - */ - -#if !defined (__FLATPAK_H_INSIDE__) && !defined (FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_VERSION_MACROS_H__ -#define __FLATPAK_VERSION_MACROS_H__ - -#define FLATPAK_MAJOR_VERSION (0) -#define FLATPAK_MINOR_VERSION (11) -#define FLATPAK_MICRO_VERSION (3) - -#define FLATPAK_CHECK_VERSION(major,minor,micro) \ - (FLATPAK_MAJOR_VERSION > (major) || \ - (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION > (minor)) || \ - (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION == (minor) && \ - FLATPAK_MICRO_VERSION >= (micro))) - -#ifndef FLATPAK_EXTERN -#define FLATPAK_EXTERN extern -#endif - -/** - * SECTION:flatpak-version-macros - * @Title: Version information - */ - -#endif /* __FLATPAK_VERSION_MACROS_H__ */ diff -Nru flatpak-0.11.3/lib/flatpak-version-macros.h.in flatpak-1.0.7/lib/flatpak-version-macros.h.in --- flatpak-0.11.3/lib/flatpak-version-macros.h.in 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/lib/flatpak-version-macros.h.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +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 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 - */ - -#if !defined (__FLATPAK_H_INSIDE__) && !defined (FLATPAK_COMPILATION) -#error "Only can be included directly." -#endif - -#ifndef __FLATPAK_VERSION_MACROS_H__ -#define __FLATPAK_VERSION_MACROS_H__ - -#define FLATPAK_MAJOR_VERSION (@FLATPAK_MAJOR_VERSION@) -#define FLATPAK_MINOR_VERSION (@FLATPAK_MINOR_VERSION@) -#define FLATPAK_MICRO_VERSION (@FLATPAK_MICRO_VERSION@) - -#define FLATPAK_CHECK_VERSION(major,minor,micro) \ - (FLATPAK_MAJOR_VERSION > (major) || \ - (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION > (minor)) || \ - (FLATPAK_MAJOR_VERSION == (major) && FLATPAK_MINOR_VERSION == (minor) && \ - FLATPAK_MICRO_VERSION >= (micro))) - -#ifndef FLATPAK_EXTERN -#define FLATPAK_EXTERN extern -#endif - -/** - * SECTION:flatpak-version-macros - * @Title: Version information - */ - -#endif /* __FLATPAK_VERSION_MACROS_H__ */ diff -Nru flatpak-0.11.3/lib/Makefile.am.inc flatpak-1.0.7/lib/Makefile.am.inc --- flatpak-0.11.3/lib/Makefile.am.inc 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/Makefile.am.inc 1970-01-01 00:00:00.000000000 +0000 @@ -1,149 +0,0 @@ -lib_LTLIBRARIES += libflatpak.la -noinst_PROGRAMS += test-libflatpak - -flatpakincludedir = $(includedir)/flatpak - -flatpakinclude_HEADERS = \ - lib/flatpak.h \ - lib/flatpak-ref.h \ - lib/flatpak-error.h \ - lib/flatpak-installed-ref.h \ - lib/flatpak-remote-ref.h \ - lib/flatpak-related-ref.h \ - lib/flatpak-bundle-ref.h \ - lib/flatpak-installation.h \ - lib/flatpak-remote.h \ - lib/flatpak-version-macros.h \ - $(NULL) - -nodist_flatpakinclude_HEADERS = \ - lib/flatpak-enum-types.h \ - $(NULL) - -BUILT_SOURCES += \ - $(nodist_flatpakinclude_HEADERS) \ - $(nodist_libflatpak_la_SOURCES) \ - $(NULL) - -DISTCLEANFILES += \ - $(nodist_flatpakinclude_HEADERS) \ - $(nodist_libflatpak_la_SOURCES) \ - $(NULL) - - -lib/flatpak-enum-types.h: $(flatpakinclude_HEADERS) lib/flatpak-enum-types.h.template - $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ - lib/flatpak-enum-types.h.tmp && mv lib/flatpak-enum-types.h.tmp lib/flatpak-enum-types.h - -lib/flatpak-enum-types.c: $(flatpakinclude_HEADERS) lib/flatpak-enum-types.c.template - $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ - lib/flatpak-enum-types.c.tmp && mv lib/flatpak-enum-types.c.tmp lib/flatpak-enum-types.c - -EXTRA_DIST += lib/flatpak-enum-types.c.template lib/flatpak-enum-types.h.template - -libflatpak_la_SOURCES = \ - lib/flatpak.c \ - lib/flatpak-ref.c \ - lib/flatpak-installed-ref.c \ - lib/flatpak-installed-ref-private.h \ - lib/flatpak-remote-ref.c \ - lib/flatpak-remote-ref-private.h \ - lib/flatpak-bundle-ref.c \ - lib/flatpak-related-ref.c \ - lib/flatpak-related-ref-private.h \ - lib/flatpak-remote-private.h \ - lib/flatpak-remote.c \ - lib/flatpak-error.c \ - lib/flatpak-installation.c \ - $(NULL) - -nodist_libflatpak_la_SOURCES = \ - lib/flatpak-enum-types.c \ - $(NULL) - -sources = \ - $(libflatpak_la_SOURCES) \ - $(nodist_libflatpak_la_SOURCES) \ - $(NULL) - -libflatpak_la_CFLAGS = \ - $(HIDDEN_VISIBILITY_CFLAGS) \ - -DFLATPAK_COMPILATION \ - -I$(top_srcdir)/lib \ - -I$(top_builddir)/lib \ - $(AM_CFLAGS) \ - $(BASE_CFLAGS) \ - $(OSTREE_CFLAGS) \ - $(SOUP_CFLAGS) \ - $(JSON_CFLAGS) \ - $(NULL) - -libflatpak_la_LDFLAGS = \ - $(AM_LDFLAGS) \ - -version-info $(LT_VERSION_INFO) \ - -export-dynamic \ - -rpath $(libdir) \ - $(NULL) - -libflatpak_la_LIBADD = \ - $(AM_LIBADD) \ - libflatpak-common.la \ - $(BASE_LIBS) \ - $(OSTREE_LIBS) \ - $(SOUP_LIBS) \ - $(JSON_LIBS) \ - $(NULL) - -test_libflatpak_SOURCES = \ - lib/test-lib.c \ - $(NULL) - -test_libflatpak_CFLAGS = \ - $(AM_CFLAGS) \ - $(BASE_CFLAGS) \ - -I$(top_srcdir)/lib \ - -I$(top_builddir)/lib \ - $(NULL) - -test_libflatpak_LDADD = \ - $(AM_LDADD) \ - $(BASE_LIBS) \ - libflatpak.la \ - $(NULL) - -# gobject-introspection rules --include $(INTROSPECTION_MAKEFILE) - -INTROSPECTION_GIRS = - -if HAVE_INTROSPECTION -Flatpak-1.0.gir: libflatpak.la Makefile - -introspected_headers = \ - $(flatpakinclude_HEADERS) \ - $(nodist_flatpakinclude_HEADERS) \ - $(NULL) -introspected_sources = $(filter-out %-private.h,$(sources)) - -Flatpak_1_0_gir_NAMESPACE = Flatpak -Flatpak_1_0_gir_VERSION = 1.0 -Flatpak_1_0_gir_LIBS = libflatpak.la -Flatpak_1_0_gir_FILES = $(introspected_headers) $(introspected_sources) -Flatpak_1_0_gir_CFLAGS = $(libflatpak_la_CFLAGS) -Flatpak_1_0_gir_INCLUDES = GObject-2.0 Gio-2.0 -Flatpak_1_0_gir_SCANNERFLAGS = \ - --warn-all \ - --c-include='flatpak.h' \ - --pkg-export=flatpak - -INTROSPECTION_GIRS += Flatpak-1.0.gir - -girdir = $(datadir)/gir-1.0 -nodist_gir_DATA = $(INTROSPECTION_GIRS) -CLEANFILES += $(nodist_gir_DATA) - -typelibdir = $(libdir)/girepository-1.0 -nodist_typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) -CLEANFILES += $(nodist_typelib_DATA) - -endif # HAVE_INTROSPECTION diff -Nru flatpak-0.11.3/lib/test-lib.c flatpak-1.0.7/lib/test-lib.c --- flatpak-0.11.3/lib/test-lib.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/lib/test-lib.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,457 +0,0 @@ -#include "config.h" - -#include "libglnx/libglnx.h" - -#include -#include - - -static void -progress_cb (const char *status, - guint progress, - gboolean estimating, - gpointer user_data) -{ - g_print ("status: %s, progress: %d estimating: %d, user_data: %p\n", status, progress, estimating, user_data); -} - -static gboolean -monitor_callback (GFileMonitor * monitor, - GFile * child, - GFile * other_file, - GFileMonitorEvent eflags) -{ - g_print ("Database changed\n"); - return TRUE; -} - -int -main (int argc, char *argv[]) -{ - FlatpakInstallation *installation; - FlatpakInstalledRef *app1; - FlatpakInstalledRef *app2; - FlatpakRemoteRef *remote_ref; - - g_autoptr(GPtrArray) remotes = NULL; - GError *error = NULL; - int i, j, k; - - installation = flatpak_installation_new_user (NULL, &error); - if (installation == NULL) - { - g_print ("error: %s\n", error->message); - return 1; - } - - if (0) - { - const char *list[] = { "gnome-apps", "app/org.gnome.iagno/x86_64/stable", - "gnome", "runtime/org.gnome.Sdk/x86_64/3.20" }; - - for (j = 0; j < G_N_ELEMENTS(list); j += 2) - { - g_print ("looking for related to ref: %s\n", list[j+1]); - - for (k = 0; k < 2; k++) - { - g_autoptr(GError) error = NULL; - g_autoptr(GPtrArray) related = NULL; - - - if (k == 0) - related = flatpak_installation_list_remote_related_refs_sync (installation, - list[j], - list[j+1], - NULL, - &error); - else - related = flatpak_installation_list_installed_related_refs_sync (installation, - list[j], - list[j+1], - NULL, - &error); - - if (related == NULL) - { - g_warning ("Error: %s", error->message); - continue; - } - - g_print ("%s related:\n", (k == 0) ? "remote" : "local"); - for (i = 0; i < related->len; i++) - { - FlatpakRelatedRef *rel = g_ptr_array_index (related, i); - const char * const *subpaths = flatpak_related_ref_get_subpaths (rel); - g_autofree char *subpaths_str = NULL; - - if (subpaths) - { - g_autofree char *subpaths_joined = g_strjoinv (",", (char **) subpaths); - subpaths_str = g_strdup_printf (" subpaths: %s", subpaths_joined); - } - else - subpaths_str = g_strdup (""); - g_print ("%d %s %s %s %s dl:%d del:%d%s\n", - flatpak_ref_get_kind (FLATPAK_REF (rel)), - flatpak_ref_get_name (FLATPAK_REF (rel)), - flatpak_ref_get_arch (FLATPAK_REF (rel)), - flatpak_ref_get_branch (FLATPAK_REF (rel)), - flatpak_ref_get_commit (FLATPAK_REF (rel)), - flatpak_related_ref_should_download (rel), - flatpak_related_ref_should_delete (rel), - subpaths_str); - } - } - } - - return 0; - } - - if (argc == 4) - { - GFileMonitor * monitor = flatpak_installation_create_monitor (installation, NULL, NULL); - GMainLoop *main_loop; - - g_signal_connect (monitor, "changed", (GCallback) monitor_callback, NULL); - main_loop = g_main_loop_new (NULL, FALSE); - g_main_loop_run (main_loop); - } - - if (argc == 3) - { - app1 = flatpak_installation_install (installation, - argv[1], - FLATPAK_REF_KIND_APP, - argv[2], - NULL, NULL, - progress_cb, (gpointer) 0xdeadbeef, - NULL, &error); - if (app1 == NULL) - g_print ("Error: %s\n", error->message); - else - g_print ("Installed %s: %s\n", argv[2], - flatpak_ref_get_commit (FLATPAK_REF (app1))); - - return 0; - } - - if (argc == 2) - { - app1 = flatpak_installation_update (installation, - FLATPAK_UPDATE_FLAGS_NONE, - FLATPAK_REF_KIND_APP, - argv[1], - NULL, NULL, - progress_cb, (gpointer) 0xdeadbeef, - NULL, &error); - if (app1 == NULL) - g_print ("Error: %s\n", error->message); - else - g_print ("Updated %s: %s\n", argv[1], - flatpak_ref_get_commit (FLATPAK_REF (app1))); - - return 0; - } - - g_print ("\n**** Loading bundle\n"); - { - g_autoptr(GFile) f = g_file_new_for_commandline_arg ("tests/hello.pak"); - g_autoptr(FlatpakBundleRef) bundle = flatpak_bundle_ref_new (f, &error); - if (bundle == NULL) - { - g_print ("Error loading bundle: %s\n", error->message); - g_clear_error (&error); - } - else - { - g_autofree char *path = g_file_get_path (flatpak_bundle_ref_get_file (bundle)); - g_autoptr(GBytes) metadata = flatpak_bundle_ref_get_metadata (bundle); - g_autoptr(GBytes) appdata = flatpak_bundle_ref_get_appstream (bundle); - g_print ("%d %s %s %s %s %s %"G_GUINT64_FORMAT "\n%s\n", - flatpak_ref_get_kind (FLATPAK_REF (bundle)), - flatpak_ref_get_name (FLATPAK_REF (bundle)), - flatpak_ref_get_arch (FLATPAK_REF (bundle)), - flatpak_ref_get_branch (FLATPAK_REF (bundle)), - flatpak_ref_get_commit (FLATPAK_REF (bundle)), - path, - flatpak_bundle_ref_get_installed_size (bundle), - (char *) g_bytes_get_data (metadata, NULL)); - - if (appdata != NULL) - { - g_autoptr(GZlibDecompressor) decompressor = NULL; - g_autoptr(GOutputStream) out2 = NULL; - g_autoptr(GOutputStream) out = NULL; - - out = g_unix_output_stream_new (1, FALSE); - decompressor = g_zlib_decompressor_new (G_ZLIB_COMPRESSOR_FORMAT_GZIP); - out2 = g_converter_output_stream_new (out, G_CONVERTER (decompressor)); - - if (!g_output_stream_write_all (out2, - g_bytes_get_data (appdata, NULL), - g_bytes_get_size (appdata), - NULL, NULL, &error)) - { - g_print ("Error decompressing appdata: %s\n", error->message); - g_clear_error (&error); - } - } - } - } - - g_print ("\n**** Checking for updates\n"); - { - g_autoptr(GPtrArray) updates = - flatpak_installation_list_installed_refs_for_update (installation, - NULL, &error); - - if (updates == NULL) - { - g_print ("check for updates error: %s\n", error->message); - g_clear_error (&error); - } - else - { - for (i = 0; i < updates->len; i++) - { - FlatpakInstalledRef *ref = g_ptr_array_index (updates, i); - g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", - flatpak_ref_get_kind (FLATPAK_REF (ref)), - flatpak_ref_get_name (FLATPAK_REF (ref)), - flatpak_ref_get_arch (FLATPAK_REF (ref)), - flatpak_ref_get_branch (FLATPAK_REF (ref)), - flatpak_ref_get_commit (FLATPAK_REF (ref)), - flatpak_installed_ref_get_latest_commit (ref), - flatpak_installed_ref_get_origin (ref), - flatpak_installed_ref_get_deploy_dir (ref), - flatpak_installed_ref_get_is_current (ref), - flatpak_installed_ref_get_installed_size (ref)); - } - } - } - - g_print ("\n**** Listing all installed refs\n"); - { - g_autoptr(GPtrArray) refs = NULL; - - refs = flatpak_installation_list_installed_refs (installation, - NULL, NULL); - - for (i = 0; i < refs->len; i++) - { - FlatpakInstalledRef *ref = g_ptr_array_index (refs, i); - g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", - flatpak_ref_get_kind (FLATPAK_REF (ref)), - flatpak_ref_get_name (FLATPAK_REF (ref)), - flatpak_ref_get_arch (FLATPAK_REF (ref)), - flatpak_ref_get_branch (FLATPAK_REF (ref)), - flatpak_ref_get_commit (FLATPAK_REF (ref)), - flatpak_installed_ref_get_latest_commit (ref), - flatpak_installed_ref_get_origin (ref), - flatpak_installed_ref_get_deploy_dir (ref), - flatpak_installed_ref_get_is_current (ref), - flatpak_installed_ref_get_installed_size (ref)); - } - } - - g_print ("**** Listing all installed apps\n"); - { - g_autoptr(GPtrArray) apps = NULL; - - apps = flatpak_installation_list_installed_refs_by_kind (installation, - FLATPAK_REF_KIND_APP, - NULL, NULL); - - for (i = 0; i < apps->len; i++) - { - FlatpakInstalledRef *app = g_ptr_array_index (apps, i); - - g_print ("%d %s %s %s %s %s %s %s %d %"G_GUINT64_FORMAT "\n", - flatpak_ref_get_kind (FLATPAK_REF (app)), - flatpak_ref_get_name (FLATPAK_REF (app)), - flatpak_ref_get_arch (FLATPAK_REF (app)), - flatpak_ref_get_branch (FLATPAK_REF (app)), - flatpak_ref_get_commit (FLATPAK_REF (app)), - flatpak_installed_ref_get_latest_commit (app), - flatpak_installed_ref_get_origin (app), - flatpak_installed_ref_get_deploy_dir (app), - flatpak_installed_ref_get_is_current (app), - flatpak_installed_ref_get_installed_size (app)); - g_print ("metadata:\n%s\n", (char *) g_bytes_get_data (flatpak_installed_ref_load_metadata (app, NULL, NULL), NULL)); - } - } - - g_print ("\n**** Listing all installed runtimes\n"); - { - g_autoptr(GPtrArray) runtimes = NULL; - - runtimes = flatpak_installation_list_installed_refs_by_kind (installation, - FLATPAK_REF_KIND_RUNTIME, - NULL, NULL); - - for (i = 0; i < runtimes->len; i++) - { - FlatpakInstalledRef *runtime = g_ptr_array_index (runtimes, i); - g_print ("%d %s %s %s %s %s %s %d\n", - flatpak_ref_get_kind (FLATPAK_REF (runtime)), - flatpak_ref_get_name (FLATPAK_REF (runtime)), - flatpak_ref_get_arch (FLATPAK_REF (runtime)), - flatpak_ref_get_branch (FLATPAK_REF (runtime)), - flatpak_ref_get_commit (FLATPAK_REF (runtime)), - flatpak_installed_ref_get_origin (runtime), - flatpak_installed_ref_get_deploy_dir (runtime), - flatpak_installed_ref_get_is_current (runtime)); - } - } - - g_print ("\n**** Getting installed gedit master\n"); - app1 = flatpak_installation_get_installed_ref (installation, - FLATPAK_REF_KIND_APP, - "org.gnome.gedit", - NULL, "master", NULL, NULL); - if (app1) - { - g_print ("gedit master: %d %s %s %s %s %s %s %d\n", - flatpak_ref_get_kind (FLATPAK_REF (app1)), - flatpak_ref_get_name (FLATPAK_REF (app1)), - flatpak_ref_get_arch (FLATPAK_REF (app1)), - flatpak_ref_get_branch (FLATPAK_REF (app1)), - flatpak_ref_get_commit (FLATPAK_REF (app1)), - flatpak_installed_ref_get_origin (app1), - flatpak_installed_ref_get_deploy_dir (app1), - flatpak_installed_ref_get_is_current (app1)); - } - if (!flatpak_installation_launch (installation, - "org.gnome.gedit", - NULL, NULL, NULL, - NULL, &error)) - { - g_print ("launch gedit error: %s\n", error->message); - g_clear_error (&error); - } - - g_print ("\n**** Getting current installed gedit\n"); - app2 = flatpak_installation_get_current_installed_app (installation, - "org.gnome.gedit", - NULL, NULL); - if (app2) - { - g_print ("gedit current: %d %s %s %s %s %s %s %d\n", - flatpak_ref_get_kind (FLATPAK_REF (app2)), - flatpak_ref_get_name (FLATPAK_REF (app2)), - flatpak_ref_get_arch (FLATPAK_REF (app2)), - flatpak_ref_get_branch (FLATPAK_REF (app2)), - flatpak_ref_get_commit (FLATPAK_REF (app2)), - flatpak_installed_ref_get_origin (app2), - flatpak_installed_ref_get_deploy_dir (app2), - flatpak_installed_ref_get_is_current (app2)); - } - - - g_print ("\n**** Listing remotes\n"); - remotes = flatpak_installation_list_remotes (installation, - NULL, NULL); - - for (i = 0; i < remotes->len; i++) - { - FlatpakRemote *remote = g_ptr_array_index (remotes, i); - g_autoptr(GPtrArray) refs = NULL; - const char *collection_id = NULL; - -#ifdef FLATPAK_ENABLE_P2P - collection_id = flatpak_remote_get_collection_id (remote); -#endif /* !FLATPAK_ENABLE_P2P */ - - g_print ("\nRemote: %s %u %d %s %s %s %s %d %d %s\n", - flatpak_remote_get_name (remote), - flatpak_remote_get_remote_type (remote), - flatpak_remote_get_prio (remote), - flatpak_remote_get_url (remote), - collection_id, - flatpak_remote_get_title (remote), - flatpak_remote_get_default_branch (remote), - flatpak_remote_get_gpg_verify (remote), - flatpak_remote_get_noenumerate (remote), - g_file_get_path (flatpak_remote_get_appstream_dir (remote, NULL))); - - g_print ("\n**** Listing remote refs on %s\n", flatpak_remote_get_name (remote)); - refs = flatpak_installation_list_remote_refs_sync (installation, flatpak_remote_get_name (remote), - NULL, NULL); - if (refs) - { - for (j = 0; j < refs->len; j++) - { - FlatpakRemoteRef *ref = g_ptr_array_index (refs, j); - g_print ("%d %s %s %s %s %s\n", - flatpak_ref_get_kind (FLATPAK_REF (ref)), - flatpak_ref_get_name (FLATPAK_REF (ref)), - flatpak_ref_get_arch (FLATPAK_REF (ref)), - flatpak_ref_get_branch (FLATPAK_REF (ref)), - flatpak_ref_get_commit (FLATPAK_REF (ref)), - flatpak_remote_ref_get_remote_name (ref)); - - if (j == 0) - { - guint64 download_size; - guint64 installed_size; - - if (!flatpak_installation_fetch_remote_size_sync (installation, - flatpak_remote_get_name (remote), - FLATPAK_REF (ref), - &download_size, - &installed_size, - NULL, &error)) - { - g_print ("error fetching sizes: %s\n", error->message); - g_clear_error (&error); - } - else - { - g_print ("Download size: %"G_GUINT64_FORMAT " Installed size: %"G_GUINT64_FORMAT "\n", - download_size, installed_size); - } - - } - } - } - - g_print ("\n**** Getting remote platform 3.20 on %s\n", flatpak_remote_get_name (remote)); - error = NULL; - remote_ref = flatpak_installation_fetch_remote_ref_sync (installation, flatpak_remote_get_name (remote), - FLATPAK_REF_KIND_RUNTIME, - "org.gnome.Platform", NULL, "3.20", - NULL, &error); - if (remote_ref) - { - GBytes *metadata; - - g_print ("%d %s %s %s %s %s\n", - flatpak_ref_get_kind (FLATPAK_REF (remote_ref)), - flatpak_ref_get_name (FLATPAK_REF (remote_ref)), - flatpak_ref_get_arch (FLATPAK_REF (remote_ref)), - flatpak_ref_get_branch (FLATPAK_REF (remote_ref)), - flatpak_ref_get_commit (FLATPAK_REF (remote_ref)), - flatpak_remote_ref_get_remote_name (remote_ref)); - - metadata = flatpak_installation_fetch_remote_metadata_sync (installation, flatpak_remote_get_name (remote), - FLATPAK_REF (remote_ref), NULL, &error); - if (metadata) - { - g_print ("metadata: %s\n", (char *) g_bytes_get_data (metadata, NULL)); - } - else - { - g_print ("fetch error\n"); - g_print ("error: %s\n", error->message); - g_clear_error (&error); - } - } - else - { - g_print ("error: %s\n", error->message); - g_clear_error (&error); - } - } - return 0; -} diff -Nru flatpak-0.11.3/libglnx/glnx-backport-autocleanups.h flatpak-1.0.7/libglnx/glnx-backport-autocleanups.h --- flatpak-0.11.3/libglnx/glnx-backport-autocleanups.h 2016-03-31 10:23:27.000000000 +0000 +++ flatpak-1.0.7/libglnx/glnx-backport-autocleanups.h 2018-06-27 12:48:56.000000000 +0000 @@ -82,6 +82,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSubprocessLauncher, g_object_unref) /* Add GObject-based types as needed. */ +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GAsyncResult, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GCancellable, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GConverter, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GConverterOutputStream, g_object_unref) @@ -96,6 +97,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GInputStream, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMemoryInputStream, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMemoryOutputStream, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GMount, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GOutputStream, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSocket, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GSocketAddress, g_object_unref) @@ -105,6 +107,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GTlsInteraction, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDBusConnection, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GDBusMessage, g_object_unref) +G_DEFINE_AUTOPTR_CLEANUP_FUNC(GVolumeMonitor, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GZlibCompressor, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC(GZlibDecompressor, g_object_unref) diff -Nru flatpak-0.11.3/libglnx/glnx-console.c flatpak-1.0.7/libglnx/glnx-console.c --- flatpak-0.11.3/libglnx/glnx-console.c 2018-02-19 10:32:51.000000000 +0000 +++ flatpak-1.0.7/libglnx/glnx-console.c 2018-06-27 12:48:56.000000000 +0000 @@ -168,7 +168,7 @@ g_once_init_leave (&sigwinch_initialized, 1); } - { static const char initbuf[] = { '\n', 0x1B, 0x37 }; + { static const char initbuf[] = { 0x1B, 0x37 }; (void) fwrite (initbuf, 1, sizeof (initbuf), stdout); } } diff -Nru flatpak-0.11.3/libglnx/glnx-missing-syscall.h flatpak-1.0.7/libglnx/glnx-missing-syscall.h --- flatpak-0.11.3/libglnx/glnx-missing-syscall.h 2018-02-19 10:32:51.000000000 +0000 +++ flatpak-1.0.7/libglnx/glnx-missing-syscall.h 2018-06-27 12:48:56.000000000 +0000 @@ -140,10 +140,10 @@ # endif # endif -static inline ssize_t copy_file_range(int fd_in, loff_t *off_in, - int fd_out, loff_t *off_out, - size_t len, - unsigned int flags) { +static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in, + int fd_out, loff_t *off_out, + size_t len, + unsigned int flags) { # ifdef __NR_copy_file_range return syscall(__NR_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags); # else @@ -151,4 +151,6 @@ return -1; # endif } + +# define copy_file_range missing_copy_file_range #endif diff -Nru flatpak-0.11.3/libglnx/libglnx.m4 flatpak-1.0.7/libglnx/libglnx.m4 --- flatpak-0.11.3/libglnx/libglnx.m4 2018-02-19 10:32:51.000000000 +0000 +++ flatpak-1.0.7/libglnx/libglnx.m4 2018-08-08 09:11:29.000000000 +0000 @@ -7,6 +7,7 @@ [], [], [[ #include #include +#include #include #include #include diff -Nru flatpak-0.11.3/ltmain.sh flatpak-1.0.7/ltmain.sh --- flatpak-0.11.3/ltmain.sh 2018-02-19 10:32:59.000000000 +0000 +++ flatpak-1.0.7/ltmain.sh 2019-02-10 17:12:16.000000000 +0000 @@ -2124,7 +2124,7 @@ # a configuration failure hint, and exit. func_fatal_configuration () { - func__fatal_error ${1+"$@"} \ + func_fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } @@ -7272,10 +7272,12 @@ # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ + -specs=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" diff -Nru flatpak-0.11.3/m4/gtk-doc.m4 flatpak-1.0.7/m4/gtk-doc.m4 --- flatpak-0.11.3/m4/gtk-doc.m4 2017-08-30 06:33:23.000000000 +0000 +++ flatpak-1.0.7/m4/gtk-doc.m4 2019-02-10 16:40:29.000000000 +0000 @@ -1,4 +1,29 @@ -dnl -*- mode: autoconf -*- +# -*- mode: autoconf -*- +# +# gtk-doc.m4 - configure macro to check for gtk-doc +# Copyright (C) 2003 James Henstridge +# 2007-2017 Stefan Sauer +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# As a special exception, the above copyright owner gives unlimited +# permission to copy, distribute and modify the configure scripts that +# are the output of Autoconf when processing the Macro. You need not +# follow the terms of the GNU General Public License when using or +# distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. # serial 2 diff -Nru flatpak-0.11.3/Makefile.am flatpak-1.0.7/Makefile.am --- flatpak-0.11.3/Makefile.am 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/Makefile.am 2019-02-11 12:42:20.000000000 +0000 @@ -46,13 +46,10 @@ -DFLATPAK_TRIGGERDIR=\"$(pkgdatadir)/triggers\" \ -DSYSTEM_FONTS_DIR=\"$(SYSTEM_FONTS_DIR)\" \ -DSYSTEM_FONT_CACHE_DIRS=\"$(SYSTEM_FONT_CACHE_DIRS)\" \ - -DDBUSPROXY=\"$(libexecdir)/flatpak-dbus-proxy\" \ -DG_LOG_DOMAIN=\"flatpak\" \ -I$(srcdir)/libglnx \ -I$(srcdir)/common \ -I$(builddir)/common \ - -I$(srcdir)/lib \ - -I$(builddir)/lib \ -include "config.h" \ $(NULL) @@ -64,6 +61,12 @@ AM_CPPFLAGS += -DHELPER=\"$(libexecdir)/flatpak-bwrap\" endif +if WITH_SYSTEM_DBUS_PROXY +AM_CPPFLAGS += -DDBUSPROXY=\"$(DBUS_PROXY)\" +else +AM_CPPFLAGS += -DDBUSPROXY=\"$(libexecdir)/flatpak-dbus-proxy\" +endif + triggersdir = $(pkgdatadir)/triggers dist_triggers_SCRIPTS = \ triggers/gtk-icon-cache.trigger \ @@ -90,18 +93,29 @@ include common/Makefile.am.inc include data/Makefile.am.inc include app/Makefile.am.inc -include lib/Makefile.am.inc include session-helper/Makefile.am.inc +include portal/Makefile.am.inc include system-helper/Makefile.am.inc -include dbus-proxy/Makefile.am.inc include tests/Makefile.am.inc +if !WITH_SYSTEM_DBUS_PROXY +libexec_PROGRAMS+=flatpak-dbus-proxy +flatpak_dbus_proxy_SOURCES = \ + dbus-proxy/flatpak-proxy.c \ + dbus-proxy/flatpak-proxy.h \ + dbus-proxy/dbus-proxy.c \ + dbus-proxy/backport-autoptr.h \ + $(NULL) +flatpak_dbus_proxy_LDADD = $(AM_LDADD) $(BASE_LIBS) +flatpak_dbus_proxy_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) +endif + if !WITH_SYSTEM_BWRAP bwrap_PROGRAMS = flatpak-bwrap flatpak_bwrap_SOURCES = $(bwrap_SOURCES) flatpak_bwrap_CFLAGS = $(AM_CFLAGS) $(bwrap_CFLAGS) -flatpak_bwrap_LDADD = $(AM_LDADD) $(bwrap_LDADD) +flatpak_bwrap_LDADD = $(AM_LDADD) $(bwrap_LDADD) $(CAP_LIB) bwrapdir = $(libexecdir) include bubblewrap/Makefile-bwrap.am.inc @@ -117,9 +131,13 @@ endif # !PRIV_MODE_SETUID endif # !WITH_SYSTEM_BWRAP -completiondir = $(datadir)/bash-completion/completions -completion_DATA = completion/flatpak -EXTRA_DIST += $(completion_DATA) +bashcompletiondir = $(datadir)/bash-completion/completions +bashcompletion_DATA = completion/flatpak +EXTRA_DIST += $(bashcompletion_DATA) + +zshcompletiondir = $(datadir)/zsh/site-functions +zshcompletion_DATA = completion/_flatpak +EXTRA_DIST += $(zshcompletion_DATA) profiledir = $(PROFILE_DIR) profile_DATA = flatpak.sh @@ -155,11 +173,13 @@ EXTRA_DIST += flatpak.pc.in scriptsdir = $(bindir) -scripts_SCRIPTS = scripts/flatpak-bisect -EXTRA_DIST += scripts/flatpak-bisect +scripts_SCRIPTS = scripts/flatpak-bisect scripts/flatpak-coredumpctl +EXTRA_DIST += scripts/flatpak-bisect scripts/flatpak-coredumpctl EXTRA_DIST += README.md +EXTRA_DIST += flatpak.png + AM_DISTCHECK_CONFIGURE_FLAGS = \ --enable-documentation \ --disable-maintainer-mode \ diff -Nru flatpak-0.11.3/Makefile.in flatpak-1.0.7/Makefile.in --- flatpak-0.11.3/Makefile.in 2018-02-19 13:20:06.000000000 +0000 +++ flatpak-1.0.7/Makefile.in 2019-02-11 12:42:26.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -112,14 +112,15 @@ build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = $(am__EXEEXT_1) flatpak$(EXEEXT) $(am__EXEEXT_1) -noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_8) \ +noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_10) \ test-libflatpak$(EXEEXT) libexec_PROGRAMS = $(am__EXEEXT_1) flatpak-session-helper$(EXEEXT) \ - $(am__EXEEXT_1) $(am__EXEEXT_7) flatpak-dbus-proxy$(EXEEXT) \ - $(am__EXEEXT_1) -TESTS = $(am__EXEEXT_2) $(am__EXEEXT_9) $(am__EXEEXT_5) -installed_test_PROGRAMS = $(am__EXEEXT_6) -check_PROGRAMS = $(am__EXEEXT_4) $(am__EXEEXT_5) + $(am__EXEEXT_1) flatpak-portal$(EXEEXT) $(am__EXEEXT_1) \ + $(am__EXEEXT_8) $(am__EXEEXT_9) +TESTS = $(am__EXEEXT_2) $(am__EXEEXT_12) $(am__EXEEXT_14) \ + $(am__EXEEXT_6) +installed_test_PROGRAMS = $(am__EXEEXT_7) +check_PROGRAMS = $(am__EXEEXT_5) $(am__EXEEXT_6) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_1 = $(all_test_ltlibs) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_2 = $(all_test_programs) @ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__append_3 = $(all_test_scripts) @@ -148,18 +149,21 @@ @BUILD_DOCUMENTATION_TRUE@am__append_14 = . doc @WITH_SYSTEM_BWRAP_TRUE@am__append_15 = -DHELPER=\"$(BWRAP)\" @WITH_SYSTEM_BWRAP_FALSE@am__append_16 = -DHELPER=\"$(libexecdir)/flatpak-bwrap\" -@HAVE_INTROSPECTION_TRUE@am__append_17 = Flatpak-1.0.gir -@HAVE_INTROSPECTION_TRUE@am__append_18 = $(nodist_gir_DATA) \ +@WITH_SYSTEM_DBUS_PROXY_TRUE@am__append_17 = -DDBUSPROXY=\"$(DBUS_PROXY)\" +@WITH_SYSTEM_DBUS_PROXY_FALSE@am__append_18 = -DDBUSPROXY=\"$(libexecdir)/flatpak-dbus-proxy\" +@HAVE_INTROSPECTION_TRUE@am__append_19 = Flatpak-1.0.gir +@HAVE_INTROSPECTION_TRUE@am__append_20 = $(nodist_gir_DATA) \ @HAVE_INTROSPECTION_TRUE@ $(nodist_typelib_DATA) -@BUILD_SYSTEM_HELPER_TRUE@am__append_19 = \ +@BUILD_SYSTEM_HELPER_TRUE@am__append_21 = \ @BUILD_SYSTEM_HELPER_TRUE@ flatpak-system-helper \ @BUILD_SYSTEM_HELPER_TRUE@ $(NULL) -@BUILD_SYSTEM_HELPER_TRUE@am__append_20 = system-helper/org.freedesktop.Flatpak.SystemHelper.service.in \ +@BUILD_SYSTEM_HELPER_TRUE@am__append_22 = system-helper/org.freedesktop.Flatpak.SystemHelper.service.in \ @BUILD_SYSTEM_HELPER_TRUE@ system-helper/flatpak-system-helper.service.in -@BUILD_SYSTEM_HELPER_TRUE@am__append_21 = system-helper/org.freedesktop.Flatpak.policy system-helper/org.freedesktop.Flatpak.rules system-helper/flatpak-system-helper.service system-helper/org.freedesktop.Flatpak.SystemHelper.service -@WITH_SYSTEM_BWRAP_TRUE@am__append_22 = FLATPAK_BWRAP=$(BWRAP) -@WITH_SYSTEM_BWRAP_FALSE@am__append_23 = FLATPAK_BWRAP=$$(cd $(top_builddir) && pwd)/flatpak-bwrap +@BUILD_SYSTEM_HELPER_TRUE@am__append_23 = system-helper/org.freedesktop.Flatpak.policy system-helper/org.freedesktop.Flatpak.rules system-helper/flatpak-system-helper.service system-helper/org.freedesktop.Flatpak.SystemHelper.service +@WITH_SYSTEM_BWRAP_TRUE@am__append_24 = FLATPAK_BWRAP=$(BWRAP) +@WITH_SYSTEM_BWRAP_FALSE@am__append_25 = FLATPAK_BWRAP=$$(cd $(top_builddir) && pwd)/flatpak-bwrap +@WITH_SYSTEM_DBUS_PROXY_FALSE@am__append_26 = flatpak-dbus-proxy @WITH_SYSTEM_BWRAP_FALSE@bwrap_PROGRAMS = flatpak-bwrap$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -186,8 +190,47 @@ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = flatpak.pc lib/flatpak-version-macros.h +CONFIG_CLEAN_FILES = flatpak.pc common/flatpak-version-macros.h CONFIG_CLEAN_VPATH_FILES = +am__EXEEXT_1 = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bwrapdir)" \ + "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libexecdir)" \ + "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(triggersdir)" "$(DESTDIR)$(installed_testdir)" \ + "$(DESTDIR)$(scriptsdir)" "$(DESTDIR)$(bashcompletiondir)" \ + "$(DESTDIR)$(dbus_servicedir)" "$(DESTDIR)$(dbussnippetdir)" \ + "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(dbusconfdir)" \ + "$(DESTDIR)$(installed_test_keyringdir)" \ + "$(DESTDIR)$(installed_test_keyring2dir)" \ + "$(DESTDIR)$(envdir)" "$(DESTDIR)$(installed_testdir)" \ + "$(DESTDIR)$(installed_test_metadir)" \ + "$(DESTDIR)$(introspectiondir)" \ + "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(girdir)" \ + "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgconfigdir)" \ + "$(DESTDIR)$(polkit_policydir)" "$(DESTDIR)$(polkit_rulesdir)" \ + "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(systemdsystemunitdir)" \ + "$(DESTDIR)$(systemduserunitdir)" \ + "$(DESTDIR)$(zshcompletiondir)" \ + "$(DESTDIR)$(flatpakincludedir)" \ + "$(DESTDIR)$(flatpakincludedir)" +am__EXEEXT_2 = testlibrary$(EXEEXT) +am__EXEEXT_3 = tests/httpcache$(EXEEXT) +am__EXEEXT_4 = $(am__EXEEXT_2) $(am__EXEEXT_3) +@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_5 = $(am__EXEEXT_4) +am__EXEEXT_6 = test-libglnx-xattrs$(EXEEXT) test-libglnx-fdio$(EXEEXT) \ + test-libglnx-errors$(EXEEXT) test-libglnx-macros$(EXEEXT) \ + test-libglnx-shutil$(EXEEXT) +@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_7 = $(am__EXEEXT_2) \ +@ENABLE_INSTALLED_TESTS_TRUE@ $(am__EXEEXT_3) +@BUILD_SYSTEM_HELPER_TRUE@am__EXEEXT_8 = \ +@BUILD_SYSTEM_HELPER_TRUE@ flatpak-system-helper$(EXEEXT) \ +@BUILD_SYSTEM_HELPER_TRUE@ $(am__EXEEXT_1) +@WITH_SYSTEM_DBUS_PROXY_FALSE@am__EXEEXT_9 = \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ flatpak-dbus-proxy$(EXEEXT) +@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_10 = $(am__EXEEXT_4) +PROGRAMS = $(bin_PROGRAMS) $(bwrap_PROGRAMS) \ + $(installed_test_PROGRAMS) $(libexec_PROGRAMS) \ + $(noinst_PROGRAMS) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -215,26 +258,6 @@ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } -am__installdirs = "$(DESTDIR)$(installed_testdir)" \ - "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(bwrapdir)" "$(DESTDIR)$(installed_testdir)" \ - "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(triggersdir)" \ - "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(scriptsdir)" \ - "$(DESTDIR)$(completiondir)" "$(DESTDIR)$(dbus_servicedir)" \ - "$(DESTDIR)$(dbussnippetdir)" \ - "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(dbusconfdir)" \ - "$(DESTDIR)$(installed_test_keyringdir)" \ - "$(DESTDIR)$(installed_test_keyring2dir)" \ - "$(DESTDIR)$(envdir)" "$(DESTDIR)$(installed_testdir)" \ - "$(DESTDIR)$(installed_test_metadir)" \ - "$(DESTDIR)$(introspectiondir)" \ - "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(girdir)" \ - "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgconfigdir)" \ - "$(DESTDIR)$(polkit_policydir)" "$(DESTDIR)$(polkit_rulesdir)" \ - "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(systemdsystemunitdir)" \ - "$(DESTDIR)$(systemduserunitdir)" \ - "$(DESTDIR)$(flatpakincludedir)" \ - "$(DESTDIR)$(flatpakincludedir)" LTLIBRARIES = $(installed_test_LTLIBRARIES) $(lib_LTLIBRARIES) \ $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = @@ -243,27 +266,41 @@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) -am__dirstamp = $(am__leading_dot)dirstamp am__objects_1 = -am_libflatpak_common_la_OBJECTS = \ +am__objects_2 = $(am__objects_1) +am__dirstamp = $(am__leading_dot)dirstamp +am_libflatpak_common_la_OBJECTS = $(am__objects_2) \ common/libflatpak_common_la-flatpak-bwrap.lo \ common/libflatpak_common_la-flatpak-dir.lo \ common/libflatpak_common_la-flatpak-run.lo \ common/libflatpak_common_la-flatpak-context.lo \ common/libflatpak_common_la-flatpak-exports.lo \ - common/libflatpak_common_la-flatpak-portal-error.lo \ + common/libflatpak_common_la-flatpak-transaction.lo \ common/libflatpak_common_la-flatpak-utils.lo \ - common/libflatpak_common_la-flatpak-table-printer.lo \ + common/libflatpak_common_la-flatpak-utils-http.lo \ common/libflatpak_common_la-flatpak-chain-input-stream.lo \ + common/libflatpak_common_la-flatpak-portal-error.lo \ common/libflatpak_common_la-flatpak-json.lo \ common/libflatpak_common_la-flatpak-json-oci.lo \ common/libflatpak_common_la-flatpak-oci-registry.lo \ + common/libflatpak_common_la-flatpak-ref.lo \ + common/libflatpak_common_la-flatpak-installed-ref.lo \ + common/libflatpak_common_la-flatpak-remote-ref.lo \ + common/libflatpak_common_la-flatpak-bundle-ref.lo \ + common/libflatpak_common_la-flatpak-related-ref.lo \ + common/libflatpak_common_la-flatpak-remote.lo \ + common/libflatpak_common_la-flatpak-error.lo \ + common/libflatpak_common_la-flatpak-installation.lo \ + common/libflatpak_common_la-flatpak-instance.lo \ $(am__objects_1) -am__objects_2 = common/libflatpak_common_la-flatpak-dbus.lo \ - common/libflatpak_common_la-flatpak-document-dbus.lo -am__objects_3 = common/libflatpak_common_la-flatpak-systemd-dbus.lo +am__objects_3 = common/libflatpak_common_la-flatpak-dbus-generated.lo \ + common/libflatpak_common_la-flatpak-document-dbus-generated.lo +am__objects_4 = \ + common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo nodist_libflatpak_common_la_OBJECTS = $(am__objects_2) \ - $(am__objects_3) $(am__objects_1) + $(am__objects_3) $(am__objects_4) \ + common/libflatpak_common_la-flatpak-enum-types.lo \ + $(am__objects_1) libflatpak_common_la_OBJECTS = $(am_libflatpak_common_la_OBJECTS) \ $(nodist_libflatpak_common_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) @@ -278,60 +315,32 @@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) -am_libflatpak_la_OBJECTS = lib/libflatpak_la-flatpak.lo \ - lib/libflatpak_la-flatpak-ref.lo \ - lib/libflatpak_la-flatpak-installed-ref.lo \ - lib/libflatpak_la-flatpak-remote-ref.lo \ - lib/libflatpak_la-flatpak-bundle-ref.lo \ - lib/libflatpak_la-flatpak-related-ref.lo \ - lib/libflatpak_la-flatpak-remote.lo \ - lib/libflatpak_la-flatpak-error.lo \ - lib/libflatpak_la-flatpak-installation.lo $(am__objects_1) -nodist_libflatpak_la_OBJECTS = \ - lib/libflatpak_la-flatpak-enum-types.lo $(am__objects_1) -libflatpak_la_OBJECTS = $(am_libflatpak_la_OBJECTS) \ - $(nodist_libflatpak_la_OBJECTS) +am_libflatpak_la_OBJECTS = common/libflatpak_la-flatpak.lo \ + $(am__objects_1) +libflatpak_la_OBJECTS = $(am_libflatpak_la_OBJECTS) libflatpak_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libflatpak_la_CFLAGS) \ $(CFLAGS) $(libflatpak_la_LDFLAGS) $(LDFLAGS) -o $@ am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) libglnx_la_DEPENDENCIES = $(am__DEPENDENCIES_3) -am_libglnx_la_OBJECTS = libglnx/libglnx_la-glnx-backports.lo \ - libglnx/libglnx_la-glnx-local-alloc.lo \ - libglnx/libglnx_la-glnx-errors.lo \ - libglnx/libglnx_la-glnx-console.lo \ - libglnx/libglnx_la-glnx-dirfd.lo \ - libglnx/libglnx_la-glnx-fdio.lo \ - libglnx/libglnx_la-glnx-lockfile.lo \ - libglnx/libglnx_la-glnx-xattrs.lo \ - libglnx/libglnx_la-glnx-shutil.lo $(am__objects_1) +am_libglnx_la_OBJECTS = libglnx/la-glnx-backports.lo \ + libglnx/la-glnx-local-alloc.lo libglnx/la-glnx-errors.lo \ + libglnx/la-glnx-console.lo libglnx/la-glnx-dirfd.lo \ + libglnx/la-glnx-fdio.lo libglnx/la-glnx-lockfile.lo \ + libglnx/la-glnx-xattrs.lo libglnx/la-glnx-shutil.lo \ + $(am__objects_1) libglnx_la_OBJECTS = $(am_libglnx_la_OBJECTS) libglnx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libglnx_la_CFLAGS) \ $(CFLAGS) $(libglnx_la_LDFLAGS) $(LDFLAGS) -o $@ -am__EXEEXT_1 = -am__EXEEXT_2 = testlibrary$(EXEEXT) -am__EXEEXT_3 = $(am__EXEEXT_2) -@ENABLE_ALWAYS_BUILD_TESTS_FALSE@am__EXEEXT_4 = $(am__EXEEXT_3) -am__EXEEXT_5 = test-libglnx-xattrs$(EXEEXT) test-libglnx-fdio$(EXEEXT) \ - test-libglnx-errors$(EXEEXT) test-libglnx-macros$(EXEEXT) \ - test-libglnx-shutil$(EXEEXT) -@ENABLE_INSTALLED_TESTS_TRUE@am__EXEEXT_6 = $(am__EXEEXT_2) -@BUILD_SYSTEM_HELPER_TRUE@am__EXEEXT_7 = \ -@BUILD_SYSTEM_HELPER_TRUE@ flatpak-system-helper$(EXEEXT) \ -@BUILD_SYSTEM_HELPER_TRUE@ $(am__EXEEXT_1) -@ENABLE_ALWAYS_BUILD_TESTS_TRUE@am__EXEEXT_8 = $(am__EXEEXT_3) -PROGRAMS = $(bin_PROGRAMS) $(bwrap_PROGRAMS) \ - $(installed_test_PROGRAMS) $(libexec_PROGRAMS) \ - $(noinst_PROGRAMS) am_flatpak_OBJECTS = app/flatpak-flatpak-main.$(OBJEXT) \ app/flatpak-flatpak-builtins-utils.$(OBJEXT) \ - app/flatpak-flatpak-transaction.$(OBJEXT) \ - app/flatpak-flatpak-builtins-add-remote.$(OBJEXT) \ - app/flatpak-flatpak-builtins-delete-remote.$(OBJEXT) \ - app/flatpak-flatpak-builtins-list-remotes.$(OBJEXT) \ - app/flatpak-flatpak-builtins-ls-remote.$(OBJEXT) \ - app/flatpak-flatpak-builtins-info-remote.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-add.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-modify.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-delete.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-list.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-ls.$(OBJEXT) \ + app/flatpak-flatpak-builtins-remote-info.$(OBJEXT) \ app/flatpak-flatpak-builtins-install.$(OBJEXT) \ app/flatpak-flatpak-builtins-override.$(OBJEXT) \ app/flatpak-flatpak-builtins-make-current.$(OBJEXT) \ @@ -342,6 +351,7 @@ app/flatpak-flatpak-builtins-config.$(OBJEXT) \ app/flatpak-flatpak-builtins-run.$(OBJEXT) \ app/flatpak-flatpak-builtins-enter.$(OBJEXT) \ + app/flatpak-flatpak-builtins-ps.$(OBJEXT) \ app/flatpak-flatpak-builtins-build-init.$(OBJEXT) \ app/flatpak-flatpak-builtins-build.$(OBJEXT) \ app/flatpak-flatpak-builtins-build-finish.$(OBJEXT) \ @@ -350,14 +360,27 @@ app/flatpak-flatpak-builtins-build-import-bundle.$(OBJEXT) \ app/flatpak-flatpak-builtins-build-commit-from.$(OBJEXT) \ app/flatpak-flatpak-builtins-build-sign.$(OBJEXT) \ - app/flatpak-flatpak-builtins-repo-update.$(OBJEXT) \ + app/flatpak-flatpak-builtins-build-update-repo.$(OBJEXT) \ app/flatpak-flatpak-builtins-repo.$(OBJEXT) \ app/flatpak-flatpak-builtins-document-export.$(OBJEXT) \ app/flatpak-flatpak-builtins-document-unexport.$(OBJEXT) \ app/flatpak-flatpak-builtins-document-info.$(OBJEXT) \ app/flatpak-flatpak-builtins-document-list.$(OBJEXT) \ - app/flatpak-flatpak-builtins-search.$(OBJEXT) $(am__objects_1) -flatpak_OBJECTS = $(am_flatpak_OBJECTS) + app/flatpak-flatpak-builtins-permission-remove.$(OBJEXT) \ + app/flatpak-flatpak-builtins-permission-list.$(OBJEXT) \ + app/flatpak-flatpak-builtins-permission-show.$(OBJEXT) \ + app/flatpak-flatpak-builtins-permission-reset.$(OBJEXT) \ + app/flatpak-flatpak-builtins-search.$(OBJEXT) \ + app/flatpak-flatpak-builtins-repair.$(OBJEXT) \ + app/flatpak-flatpak-builtins-create-usb.$(OBJEXT) \ + app/flatpak-flatpak-table-printer.$(OBJEXT) \ + app/flatpak-flatpak-complete.$(OBJEXT) \ + app/flatpak-flatpak-cli-transaction.$(OBJEXT) $(am__objects_1) +am__objects_5 = \ + app/flatpak-flatpak-permission-dbus-generated.$(OBJEXT) +nodist_flatpak_OBJECTS = $(am__objects_5) \ + app/flatpak-parse-datetime.$(OBJEXT) $(am__objects_1) +flatpak_OBJECTS = $(am_flatpak_OBJECTS) $(nodist_flatpak_OBJECTS) flatpak_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) libglnx.la libflatpak-common.la @@ -368,28 +391,46 @@ bubblewrap/bind-mount.h bubblewrap/bind-mount.c \ bubblewrap/network.h bubblewrap/network.c bubblewrap/utils.h \ bubblewrap/utils.c -@WITH_SYSTEM_BWRAP_FALSE@am__objects_4 = bubblewrap/flatpak_bwrap-bubblewrap.$(OBJEXT) \ +@WITH_SYSTEM_BWRAP_FALSE@am__objects_6 = bubblewrap/flatpak_bwrap-bubblewrap.$(OBJEXT) \ @WITH_SYSTEM_BWRAP_FALSE@ bubblewrap/flatpak_bwrap-bind-mount.$(OBJEXT) \ @WITH_SYSTEM_BWRAP_FALSE@ bubblewrap/flatpak_bwrap-network.$(OBJEXT) \ @WITH_SYSTEM_BWRAP_FALSE@ bubblewrap/flatpak_bwrap-utils.$(OBJEXT) \ @WITH_SYSTEM_BWRAP_FALSE@ $(am__objects_1) -@WITH_SYSTEM_BWRAP_FALSE@am_flatpak_bwrap_OBJECTS = $(am__objects_4) +@WITH_SYSTEM_BWRAP_FALSE@am_flatpak_bwrap_OBJECTS = $(am__objects_6) flatpak_bwrap_OBJECTS = $(am_flatpak_bwrap_OBJECTS) @WITH_SYSTEM_BWRAP_FALSE@flatpak_bwrap_DEPENDENCIES = \ +@WITH_SYSTEM_BWRAP_FALSE@ $(am__DEPENDENCIES_1) \ @WITH_SYSTEM_BWRAP_FALSE@ $(am__DEPENDENCIES_1) flatpak_bwrap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(flatpak_bwrap_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -am_flatpak_dbus_proxy_OBJECTS = \ - dbus-proxy/flatpak_dbus_proxy-flatpak-proxy.$(OBJEXT) \ - dbus-proxy/flatpak_dbus_proxy-dbus-proxy.$(OBJEXT) \ - $(am__objects_1) +am__flatpak_dbus_proxy_SOURCES_DIST = dbus-proxy/flatpak-proxy.c \ + dbus-proxy/flatpak-proxy.h dbus-proxy/dbus-proxy.c \ + dbus-proxy/backport-autoptr.h +@WITH_SYSTEM_DBUS_PROXY_FALSE@am_flatpak_dbus_proxy_OBJECTS = dbus-proxy/flatpak_dbus_proxy-flatpak-proxy.$(OBJEXT) \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ dbus-proxy/flatpak_dbus_proxy-dbus-proxy.$(OBJEXT) \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ $(am__objects_1) flatpak_dbus_proxy_OBJECTS = $(am_flatpak_dbus_proxy_OBJECTS) -flatpak_dbus_proxy_DEPENDENCIES = $(am__DEPENDENCIES_1) libglnx.la +@WITH_SYSTEM_DBUS_PROXY_FALSE@flatpak_dbus_proxy_DEPENDENCIES = \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ $(am__DEPENDENCIES_1) flatpak_dbus_proxy_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(flatpak_dbus_proxy_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ +am_flatpak_portal_OBJECTS = \ + portal/flatpak_portal-flatpak-portal.$(OBJEXT) \ + portal/flatpak_portal-flatpak-portal-app-info.$(OBJEXT) \ + common/flatpak_portal-flatpak-portal-error.$(OBJEXT) \ + $(am__objects_1) +nodist_flatpak_portal_OBJECTS = \ + portal/flatpak_portal-flatpak-portal-dbus.$(OBJEXT) +flatpak_portal_OBJECTS = $(am_flatpak_portal_OBJECTS) \ + $(nodist_flatpak_portal_OBJECTS) +flatpak_portal_DEPENDENCIES = $(am__DEPENDENCIES_1) +flatpak_portal_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(flatpak_portal_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ + $@ am_flatpak_session_helper_OBJECTS = session-helper/flatpak_session_helper-flatpak-session-helper.$(OBJEXT) \ $(am__objects_1) flatpak_session_helper_OBJECTS = $(am_flatpak_session_helper_OBJECTS) @@ -400,9 +441,8 @@ $(flatpak_session_helper_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ am__flatpak_system_helper_SOURCES_DIST = \ - system-helper/flatpak-system-helper.c lib/flatpak-error.c + system-helper/flatpak-system-helper.c @BUILD_SYSTEM_HELPER_TRUE@am_flatpak_system_helper_OBJECTS = system-helper/flatpak_system_helper-flatpak-system-helper.$(OBJEXT) \ -@BUILD_SYSTEM_HELPER_TRUE@ lib/flatpak_system_helper-flatpak-error.$(OBJEXT) \ @BUILD_SYSTEM_HELPER_TRUE@ $(am__objects_1) flatpak_system_helper_OBJECTS = $(am_flatpak_system_helper_OBJECTS) @BUILD_SYSTEM_HELPER_TRUE@flatpak_system_helper_DEPENDENCIES = \ @@ -415,8 +455,8 @@ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(flatpak_system_helper_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ -am_test_libflatpak_OBJECTS = lib/test_libflatpak-test-lib.$(OBJEXT) \ - $(am__objects_1) +am_test_libflatpak_OBJECTS = \ + common/test_libflatpak-test-lib.$(OBJEXT) $(am__objects_1) test_libflatpak_OBJECTS = $(am_test_libflatpak_OBJECTS) test_libflatpak_DEPENDENCIES = $(am__DEPENDENCIES_1) libflatpak.la \ $(am__DEPENDENCIES_1) @@ -462,11 +502,21 @@ $(LDFLAGS) -o $@ am_testlibrary_OBJECTS = tests/testlibrary-testlibrary.$(OBJEXT) testlibrary_OBJECTS = $(am_testlibrary_OBJECTS) -testlibrary_DEPENDENCIES = $(am__DEPENDENCIES_1) libglnx.la \ - libflatpak.la $(am__DEPENDENCIES_1) +testlibrary_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + libglnx.la libflatpak.la $(am__DEPENDENCIES_1) testlibrary_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(testlibrary_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +tests_httpcache_SOURCES = tests/httpcache.c +tests_httpcache_OBJECTS = tests/httpcache-httpcache.$(OBJEXT) +tests_httpcache_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) libglnx.la \ + libflatpak-common.la +tests_httpcache_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(tests_httpcache_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ + -o $@ SCRIPTS = $(dist_triggers_SCRIPTS) $(installed_test_SCRIPTS) \ $(noinst_SCRIPTS) $(scripts_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) @@ -483,7 +533,109 @@ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles +am__maybe_remake_depfiles = depfiles +am__depfiles_remade = \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-bundle.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-commit-from.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-export.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-finish.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-import-bundle.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-sign.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-build.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-config.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-document-export.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-document-info.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-document-list.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-document-unexport.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-enter.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-info.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-install.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-list.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-make-current.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-override.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-run.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-uninstall.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-update.Po \ + app/$(DEPDIR)/flatpak-flatpak-builtins-utils.Po \ + app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po \ + app/$(DEPDIR)/flatpak-flatpak-complete.Po \ + app/$(DEPDIR)/flatpak-flatpak-main.Po \ + app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po \ + app/$(DEPDIR)/flatpak-flatpak-table-printer.Po \ + app/$(DEPDIR)/flatpak-parse-datetime.Po \ + bubblewrap/$(DEPDIR)/flatpak_bwrap-bind-mount.Po \ + bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po \ + bubblewrap/$(DEPDIR)/flatpak_bwrap-network.Po \ + bubblewrap/$(DEPDIR)/flatpak_bwrap-utils.Po \ + common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-bwrap.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-context.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-dir.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-exports.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-json-oci.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-oci-registry.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-run.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Plo \ + common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Plo \ + common/$(DEPDIR)/libflatpak_la-flatpak.Plo \ + common/$(DEPDIR)/test_libflatpak-test-lib.Po \ + dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-dbus-proxy.Po \ + dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-flatpak-proxy.Po \ + libglnx/$(DEPDIR)/la-glnx-backports.Plo \ + libglnx/$(DEPDIR)/la-glnx-console.Plo \ + libglnx/$(DEPDIR)/la-glnx-dirfd.Plo \ + libglnx/$(DEPDIR)/la-glnx-errors.Plo \ + libglnx/$(DEPDIR)/la-glnx-fdio.Plo \ + libglnx/$(DEPDIR)/la-glnx-local-alloc.Plo \ + libglnx/$(DEPDIR)/la-glnx-lockfile.Plo \ + libglnx/$(DEPDIR)/la-glnx-shutil.Plo \ + libglnx/$(DEPDIR)/la-glnx-xattrs.Plo \ + libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Po \ + libglnx/tests/$(DEPDIR)/test_libglnx_fdio-test-libglnx-fdio.Po \ + libglnx/tests/$(DEPDIR)/test_libglnx_macros-test-libglnx-macros.Po \ + libglnx/tests/$(DEPDIR)/test_libglnx_shutil-test-libglnx-shutil.Po \ + libglnx/tests/$(DEPDIR)/test_libglnx_xattrs-test-libglnx-xattrs.Po \ + portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po \ + portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po \ + portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po \ + session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po \ + system-helper/$(DEPDIR)/flatpak_system_helper-flatpak-system-helper.Po \ + tests/$(DEPDIR)/httpcache-httpcache.Po \ + tests/$(DEPDIR)/testlibrary-testlibrary.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -505,24 +657,26 @@ am__v_CCLD_1 = SOURCES = $(libflatpak_common_la_SOURCES) \ $(nodist_libflatpak_common_la_SOURCES) \ - $(libflatpak_la_SOURCES) $(nodist_libflatpak_la_SOURCES) \ - $(libglnx_la_SOURCES) $(flatpak_SOURCES) \ + $(libflatpak_la_SOURCES) $(libglnx_la_SOURCES) \ + $(flatpak_SOURCES) $(nodist_flatpak_SOURCES) \ $(flatpak_bwrap_SOURCES) $(flatpak_dbus_proxy_SOURCES) \ + $(flatpak_portal_SOURCES) $(nodist_flatpak_portal_SOURCES) \ $(flatpak_session_helper_SOURCES) \ $(flatpak_system_helper_SOURCES) $(test_libflatpak_SOURCES) \ $(test_libglnx_errors_SOURCES) $(test_libglnx_fdio_SOURCES) \ $(test_libglnx_macros_SOURCES) $(test_libglnx_shutil_SOURCES) \ - $(test_libglnx_xattrs_SOURCES) $(testlibrary_SOURCES) + $(test_libglnx_xattrs_SOURCES) $(testlibrary_SOURCES) \ + tests/httpcache.c DIST_SOURCES = $(libflatpak_common_la_SOURCES) \ $(libflatpak_la_SOURCES) $(libglnx_la_SOURCES) \ $(flatpak_SOURCES) $(am__flatpak_bwrap_SOURCES_DIST) \ - $(flatpak_dbus_proxy_SOURCES) \ - $(flatpak_session_helper_SOURCES) \ + $(am__flatpak_dbus_proxy_SOURCES_DIST) \ + $(flatpak_portal_SOURCES) $(flatpak_session_helper_SOURCES) \ $(am__flatpak_system_helper_SOURCES_DIST) \ $(test_libflatpak_SOURCES) $(test_libglnx_errors_SOURCES) \ $(test_libglnx_fdio_SOURCES) $(test_libglnx_macros_SOURCES) \ $(test_libglnx_shutil_SOURCES) $(test_libglnx_xattrs_SOURCES) \ - $(testlibrary_SOURCES) + $(testlibrary_SOURCES) tests/httpcache.c RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ @@ -543,7 +697,7 @@ am__dist_installed_test_keyring2_DATA_DIST = \ tests/test-keyring2/README tests/test-keyring2/pubring.gpg \ tests/test-keyring2/secring.gpg -DATA = $(completion_DATA) $(dbus_service_DATA) $(dbussnippet_DATA) \ +DATA = $(bashcompletion_DATA) $(dbus_service_DATA) $(dbussnippet_DATA) \ $(dbussystemservice_DATA) $(dist_dbusconf_DATA) \ $(dist_installed_test_keyring_DATA) \ $(dist_installed_test_keyring2_DATA) $(env_DATA) \ @@ -552,7 +706,7 @@ $(nodist_gir_DATA) $(nodist_typelib_DATA) $(noinst_DATA) \ $(pkgconfig_DATA) $(polkit_policy_DATA) $(polkit_rules_DATA) \ $(profile_DATA) $(systemdsystemunit_DATA) \ - $(systemduserunit_DATA) + $(systemduserunit_DATA) $(zshcompletion_DATA) HEADERS = $(flatpakinclude_HEADERS) $(nodist_flatpakinclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive @@ -561,7 +715,8 @@ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ - cscope check recheck distdir dist dist-all distcheck + cscope check recheck distdir distdir-am dist dist-all \ + distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, @@ -739,15 +894,21 @@ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) -am__EXEEXT_9 = tests/test-basic.sh tests/test-run.sh \ - tests/test-run-system.sh tests/test-run-deltas.sh \ - tests/test-run-system-deltas.sh tests/test-repo.sh \ - tests/test-repo-collections.sh \ - tests/test-repo-collections-server-only.sh \ - tests/test-repo-system.sh tests/test-extensions.sh \ - tests/test-bundle.sh tests/test-bundle-system.sh \ +am__EXEEXT_11 = tests/test-run@user,nodeltas.wrap \ + tests/test-run@user,deltas.wrap \ + tests/test-run@system,nodeltas.wrap \ + tests/test-run@system,deltas.wrap tests/test-repo@user.wrap \ + tests/test-repo@system.wrap tests/test-repo@collections.wrap \ + tests/test-repo@collections-server-only.wrap \ + tests/test-bundle@user.wrap tests/test-bundle@system.wrap \ + tests/test-oci-registry@user.wrap \ + tests/test-oci-registry@system.wrap $(am__EXEEXT_1) +am__EXEEXT_12 = $(am__EXEEXT_11) +am__EXEEXT_13 = tests/test-basic.sh tests/test-build-update-repo.sh \ + tests/test-http-utils.sh tests/test-extensions.sh \ tests/test-oci.sh tests/test-unsigned-summaries.sh \ tests/test-update-remote-configuration.sh $(am__EXEEXT_1) +am__EXEEXT_14 = $(am__EXEEXT_13) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) @@ -771,15 +932,15 @@ am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/app/Makefile.am.inc \ $(srcdir)/bubblewrap/Makefile-bwrap.am.inc \ $(srcdir)/common/Makefile.am.inc $(srcdir)/config.h.in \ - $(srcdir)/data/Makefile.am.inc \ - $(srcdir)/dbus-proxy/Makefile.am.inc $(srcdir)/flatpak.pc.in \ - $(srcdir)/lib/Makefile.am.inc \ + $(srcdir)/data/Makefile.am.inc $(srcdir)/flatpak.pc.in \ $(srcdir)/libglnx/Makefile-libglnx.am.inc \ + $(srcdir)/portal/Makefile.am.inc \ $(srcdir)/session-helper/Makefile.am.inc \ $(srcdir)/system-helper/Makefile.am.inc \ + $(srcdir)/tests/Makefile-test-matrix.am.inc \ $(srcdir)/tests/Makefile.am.inc \ $(top_srcdir)/buildutil/glib-tap.mk \ - $(top_srcdir)/lib/flatpak-version-macros.h.in ABOUT-NLS \ + $(top_srcdir)/common/flatpak-version-macros.h.in ABOUT-NLS \ COPYING INSTALL NEWS compile config.guess config.rpath \ config.sub depcomp install-sh ltmain.sh missing test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -837,6 +998,7 @@ BASE_CFLAGS = @BASE_CFLAGS@ BASE_LIBS = @BASE_LIBS@ BWRAP = @BWRAP@ +CAP_LIB = @CAP_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ @@ -844,6 +1006,7 @@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DBUS_CONFIG_DIR = @DBUS_CONFIG_DIR@ +DBUS_PROXY = @DBUS_PROXY@ DBUS_SERVICE_DIR = @DBUS_SERVICE_DIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -973,6 +1136,8 @@ XMLTO_FLAGS = @XMLTO_FLAGS@ XML_CATALOG_FILE = @XML_CATALOG_FILE@ XSLTPROC = @XSLTPROC@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -1031,41 +1196,50 @@ top_srcdir = @top_srcdir@ NULL = dist_installed_test_extra_scripts = $(NULL) buildutil/tap-driver.sh \ - tests/make-test-app.sh tests/make-test-runtime.sh \ - tests/make-test-bundles.sh tests/test-webserver.sh $(NULL) + tests/http-utils-test-server.py tests/oci-registry-server.py \ + tests/oci-registry-client.py \ + tests/make-multi-collection-id-repo.sh tests/make-test-app.sh \ + tests/make-test-runtime.sh tests/make-test-bundles.sh \ + tests/test-webserver.sh tests/test-wrapper.sh $(NULL) \ + ${TEST_MATRIX_EXTRA_DIST} noinst_LTLIBRARIES = $(NULL) $(am__append_1) libglnx.la \ libflatpak-common.la CLEANFILES = $(NULL) $(am__append_13) $(dbus_service_DATA) \ $(systemduserunit_DATA) $(nodist_libflatpak_common_la_SOURCES) \ - $(am__append_18) + $(am__append_20) app/parse-datetime.c \ + $(flatpak_dbus_built_sources) $(nodist_flatpak_portal_SOURCES) MAINTAINERCLEANFILES = $(NULL) -DISTCLEANFILES = $(NULL) $(nodist_flatpakinclude_HEADERS) \ - $(nodist_libflatpak_la_SOURCES) $(NULL) $(am__append_21) \ +DISTCLEANFILES = $(NULL) $(am__append_23) \ tests/services/org.freedesktop.Flatpak.service \ tests/services/org.freedesktop.Flatpak.SystemHelper.service \ tests/package_version.txt $(NULL) flatpak.sh flatpak.env \ flatpak.conf BUILT_SOURCES = $(NULL) $(nodist_libflatpak_common_la_SOURCES) \ - $(nodist_flatpakinclude_HEADERS) \ - $(nodist_libflatpak_la_SOURCES) $(NULL) + $(flatpak_dbus_built_sources) $(nodist_flatpak_portal_SOURCES) EXTRA_DIST = buildutil/tap-driver.sh buildutil/tap-test \ $(all_dist_test_scripts) $(all_dist_test_data) \ $(service_in_files) libglnx/README.md libglnx/COPYING \ libglnx/libglnx.m4 $(NULL) \ + common/flatpak-enum-types.c.template \ + common/flatpak-enum-types.h.template \ data/org.freedesktop.portal.Documents.xml \ + data/org.freedesktop.impl.portal.PermissionStore.xml \ data/org.freedesktop.systemd1.xml \ - data/org.freedesktop.Flatpak.xml $(NULL) \ - lib/flatpak-enum-types.c.template \ - lib/flatpak-enum-types.h.template \ + data/org.freedesktop.Flatpak.xml \ + data/org.freedesktop.portal.Flatpak.xml $(NULL) \ + app/parse-datetime.y \ system-helper/org.freedesktop.Flatpak.policy.in \ system-helper/org.freedesktop.Flatpak.SystemHelper.conf \ system-helper/org.freedesktop.Flatpak.rules.in \ system-helper/org.freedesktop.Flatpak.SystemHelper.service.in \ system-helper/flatpak-system-helper.service.in \ - tests/flatpak.supp tests/glib.supp $(completion_DATA) \ - profile/flatpak.sh.in $(NULL) env.d/flatpak.env.in \ - dbus.service.d/flatpak.conf.in flatpak.pc.in \ - scripts/flatpak-bisect README.md + tests/flatpak.supp tests/glib.supp \ + tests/Makefile-test-matrix.am.inc tests/expand-test-matrix.sh \ + tests/test-wrapper.sh $(bashcompletion_DATA) \ + $(zshcompletion_DATA) profile/flatpak.sh.in $(NULL) \ + env.d/flatpak.env.in dbus.service.d/flatpak.conf.in \ + flatpak.pc.in scripts/flatpak-bisect \ + scripts/flatpak-coredumpctl README.md flatpak.png TESTS_ENVIRONMENT = \ G_TEST_SRCDIR="$(abs_srcdir)/tests" \ G_TEST_BUILDDIR="$(abs_builddir)/tests" \ @@ -1114,11 +1288,15 @@ service_in_files = $(NULL) \ session-helper/flatpak-session-helper.service.in \ session-helper/org.freedesktop.Flatpak.service.in \ - $(am__append_20) + portal/flatpak-portal.service.in \ + portal/org.freedesktop.portal.Flatpak.service.in \ + $(am__append_22) dbus_service_DATA = $(NULL) \ - session-helper/org.freedesktop.Flatpak.service + session-helper/org.freedesktop.Flatpak.service \ + portal/org.freedesktop.portal.Flatpak.service systemduserunit_DATA = $(NULL) \ - session-helper/flatpak-session-helper.service + session-helper/flatpak-session-helper.service \ + portal/flatpak-portal.service FLATPAK_BINDIR = $(bindir) ACLOCAL_AMFLAGS = -I m4 -I libglnx ${ACLOCAL_FLAGS} AM_CPPFLAGS = -DFLATPAK_BINDIR=\"$(FLATPAK_BINDIR)\" \ @@ -1128,11 +1306,10 @@ -DFLATPAK_TRIGGERDIR=\"$(pkgdatadir)/triggers\" \ -DSYSTEM_FONTS_DIR=\"$(SYSTEM_FONTS_DIR)\" \ -DSYSTEM_FONT_CACHE_DIRS=\"$(SYSTEM_FONT_CACHE_DIRS)\" \ - -DDBUSPROXY=\"$(libexecdir)/flatpak-dbus-proxy\" \ -DG_LOG_DOMAIN=\"flatpak\" -I$(srcdir)/libglnx \ - -I$(srcdir)/common -I$(builddir)/common -I$(srcdir)/lib \ - -I$(builddir)/lib -include "config.h" $(NULL) $(am__append_15) \ - $(am__append_16) + -I$(srcdir)/common -I$(builddir)/common -include "config.h" \ + $(NULL) $(am__append_15) $(am__append_16) $(am__append_17) \ + $(am__append_18) AM_CFLAGS = $(WARN_CFLAGS) triggersdir = $(pkgdatadir)/triggers dist_triggers_SCRIPTS = \ @@ -1202,43 +1379,86 @@ test_libglnx_shutil_SOURCES = libglnx/tests/test-libglnx-shutil.c test_libglnx_shutil_CFLAGS = $(AM_CFLAGS) $(libglnx_cflags) test_libglnx_shutil_LDADD = $(libglnx_libs) libglnx.la -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 +flatpakincludedir = $(includedir)/flatpak +flatpakinclude_HEADERS = \ + common/flatpak.h \ + common/flatpak-ref.h \ + common/flatpak-error.h \ + common/flatpak-installed-ref.h \ + common/flatpak-remote-ref.h \ + common/flatpak-related-ref.h \ + common/flatpak-bundle-ref.h \ + common/flatpak-installation.h \ + common/flatpak-remote.h \ + common/flatpak-version-macros.h \ + common/flatpak-portal-error.h \ + common/flatpak-transaction.h \ + $(NULL) + +nodist_flatpakinclude_HEADERS = \ + common/flatpak-enum-types.h \ + $(NULL) + +dbus_built_sources = common/flatpak-dbus-generated.c common/flatpak-dbus-generated.h common/flatpak-document-dbus-generated.c common/flatpak-document-dbus-generated.h +systemd_dbus_built_sources = common/flatpak-systemd-dbus-generated.c common/flatpak-systemd-dbus-generated.h nodist_libflatpak_common_la_SOURCES = \ + $(nodist_flatpakinclude_HEADERS) \ $(dbus_built_sources) \ $(systemd_dbus_built_sources) \ $(xdp_dbus_built_sources) \ + common/flatpak-enum-types.c \ $(NULL) libflatpak_common_la_SOURCES = \ - common/flatpak-common-types.h \ + $(flatpakinclude_HEADERS) \ + common/flatpak-common-types-private.h \ common/flatpak-bwrap.c \ - common/flatpak-bwrap.h \ + common/flatpak-bwrap-private.h \ common/flatpak-dir.c \ - common/flatpak-dir.h \ + common/flatpak-dir-private.h \ common/flatpak-run.c \ - common/flatpak-run.h \ + common/flatpak-run-private.h \ common/flatpak-context.c \ - common/flatpak-context.h \ + common/flatpak-context-private.h \ common/flatpak-exports.c \ - common/flatpak-exports.h \ - common/flatpak-portal-error.c \ - common/flatpak-portal-error.h \ + common/flatpak-exports-private.h \ + common/flatpak-transaction-private.h \ + common/flatpak-transaction.h \ + common/flatpak-transaction.c \ common/flatpak-utils.c \ - common/flatpak-utils.h \ - common/flatpak-table-printer.c \ - common/flatpak-table-printer.h \ + common/flatpak-utils-http.c \ + common/flatpak-utils-http-private.h \ + common/flatpak-utils-private.h \ common/flatpak-chain-input-stream.c \ - common/flatpak-chain-input-stream.h \ + common/flatpak-chain-input-stream-private.h \ + common/flatpak-portal-error.c \ + common/flatpak-portal-error.h \ common/flatpak-json.c \ - common/flatpak-json.h \ + common/flatpak-json-private.h \ common/flatpak-json-oci.c \ - common/flatpak-json-oci.h \ + common/flatpak-json-oci-private.h \ common/flatpak-oci-registry.c \ - common/flatpak-oci-registry.h \ + common/flatpak-oci-registry-private.h \ + common/flatpak-ref.c \ + common/flatpak-installed-ref.c \ + common/flatpak-installed-ref-private.h \ + common/flatpak-remote-ref.c \ + common/flatpak-remote-ref-private.h \ + common/flatpak-bundle-ref.c \ + common/flatpak-related-ref.c \ + common/flatpak-related-ref-private.h \ + common/flatpak-remote-private.h \ + common/flatpak-remote.c \ + common/flatpak-error.c \ + common/flatpak-installation-private.h \ + common/flatpak-installation.c \ + common/flatpak-instance-private.h \ + common/flatpak-instance.c \ + common/valgrind-private.h \ $(NULL) libflatpak_common_la_CFLAGS = \ + -DFLATPAK_COMPILATION \ $(AM_CFLAGS) \ $(BASE_CFLAGS) \ $(HIDDEN_VISIBILITY_CFLAGS) \ @@ -1252,104 +1472,15 @@ $(NULL) libflatpak_common_la_LIBADD = $(AM_LIBADD) libglnx.la $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(XAUTH_LIBS) $(LIBSECCOMP_LIBS) $(INTERNAL_GPGME_LIBS) -introspectiondir = $(datadir)/dbus-1/interfaces -introspection_DATA = \ - data/org.freedesktop.Flatpak.xml \ - $(NULL) - -flatpak_SOURCES = \ - app/flatpak-main.c \ - app/flatpak-builtins.h \ - app/flatpak-builtins-utils.h \ - app/flatpak-builtins-utils.c \ - app/flatpak-transaction.h \ - app/flatpak-transaction.c \ - app/flatpak-builtins-add-remote.c \ - 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 \ - app/flatpak-builtins-update.c \ - app/flatpak-builtins-uninstall.c \ - app/flatpak-builtins-list.c \ - app/flatpak-builtins-info.c \ - app/flatpak-builtins-config.c \ - app/flatpak-builtins-run.c \ - app/flatpak-builtins-enter.c \ - app/flatpak-builtins-build-init.c \ - app/flatpak-builtins-build.c \ - app/flatpak-builtins-build-finish.c \ - app/flatpak-builtins-build-export.c \ - app/flatpak-builtins-build-bundle.c \ - app/flatpak-builtins-build-import-bundle.c \ - app/flatpak-builtins-build-commit-from.c \ - app/flatpak-builtins-build-sign.c \ - app/flatpak-builtins-repo-update.c \ - app/flatpak-builtins-repo.c \ - app/flatpak-builtins-document-export.c \ - 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) $(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)\" - -flatpakincludedir = $(includedir)/flatpak -flatpakinclude_HEADERS = \ - lib/flatpak.h \ - lib/flatpak-ref.h \ - lib/flatpak-error.h \ - lib/flatpak-installed-ref.h \ - lib/flatpak-remote-ref.h \ - lib/flatpak-related-ref.h \ - lib/flatpak-bundle-ref.h \ - lib/flatpak-installation.h \ - lib/flatpak-remote.h \ - lib/flatpak-version-macros.h \ - $(NULL) - -nodist_flatpakinclude_HEADERS = \ - lib/flatpak-enum-types.h \ - $(NULL) - libflatpak_la_SOURCES = \ - lib/flatpak.c \ - lib/flatpak-ref.c \ - lib/flatpak-installed-ref.c \ - lib/flatpak-installed-ref-private.h \ - lib/flatpak-remote-ref.c \ - lib/flatpak-remote-ref-private.h \ - lib/flatpak-bundle-ref.c \ - lib/flatpak-related-ref.c \ - lib/flatpak-related-ref-private.h \ - lib/flatpak-remote-private.h \ - lib/flatpak-remote.c \ - lib/flatpak-error.c \ - lib/flatpak-installation.c \ - $(NULL) - -nodist_libflatpak_la_SOURCES = \ - lib/flatpak-enum-types.c \ - $(NULL) - -sources = \ - $(libflatpak_la_SOURCES) \ - $(nodist_libflatpak_la_SOURCES) \ + common/flatpak.c \ $(NULL) libflatpak_la_CFLAGS = \ $(HIDDEN_VISIBILITY_CFLAGS) \ -DFLATPAK_COMPILATION \ - -I$(top_srcdir)/lib \ - -I$(top_builddir)/lib \ + -I$(top_srcdir)/common \ + -I$(top_builddir)/common \ $(AM_CFLAGS) \ $(BASE_CFLAGS) \ $(OSTREE_CFLAGS) \ @@ -1366,7 +1497,7 @@ libflatpak_la_LIBADD = \ $(AM_LIBADD) \ - libflatpak-common.la \ + libflatpak-common.la \ $(BASE_LIBS) \ $(OSTREE_LIBS) \ $(SOUP_LIBS) \ @@ -1374,23 +1505,24 @@ $(NULL) test_libflatpak_SOURCES = \ - lib/test-lib.c \ + common/test-lib.c \ $(NULL) test_libflatpak_CFLAGS = \ $(AM_CFLAGS) \ $(BASE_CFLAGS) \ - -I$(top_srcdir)/lib \ - -I$(top_builddir)/lib \ + -I$(top_srcdir)/common \ + -I$(top_builddir)/common \ $(NULL) test_libflatpak_LDADD = \ $(AM_LDADD) \ $(BASE_LIBS) \ - libflatpak.la \ + libflatpak.la \ $(NULL) -INTROSPECTION_GIRS = $(am__append_17) +sources = $(libflatpak_common_la_SOURCES) $(libflatpak_la_SOURCES) +INTROSPECTION_GIRS = $(am__append_19) @HAVE_INTROSPECTION_TRUE@introspected_headers = \ @HAVE_INTROSPECTION_TRUE@ $(flatpakinclude_HEADERS) \ @HAVE_INTROSPECTION_TRUE@ $(nodist_flatpakinclude_HEADERS) \ @@ -1404,20 +1536,106 @@ @HAVE_INTROSPECTION_TRUE@Flatpak_1_0_gir_CFLAGS = $(libflatpak_la_CFLAGS) @HAVE_INTROSPECTION_TRUE@Flatpak_1_0_gir_INCLUDES = GObject-2.0 Gio-2.0 @HAVE_INTROSPECTION_TRUE@Flatpak_1_0_gir_SCANNERFLAGS = \ -@HAVE_INTROSPECTION_TRUE@ --warn-all \ -@HAVE_INTROSPECTION_TRUE@ --c-include='flatpak.h' \ -@HAVE_INTROSPECTION_TRUE@ --pkg-export=flatpak +@HAVE_INTROSPECTION_TRUE@ --warn-all \ +@HAVE_INTROSPECTION_TRUE@ --c-include='flatpak.h' \ +@HAVE_INTROSPECTION_TRUE@ --pkg-export=flatpak @HAVE_INTROSPECTION_TRUE@girdir = $(datadir)/gir-1.0 @HAVE_INTROSPECTION_TRUE@nodist_gir_DATA = $(INTROSPECTION_GIRS) @HAVE_INTROSPECTION_TRUE@typelibdir = $(libdir)/girepository-1.0 @HAVE_INTROSPECTION_TRUE@nodist_typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib) +introspectiondir = $(datadir)/dbus-1/interfaces +introspection_DATA = \ + data/org.freedesktop.Flatpak.xml \ + data/org.freedesktop.portal.Flatpak.xml \ + $(NULL) + +flatpak_dbus_built_sources = app/flatpak-permission-dbus-generated.c app/flatpak-permission-dbus-generated.h +flatpak_SOURCES = \ + app/flatpak-main.c \ + app/flatpak-builtins.h \ + app/flatpak-builtins-utils.h \ + app/flatpak-builtins-utils.c \ + app/flatpak-builtins-remote-add.c \ + app/flatpak-builtins-remote-modify.c \ + app/flatpak-builtins-remote-delete.c \ + app/flatpak-builtins-remote-list.c \ + app/flatpak-builtins-remote-ls.c \ + app/flatpak-builtins-remote-info.c \ + app/flatpak-builtins-install.c \ + app/flatpak-builtins-override.c \ + app/flatpak-builtins-make-current.c \ + app/flatpak-builtins-update.c \ + app/flatpak-builtins-uninstall.c \ + app/flatpak-builtins-list.c \ + app/flatpak-builtins-info.c \ + app/flatpak-builtins-config.c \ + app/flatpak-builtins-run.c \ + app/flatpak-builtins-enter.c \ + app/flatpak-builtins-ps.c \ + app/flatpak-builtins-build-init.c \ + app/flatpak-builtins-build.c \ + app/flatpak-builtins-build-finish.c \ + app/flatpak-builtins-build-export.c \ + app/flatpak-builtins-build-bundle.c \ + app/flatpak-builtins-build-import-bundle.c \ + app/flatpak-builtins-build-commit-from.c \ + app/flatpak-builtins-build-sign.c \ + app/flatpak-builtins-build-update-repo.c \ + app/flatpak-builtins-repo.c \ + app/flatpak-builtins-document-export.c \ + app/flatpak-builtins-document-unexport.c \ + app/flatpak-builtins-document-info.c \ + app/flatpak-builtins-document-list.c \ + app/flatpak-builtins-permission-remove.c \ + app/flatpak-builtins-permission-list.c \ + app/flatpak-builtins-permission-show.c \ + app/flatpak-builtins-permission-reset.c \ + app/flatpak-builtins-search.c \ + app/flatpak-builtins-repair.c \ + app/flatpak-builtins-create-usb.c \ + app/flatpak-table-printer.c \ + app/flatpak-table-printer.h \ + app/flatpak-complete.c \ + app/flatpak-complete.h \ + app/flatpak-cli-transaction.c \ + app/flatpak-cli-transaction.h \ + app/parse-datetime.h \ + $(NULL) + +nodist_flatpak_SOURCES = \ + $(flatpak_dbus_built_sources) \ + app/parse-datetime.c \ + $(NULL) + +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) \ + -DFLATPAK_COMPILATION \ + -I$(srcdir)/app \ + -I$(builddir)/app \ + -DLOCALEDIR=\"$(localedir)\" + flatpak_session_helper_SOURCES = \ session-helper/flatpak-session-helper.c \ $(NULL) flatpak_session_helper_LDADD = $(AM_LDADD) $(BASE_LIBS) libflatpak-common.la -flatpak_session_helper_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(SOUP_CFLAGS) $(OSTREE_CFLAGS) $(GSYSTEM_CFLAGS) $(JSON_CFLAGS) +flatpak_session_helper_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(SOUP_CFLAGS) $(OSTREE_CFLAGS) $(GSYSTEM_CFLAGS) $(JSON_CFLAGS) -DFLATPAK_COMPILATION +nodist_flatpak_portal_SOURCES = portal/flatpak-portal-dbus.c portal/flatpak-portal-dbus.h +flatpak_portal_SOURCES = \ + portal/flatpak-portal.c \ + portal/flatpak-portal.h \ + portal/flatpak-portal-app-info.c \ + portal/flatpak-portal-app-info.h \ + common/flatpak-portal-error.c \ + common/flatpak-portal-error.h \ + $(NULL) + +flatpak_portal_LDADD = $(AM_LDADD) $(BASE_LIBS) +flatpak_portal_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -DFLATPAK_COMPILATION +flatpak_portal_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/portal @BUILD_SYSTEM_HELPER_TRUE@dbussystemservicedir = $(datadir)/dbus-1/system-services @BUILD_SYSTEM_HELPER_TRUE@dbussystemservice_DATA = system-helper/org.freedesktop.Flatpak.SystemHelper.service @BUILD_SYSTEM_HELPER_TRUE@dbusconfdir = $(DBUS_CONFIG_DIR) @@ -1425,11 +1643,10 @@ @BUILD_SYSTEM_HELPER_TRUE@systemdsystemunit_DATA = system-helper/flatpak-system-helper.service @BUILD_SYSTEM_HELPER_TRUE@flatpak_system_helper_SOURCES = \ @BUILD_SYSTEM_HELPER_TRUE@ system-helper/flatpak-system-helper.c \ -@BUILD_SYSTEM_HELPER_TRUE@ lib/flatpak-error.c \ @BUILD_SYSTEM_HELPER_TRUE@ $(NULL) @BUILD_SYSTEM_HELPER_TRUE@flatpak_system_helper_LDADD = $(BASE_LIBS) $(OSTREE_LIBS) $(JSON_LIBS) $(POLKIT_LIBS) libflatpak-common.la -@BUILD_SYSTEM_HELPER_TRUE@flatpak_system_helper_CFLAGS = $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(POLKIT_CFLAGS) +@BUILD_SYSTEM_HELPER_TRUE@flatpak_system_helper_CFLAGS = $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(POLKIT_CFLAGS) -DFLATPAK_COMPILATION @BUILD_SYSTEM_HELPER_TRUE@polkit_rulesdir = $(datadir)/polkit-1/rules.d @BUILD_SYSTEM_HELPER_TRUE@polkit_rules_DATA = \ @BUILD_SYSTEM_HELPER_TRUE@ system-helper/org.freedesktop.Flatpak.rules @@ -1438,14 +1655,6 @@ @BUILD_SYSTEM_HELPER_TRUE@polkit_policy_DATA = \ @BUILD_SYSTEM_HELPER_TRUE@ system-helper/org.freedesktop.Flatpak.policy -flatpak_dbus_proxy_SOURCES = \ - dbus-proxy/flatpak-proxy.c \ - dbus-proxy/flatpak-proxy.h \ - dbus-proxy/dbus-proxy.c \ - $(NULL) - -flatpak_dbus_proxy_LDADD = $(AM_LDADD) $(BASE_LIBS) libglnx.la -flatpak_dbus_proxy_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -I$(srcdir)/dbus-proxy AM_TESTS_ENVIRONMENT = FLATPAK_TESTS_DEBUG=1 FLATPAK_TRIGGERSDIR=$$(cd \ $(top_srcdir) && pwd)/triggers FLATPAK_DBUSPROXY=$$(cd \ $(top_builddir) && pwd)/flatpak-dbus-proxy \ @@ -1453,17 +1662,25 @@ pwd)$${GI_TYPELIB_PATH:+:$$GI_TYPELIB_PATH} \ LD_LIBRARY_PATH=$$(cd $(top_builddir)/.libs && \ pwd)$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH} PATH=$$(cd \ - $(top_builddir) && pwd):$${PATH} $(NULL) $(am__append_22) \ - $(am__append_23) -testlibrary_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) + $(top_builddir) && pwd):$${PATH} $(NULL) $(am__append_24) \ + $(am__append_25) +testlibrary_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) -DFLATPAK_COMPILATION testlibrary_LDADD = \ $(AM_LDADD) \ $(BASE_LIBS) \ + $(OSTREE_LIBS) \ libglnx.la \ libflatpak.la \ $(NULL) testlibrary_SOURCES = tests/testlibrary.c +tests_httpcache_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(APPSTREAM_GLIB_CFLAGS) \ + -DFLATPAK_COMPILATION \ + -DLOCALEDIR=\"$(localedir)\" + +tests_httpcache_LDADD = $(AM_LDADD) $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(APPSTREAM_GLIB_LIBS) \ + libglnx.la libflatpak-common.la + dist_installed_test_data = \ tests/libtest.sh \ tests/org.test.Hello.png \ @@ -1485,29 +1702,73 @@ @ENABLE_INSTALLED_TESTS_TRUE@ tests/test-keyring2/secring.gpg \ @ENABLE_INSTALLED_TESTS_TRUE@ $(NULL) -dist_test_scripts = \ + +# Run make update-test-matrix after changing this +TEST_MATRIX_SOURCE = \ tests/test-basic.sh \ - tests/test-run.sh \ - tests/test-run-system.sh \ - tests/test-run-deltas.sh \ - tests/test-run-system-deltas.sh \ - tests/test-repo.sh \ - tests/test-repo-collections.sh \ - tests/test-repo-collections-server-only.sh \ - tests/test-repo-system.sh \ + tests/test-build-update-repo.sh \ + tests/test-http-utils.sh \ + tests/test-run.sh{{user+system},{nodeltas+deltas}} \ + tests/test-repo.sh{user+system+collections+collections-server-only} \ + tests/test-extensions.sh \ + tests/test-bundle.sh{user+system} \ + tests/test-oci.sh \ + tests/test-oci-registry.sh{user+system} \ + tests/test-unsigned-summaries.sh \ + tests/test-update-remote-configuration.sh \ + $(NULL) + + +# This file is autogenerated by make update-test-matrix, don't edit +TEST_MATRIX = \ + tests/test-run@user,nodeltas.wrap \ + tests/test-run@user,deltas.wrap \ + tests/test-run@system,nodeltas.wrap \ + tests/test-run@system,deltas.wrap \ + tests/test-repo@user.wrap \ + tests/test-repo@system.wrap \ + tests/test-repo@collections.wrap \ + tests/test-repo@collections-server-only.wrap \ + tests/test-bundle@user.wrap \ + tests/test-bundle@system.wrap \ + tests/test-oci-registry@user.wrap \ + tests/test-oci-registry@system.wrap \ + $(NULL) + +TEST_MATRIX_DIST = \ + tests/test-basic.sh \ + tests/test-build-update-repo.sh \ + tests/test-http-utils.sh \ tests/test-extensions.sh \ - tests/test-bundle.sh \ - tests/test-bundle-system.sh \ tests/test-oci.sh \ tests/test-unsigned-summaries.sh \ tests/test-update-remote-configuration.sh \ $(NULL) +TEST_MATRIX_EXTRA_DIST = \ + tests/test-run.sh \ + tests/test-repo.sh \ + tests/test-bundle.sh \ + tests/test-oci-registry.sh \ + $(NULL) + +test_scripts = ${TEST_MATRIX} +dist_test_scripts = ${TEST_MATRIX_DIST} test_programs = testlibrary +test_extra_programs = tests/httpcache VALGRIND_SUPPRESSIONS_FILES = tests/flatpak.supp tests/glib.supp +@WITH_SYSTEM_DBUS_PROXY_FALSE@flatpak_dbus_proxy_SOURCES = \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ dbus-proxy/flatpak-proxy.c \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ dbus-proxy/flatpak-proxy.h \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ dbus-proxy/dbus-proxy.c \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ dbus-proxy/backport-autoptr.h \ +@WITH_SYSTEM_DBUS_PROXY_FALSE@ $(NULL) + +@WITH_SYSTEM_DBUS_PROXY_FALSE@flatpak_dbus_proxy_LDADD = $(AM_LDADD) $(BASE_LIBS) +@WITH_SYSTEM_DBUS_PROXY_FALSE@flatpak_dbus_proxy_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) @WITH_SYSTEM_BWRAP_FALSE@flatpak_bwrap_SOURCES = $(bwrap_SOURCES) @WITH_SYSTEM_BWRAP_FALSE@flatpak_bwrap_CFLAGS = $(AM_CFLAGS) $(bwrap_CFLAGS) -@WITH_SYSTEM_BWRAP_FALSE@flatpak_bwrap_LDADD = $(AM_LDADD) $(bwrap_LDADD) +@WITH_SYSTEM_BWRAP_FALSE@flatpak_bwrap_LDADD = $(AM_LDADD) $(bwrap_LDADD) $(CAP_LIB) @WITH_SYSTEM_BWRAP_FALSE@bwrapdir = $(libexecdir) @WITH_SYSTEM_BWRAP_FALSE@bwrap_SOURCES = \ @WITH_SYSTEM_BWRAP_FALSE@ bubblewrap/bubblewrap.c \ @@ -1521,8 +1782,10 @@ @WITH_SYSTEM_BWRAP_FALSE@bwrap_CFLAGS = $(AM_CFLAGS) @WITH_SYSTEM_BWRAP_FALSE@bwrap_LDADD = $(SELINUX_LIBS) -completiondir = $(datadir)/bash-completion/completions -completion_DATA = completion/flatpak +bashcompletiondir = $(datadir)/bash-completion/completions +bashcompletion_DATA = completion/flatpak +zshcompletiondir = $(datadir)/zsh/site-functions +zshcompletion_DATA = completion/_flatpak profiledir = $(PROFILE_DIR) profile_DATA = flatpak.sh envdir = $(datadir)/gdm/env.d @@ -1532,7 +1795,7 @@ pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = flatpak.pc scriptsdir = $(bindir) -scripts_SCRIPTS = scripts/flatpak-bisect +scripts_SCRIPTS = scripts/flatpak-bisect scripts/flatpak-coredumpctl AM_DISTCHECK_CONFIGURE_FLAGS = \ --enable-documentation \ --disable-maintainer-mode \ @@ -1545,7 +1808,7 @@ .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs am--refresh: Makefile @: -$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/buildutil/glib-tap.mk $(srcdir)/libglnx/Makefile-libglnx.am.inc $(srcdir)/common/Makefile.am.inc $(srcdir)/data/Makefile.am.inc $(srcdir)/app/Makefile.am.inc $(srcdir)/lib/Makefile.am.inc $(srcdir)/session-helper/Makefile.am.inc $(srcdir)/system-helper/Makefile.am.inc $(srcdir)/dbus-proxy/Makefile.am.inc $(srcdir)/tests/Makefile.am.inc $(srcdir)/bubblewrap/Makefile-bwrap.am.inc $(am__configure_deps) +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/buildutil/glib-tap.mk $(srcdir)/libglnx/Makefile-libglnx.am.inc $(srcdir)/common/Makefile.am.inc $(srcdir)/data/Makefile.am.inc $(srcdir)/app/Makefile.am.inc $(srcdir)/session-helper/Makefile.am.inc $(srcdir)/portal/Makefile.am.inc $(srcdir)/system-helper/Makefile.am.inc $(srcdir)/tests/Makefile.am.inc $(srcdir)/tests/Makefile-test-matrix.am.inc $(srcdir)/bubblewrap/Makefile-bwrap.am.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ @@ -1564,10 +1827,10 @@ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; -$(top_srcdir)/buildutil/glib-tap.mk $(srcdir)/libglnx/Makefile-libglnx.am.inc $(srcdir)/common/Makefile.am.inc $(srcdir)/data/Makefile.am.inc $(srcdir)/app/Makefile.am.inc $(srcdir)/lib/Makefile.am.inc $(srcdir)/session-helper/Makefile.am.inc $(srcdir)/system-helper/Makefile.am.inc $(srcdir)/dbus-proxy/Makefile.am.inc $(srcdir)/tests/Makefile.am.inc $(srcdir)/bubblewrap/Makefile-bwrap.am.inc $(am__empty): +$(top_srcdir)/buildutil/glib-tap.mk $(srcdir)/libglnx/Makefile-libglnx.am.inc $(srcdir)/common/Makefile.am.inc $(srcdir)/data/Makefile.am.inc $(srcdir)/app/Makefile.am.inc $(srcdir)/session-helper/Makefile.am.inc $(srcdir)/portal/Makefile.am.inc $(srcdir)/system-helper/Makefile.am.inc $(srcdir)/tests/Makefile.am.inc $(srcdir)/tests/Makefile-test-matrix.am.inc $(srcdir)/bubblewrap/Makefile-bwrap.am.inc $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck @@ -1594,195 +1857,8 @@ -rm -f config.h stamp-h1 flatpak.pc: $(top_builddir)/config.status $(srcdir)/flatpak.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ -lib/flatpak-version-macros.h: $(top_builddir)/config.status $(top_srcdir)/lib/flatpak-version-macros.h.in +common/flatpak-version-macros.h: $(top_builddir)/config.status $(top_srcdir)/common/flatpak-version-macros.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ - -clean-checkLTLIBRARIES: - -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) - @list='$(check_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -install-installed_testLTLIBRARIES: $(installed_test_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(installed_test_LTLIBRARIES)'; test -n "$(installed_testdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(installed_testdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(installed_testdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(installed_testdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(installed_testdir)"; \ - } - -uninstall-installed_testLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(installed_test_LTLIBRARIES)'; test -n "$(installed_testdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(installed_testdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(installed_testdir)/$$f"; \ - done - -clean-installed_testLTLIBRARIES: - -test -z "$(installed_test_LTLIBRARIES)" || rm -f $(installed_test_LTLIBRARIES) - @list='$(installed_test_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -common/$(am__dirstamp): - @$(MKDIR_P) common - @: > common/$(am__dirstamp) -common/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) common/$(DEPDIR) - @: > common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-bwrap.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-dir.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-run.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-context.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-exports.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-portal-error.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-utils.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-table-printer.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-chain-input-stream.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-json.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-json-oci.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-oci-registry.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-dbus.lo: common/$(am__dirstamp) \ - common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-document-dbus.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) -common/libflatpak_common_la-flatpak-systemd-dbus.lo: \ - common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) - -libflatpak-common.la: $(libflatpak_common_la_OBJECTS) $(libflatpak_common_la_DEPENDENCIES) $(EXTRA_libflatpak_common_la_DEPENDENCIES) - $(AM_V_CCLD)$(libflatpak_common_la_LINK) $(libflatpak_common_la_OBJECTS) $(libflatpak_common_la_LIBADD) $(LIBS) -lib/$(am__dirstamp): - @$(MKDIR_P) lib - @: > lib/$(am__dirstamp) -lib/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) lib/$(DEPDIR) - @: > lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-ref.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-installed-ref.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-remote-ref.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-bundle-ref.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-related-ref.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-remote.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-error.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-installation.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) -lib/libflatpak_la-flatpak-enum-types.lo: lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) - -libflatpak.la: $(libflatpak_la_OBJECTS) $(libflatpak_la_DEPENDENCIES) $(EXTRA_libflatpak_la_DEPENDENCIES) - $(AM_V_CCLD)$(libflatpak_la_LINK) -rpath $(libdir) $(libflatpak_la_OBJECTS) $(libflatpak_la_LIBADD) $(LIBS) -libglnx/$(am__dirstamp): - @$(MKDIR_P) libglnx - @: > libglnx/$(am__dirstamp) -libglnx/$(DEPDIR)/$(am__dirstamp): - @$(MKDIR_P) libglnx/$(DEPDIR) - @: > libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-backports.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-local-alloc.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-errors.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-console.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-dirfd.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-fdio.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-lockfile.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-xattrs.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) -libglnx/libglnx_la-glnx-shutil.lo: libglnx/$(am__dirstamp) \ - libglnx/$(DEPDIR)/$(am__dirstamp) - -libglnx.la: $(libglnx_la_OBJECTS) $(libglnx_la_DEPENDENCIES) $(EXTRA_libglnx_la_DEPENDENCIES) - $(AM_V_CCLD)$(libglnx_la_LINK) $(libglnx_la_OBJECTS) $(libglnx_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ @@ -1969,34 +2045,219 @@ } \ ; done -uninstall-libexecPROGRAMS: - @$(NORMAL_UNINSTALL) - @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ - files=`for p in $$list; do echo "$$p"; done | \ - sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ - -e 's/$$/$(EXEEXT)/' \ - `; \ - test -n "$$list" || exit 0; \ - echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ - cd "$(DESTDIR)$(libexecdir)" && rm -f $$files +uninstall-libexecPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(libexecdir)" && rm -f $$files + +clean-libexecPROGRAMS: + @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-checkLTLIBRARIES: + -test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES) + @list='$(check_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +install-installed_testLTLIBRARIES: $(installed_test_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(installed_test_LTLIBRARIES)'; test -n "$(installed_testdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(installed_testdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(installed_testdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(installed_testdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(installed_testdir)"; \ + } + +uninstall-installed_testLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(installed_test_LTLIBRARIES)'; test -n "$(installed_testdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(installed_testdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(installed_testdir)/$$f"; \ + done + +clean-installed_testLTLIBRARIES: + -test -z "$(installed_test_LTLIBRARIES)" || rm -f $(installed_test_LTLIBRARIES) + @list='$(installed_test_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +common/$(am__dirstamp): + @$(MKDIR_P) common + @: > common/$(am__dirstamp) +common/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) common/$(DEPDIR) + @: > common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-bwrap.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-dir.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-run.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-context.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-exports.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-transaction.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-utils.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-utils-http.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-chain-input-stream.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-portal-error.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-json.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-json-oci.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-oci-registry.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-ref.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-installed-ref.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-remote-ref.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-bundle-ref.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-related-ref.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-remote.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-error.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-installation.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-instance.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-dbus-generated.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-document-dbus-generated.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +common/libflatpak_common_la-flatpak-enum-types.lo: \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) + +libflatpak-common.la: $(libflatpak_common_la_OBJECTS) $(libflatpak_common_la_DEPENDENCIES) $(EXTRA_libflatpak_common_la_DEPENDENCIES) + $(AM_V_CCLD)$(libflatpak_common_la_LINK) $(libflatpak_common_la_OBJECTS) $(libflatpak_common_la_LIBADD) $(LIBS) +common/libflatpak_la-flatpak.lo: common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) -clean-libexecPROGRAMS: - @list='$(libexec_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list +libflatpak.la: $(libflatpak_la_OBJECTS) $(libflatpak_la_DEPENDENCIES) $(EXTRA_libflatpak_la_DEPENDENCIES) + $(AM_V_CCLD)$(libflatpak_la_LINK) -rpath $(libdir) $(libflatpak_la_OBJECTS) $(libflatpak_la_LIBADD) $(LIBS) +libglnx/$(am__dirstamp): + @$(MKDIR_P) libglnx + @: > libglnx/$(am__dirstamp) +libglnx/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libglnx/$(DEPDIR) + @: > libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-backports.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-local-alloc.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-errors.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-console.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-dirfd.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-fdio.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-lockfile.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-xattrs.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) +libglnx/la-glnx-shutil.lo: libglnx/$(am__dirstamp) \ + libglnx/$(DEPDIR)/$(am__dirstamp) -clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ - echo " rm -f" $$list; \ - rm -f $$list || exit $$?; \ - test -n "$(EXEEXT)" || exit 0; \ - list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f" $$list; \ - rm -f $$list +libglnx.la: $(libglnx_la_OBJECTS) $(libglnx_la_DEPENDENCIES) $(EXTRA_libglnx_la_DEPENDENCIES) + $(AM_V_CCLD)$(libglnx_la_LINK) $(libglnx_la_OBJECTS) $(libglnx_la_LIBADD) $(LIBS) app/$(am__dirstamp): @$(MKDIR_P) app @: > app/$(am__dirstamp) @@ -2007,17 +2268,17 @@ app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-utils.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-transaction.$(OBJEXT): app/$(am__dirstamp) \ - app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-add-remote.$(OBJEXT): \ +app/flatpak-flatpak-builtins-remote-add.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-delete-remote.$(OBJEXT): \ +app/flatpak-flatpak-builtins-remote-modify.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-list-remotes.$(OBJEXT): \ +app/flatpak-flatpak-builtins-remote-delete.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-ls-remote.$(OBJEXT): app/$(am__dirstamp) \ +app/flatpak-flatpak-builtins-remote-list.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-remote-ls.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-info-remote.$(OBJEXT): \ +app/flatpak-flatpak-builtins-remote-info.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-install.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) @@ -2039,6 +2300,8 @@ app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-enter.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-ps.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-build-init.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-build.$(OBJEXT): app/$(am__dirstamp) \ @@ -2055,7 +2318,7 @@ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-build-sign.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) -app/flatpak-flatpak-builtins-repo-update.$(OBJEXT): \ +app/flatpak-flatpak-builtins-build-update-repo.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-repo.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) @@ -2067,8 +2330,30 @@ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-document-list.$(OBJEXT): \ app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-permission-remove.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-permission-list.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-permission-show.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-permission-reset.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) app/flatpak-flatpak-builtins-search.$(OBJEXT): app/$(am__dirstamp) \ app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-repair.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-builtins-create-usb.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-table-printer.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-complete.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-cli-transaction.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-flatpak-permission-dbus-generated.$(OBJEXT): \ + app/$(am__dirstamp) app/$(DEPDIR)/$(am__dirstamp) +app/flatpak-parse-datetime.$(OBJEXT): app/$(am__dirstamp) \ + app/$(DEPDIR)/$(am__dirstamp) flatpak$(EXEEXT): $(flatpak_OBJECTS) $(flatpak_DEPENDENCIES) $(EXTRA_flatpak_DEPENDENCIES) @rm -f flatpak$(EXEEXT) @@ -2110,6 +2395,24 @@ flatpak-dbus-proxy$(EXEEXT): $(flatpak_dbus_proxy_OBJECTS) $(flatpak_dbus_proxy_DEPENDENCIES) $(EXTRA_flatpak_dbus_proxy_DEPENDENCIES) @rm -f flatpak-dbus-proxy$(EXEEXT) $(AM_V_CCLD)$(flatpak_dbus_proxy_LINK) $(flatpak_dbus_proxy_OBJECTS) $(flatpak_dbus_proxy_LDADD) $(LIBS) +portal/$(am__dirstamp): + @$(MKDIR_P) portal + @: > portal/$(am__dirstamp) +portal/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) portal/$(DEPDIR) + @: > portal/$(DEPDIR)/$(am__dirstamp) +portal/flatpak_portal-flatpak-portal.$(OBJEXT): \ + portal/$(am__dirstamp) portal/$(DEPDIR)/$(am__dirstamp) +portal/flatpak_portal-flatpak-portal-app-info.$(OBJEXT): \ + portal/$(am__dirstamp) portal/$(DEPDIR)/$(am__dirstamp) +common/flatpak_portal-flatpak-portal-error.$(OBJEXT): \ + common/$(am__dirstamp) common/$(DEPDIR)/$(am__dirstamp) +portal/flatpak_portal-flatpak-portal-dbus.$(OBJEXT): \ + portal/$(am__dirstamp) portal/$(DEPDIR)/$(am__dirstamp) + +flatpak-portal$(EXEEXT): $(flatpak_portal_OBJECTS) $(flatpak_portal_DEPENDENCIES) $(EXTRA_flatpak_portal_DEPENDENCIES) + @rm -f flatpak-portal$(EXEEXT) + $(AM_V_CCLD)$(flatpak_portal_LINK) $(flatpak_portal_OBJECTS) $(flatpak_portal_LDADD) $(LIBS) session-helper/$(am__dirstamp): @$(MKDIR_P) session-helper @: > session-helper/$(am__dirstamp) @@ -2132,14 +2435,12 @@ system-helper/flatpak_system_helper-flatpak-system-helper.$(OBJEXT): \ system-helper/$(am__dirstamp) \ system-helper/$(DEPDIR)/$(am__dirstamp) -lib/flatpak_system_helper-flatpak-error.$(OBJEXT): \ - lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp) flatpak-system-helper$(EXEEXT): $(flatpak_system_helper_OBJECTS) $(flatpak_system_helper_DEPENDENCIES) $(EXTRA_flatpak_system_helper_DEPENDENCIES) @rm -f flatpak-system-helper$(EXEEXT) $(AM_V_CCLD)$(flatpak_system_helper_LINK) $(flatpak_system_helper_OBJECTS) $(flatpak_system_helper_LDADD) $(LIBS) -lib/test_libflatpak-test-lib.$(OBJEXT): lib/$(am__dirstamp) \ - lib/$(DEPDIR)/$(am__dirstamp) +common/test_libflatpak-test-lib.$(OBJEXT): common/$(am__dirstamp) \ + common/$(DEPDIR)/$(am__dirstamp) test-libflatpak$(EXEEXT): $(test_libflatpak_OBJECTS) $(test_libflatpak_DEPENDENCIES) $(EXTRA_test_libflatpak_DEPENDENCIES) @rm -f test-libflatpak$(EXEEXT) @@ -2197,6 +2498,12 @@ testlibrary$(EXEEXT): $(testlibrary_OBJECTS) $(testlibrary_DEPENDENCIES) $(EXTRA_testlibrary_DEPENDENCIES) @rm -f testlibrary$(EXEEXT) $(AM_V_CCLD)$(testlibrary_LINK) $(testlibrary_OBJECTS) $(testlibrary_LDADD) $(LIBS) +tests/httpcache-httpcache.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) + +tests/httpcache$(EXEEXT): $(tests_httpcache_OBJECTS) $(tests_httpcache_DEPENDENCIES) $(EXTRA_tests_httpcache_DEPENDENCIES) tests/$(am__dirstamp) + @rm -f tests/httpcache$(EXEEXT) + $(AM_V_CCLD)$(tests_httpcache_LINK) $(tests_httpcache_OBJECTS) $(tests_httpcache_LDADD) $(LIBS) install-dist_triggersSCRIPTS: $(dist_triggers_SCRIPTS) @$(NORMAL_INSTALL) @list='$(dist_triggers_SCRIPTS)'; test -n "$(triggersdir)" || list=; \ @@ -2310,11 +2617,10 @@ -rm -f common/*.$(OBJEXT) -rm -f common/*.lo -rm -f dbus-proxy/*.$(OBJEXT) - -rm -f lib/*.$(OBJEXT) - -rm -f lib/*.lo -rm -f libglnx/*.$(OBJEXT) -rm -f libglnx/*.lo -rm -f libglnx/tests/*.$(OBJEXT) + -rm -f portal/*.$(OBJEXT) -rm -f session-helper/*.$(OBJEXT) -rm -f system-helper/*.$(OBJEXT) -rm -f tests/*.$(OBJEXT) @@ -2322,89 +2628,113 @@ distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-bundle.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-commit-from.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-export.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-finish.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-import-bundle.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-sign.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-config.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-export.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-info.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-list.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-unexport.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-enter.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-info.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-install.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-list.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-make-current.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-override.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-run.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-uninstall.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-update.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-utils.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-main.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-transaction.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-bind-mount.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-network.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-utils.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-bwrap.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-context.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-dir.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-exports.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-json-oci.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-oci-registry.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-run.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-table-printer.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-dbus-proxy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-flatpak-proxy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-bundle-ref.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-enum-types.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-error.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-installation.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-installed-ref.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-ref.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-related-ref.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-remote-ref.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak-remote.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/libflatpak_la-flatpak.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/test_libflatpak-test-lib.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-backports.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-console.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-dirfd.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-errors.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-fdio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-local-alloc.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-lockfile.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-shutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/libglnx_la-glnx-xattrs.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_fdio-test-libglnx-fdio.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_macros-test-libglnx-macros.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_shutil-test-libglnx-shutil.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_xattrs-test-libglnx-xattrs.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@system-helper/$(DEPDIR)/flatpak_system_helper-flatpak-system-helper.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testlibrary-testlibrary.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-bundle.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-commit-from.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-export.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-finish.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-import-bundle.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-sign.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-build.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-config.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-export.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-list.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-document-unexport.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-enter.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-install.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-list.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-make-current.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-override.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-run.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-uninstall.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-update.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-builtins-utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-complete.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-flatpak-table-printer.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@app/$(DEPDIR)/flatpak-parse-datetime.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-bind-mount.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-network.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@bubblewrap/$(DEPDIR)/flatpak_bwrap-utils.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-bwrap.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-context.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-dir.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-exports.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-json-oci.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-oci-registry.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-run.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/libflatpak_la-flatpak.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/test_libflatpak-test-lib.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-dbus-proxy.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-flatpak-proxy.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-backports.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-console.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-dirfd.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-errors.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-fdio.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-local-alloc.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-lockfile.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-shutil.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/$(DEPDIR)/la-glnx-xattrs.Plo@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_fdio-test-libglnx-fdio.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_macros-test-libglnx-macros.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_shutil-test-libglnx-shutil.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@libglnx/tests/$(DEPDIR)/test_libglnx_xattrs-test-libglnx-xattrs.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@system-helper/$(DEPDIR)/flatpak_system_helper-flatpak-system-helper.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/httpcache-httpcache.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testlibrary-testlibrary.Po@am__quote@ # am--include-marker + +$(am__depfiles_remade): + @$(MKDIR_P) $(@D) + @echo '# dummy' >$@-t && $(am__mv) $@-t $@ + +am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -2465,12 +2795,12 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-exports.lo `test -f 'common/flatpak-exports.c' || echo '$(srcdir)/'`common/flatpak-exports.c -common/libflatpak_common_la-flatpak-portal-error.lo: common/flatpak-portal-error.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-portal-error.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Tpo -c -o common/libflatpak_common_la-flatpak-portal-error.lo `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-portal-error.c' object='common/libflatpak_common_la-flatpak-portal-error.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-transaction.lo: common/flatpak-transaction.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-transaction.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Tpo -c -o common/libflatpak_common_la-flatpak-transaction.lo `test -f 'common/flatpak-transaction.c' || echo '$(srcdir)/'`common/flatpak-transaction.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-transaction.c' object='common/libflatpak_common_la-flatpak-transaction.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-portal-error.lo `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-transaction.lo `test -f 'common/flatpak-transaction.c' || echo '$(srcdir)/'`common/flatpak-transaction.c common/libflatpak_common_la-flatpak-utils.lo: common/flatpak-utils.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-utils.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Tpo -c -o common/libflatpak_common_la-flatpak-utils.lo `test -f 'common/flatpak-utils.c' || echo '$(srcdir)/'`common/flatpak-utils.c @@ -2479,12 +2809,12 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-utils.lo `test -f 'common/flatpak-utils.c' || echo '$(srcdir)/'`common/flatpak-utils.c -common/libflatpak_common_la-flatpak-table-printer.lo: common/flatpak-table-printer.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-table-printer.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-table-printer.Tpo -c -o common/libflatpak_common_la-flatpak-table-printer.lo `test -f 'common/flatpak-table-printer.c' || echo '$(srcdir)/'`common/flatpak-table-printer.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-table-printer.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-table-printer.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-table-printer.c' object='common/libflatpak_common_la-flatpak-table-printer.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-utils-http.lo: common/flatpak-utils-http.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-utils-http.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Tpo -c -o common/libflatpak_common_la-flatpak-utils-http.lo `test -f 'common/flatpak-utils-http.c' || echo '$(srcdir)/'`common/flatpak-utils-http.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-utils-http.c' object='common/libflatpak_common_la-flatpak-utils-http.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-table-printer.lo `test -f 'common/flatpak-table-printer.c' || echo '$(srcdir)/'`common/flatpak-table-printer.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-utils-http.lo `test -f 'common/flatpak-utils-http.c' || echo '$(srcdir)/'`common/flatpak-utils-http.c common/libflatpak_common_la-flatpak-chain-input-stream.lo: common/flatpak-chain-input-stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-chain-input-stream.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Tpo -c -o common/libflatpak_common_la-flatpak-chain-input-stream.lo `test -f 'common/flatpak-chain-input-stream.c' || echo '$(srcdir)/'`common/flatpak-chain-input-stream.c @@ -2493,6 +2823,13 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-chain-input-stream.lo `test -f 'common/flatpak-chain-input-stream.c' || echo '$(srcdir)/'`common/flatpak-chain-input-stream.c +common/libflatpak_common_la-flatpak-portal-error.lo: common/flatpak-portal-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-portal-error.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Tpo -c -o common/libflatpak_common_la-flatpak-portal-error.lo `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-portal-error.c' object='common/libflatpak_common_la-flatpak-portal-error.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-portal-error.lo `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c + common/libflatpak_common_la-flatpak-json.lo: common/flatpak-json.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-json.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Tpo -c -o common/libflatpak_common_la-flatpak-json.lo `test -f 'common/flatpak-json.c' || echo '$(srcdir)/'`common/flatpak-json.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo @@ -2514,159 +2851,166 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-oci-registry.lo `test -f 'common/flatpak-oci-registry.c' || echo '$(srcdir)/'`common/flatpak-oci-registry.c -common/libflatpak_common_la-flatpak-dbus.lo: common/flatpak-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-dbus.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus.Tpo -c -o common/libflatpak_common_la-flatpak-dbus.lo `test -f 'common/flatpak-dbus.c' || echo '$(srcdir)/'`common/flatpak-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-dbus.c' object='common/libflatpak_common_la-flatpak-dbus.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-ref.lo: common/flatpak-ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-ref.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Tpo -c -o common/libflatpak_common_la-flatpak-ref.lo `test -f 'common/flatpak-ref.c' || echo '$(srcdir)/'`common/flatpak-ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-ref.c' object='common/libflatpak_common_la-flatpak-ref.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-ref.lo `test -f 'common/flatpak-ref.c' || echo '$(srcdir)/'`common/flatpak-ref.c + +common/libflatpak_common_la-flatpak-installed-ref.lo: common/flatpak-installed-ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-installed-ref.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Tpo -c -o common/libflatpak_common_la-flatpak-installed-ref.lo `test -f 'common/flatpak-installed-ref.c' || echo '$(srcdir)/'`common/flatpak-installed-ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-installed-ref.c' object='common/libflatpak_common_la-flatpak-installed-ref.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-dbus.lo `test -f 'common/flatpak-dbus.c' || echo '$(srcdir)/'`common/flatpak-dbus.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-installed-ref.lo `test -f 'common/flatpak-installed-ref.c' || echo '$(srcdir)/'`common/flatpak-installed-ref.c -common/libflatpak_common_la-flatpak-document-dbus.lo: common/flatpak-document-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-document-dbus.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus.Tpo -c -o common/libflatpak_common_la-flatpak-document-dbus.lo `test -f 'common/flatpak-document-dbus.c' || echo '$(srcdir)/'`common/flatpak-document-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-document-dbus.c' object='common/libflatpak_common_la-flatpak-document-dbus.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-remote-ref.lo: common/flatpak-remote-ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-remote-ref.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Tpo -c -o common/libflatpak_common_la-flatpak-remote-ref.lo `test -f 'common/flatpak-remote-ref.c' || echo '$(srcdir)/'`common/flatpak-remote-ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-remote-ref.c' object='common/libflatpak_common_la-flatpak-remote-ref.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-document-dbus.lo `test -f 'common/flatpak-document-dbus.c' || echo '$(srcdir)/'`common/flatpak-document-dbus.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-remote-ref.lo `test -f 'common/flatpak-remote-ref.c' || echo '$(srcdir)/'`common/flatpak-remote-ref.c -common/libflatpak_common_la-flatpak-systemd-dbus.lo: common/flatpak-systemd-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-systemd-dbus.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus.Tpo -c -o common/libflatpak_common_la-flatpak-systemd-dbus.lo `test -f 'common/flatpak-systemd-dbus.c' || echo '$(srcdir)/'`common/flatpak-systemd-dbus.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-systemd-dbus.c' object='common/libflatpak_common_la-flatpak-systemd-dbus.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-bundle-ref.lo: common/flatpak-bundle-ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-bundle-ref.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Tpo -c -o common/libflatpak_common_la-flatpak-bundle-ref.lo `test -f 'common/flatpak-bundle-ref.c' || echo '$(srcdir)/'`common/flatpak-bundle-ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-bundle-ref.c' object='common/libflatpak_common_la-flatpak-bundle-ref.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-systemd-dbus.lo `test -f 'common/flatpak-systemd-dbus.c' || echo '$(srcdir)/'`common/flatpak-systemd-dbus.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-bundle-ref.lo `test -f 'common/flatpak-bundle-ref.c' || echo '$(srcdir)/'`common/flatpak-bundle-ref.c -lib/libflatpak_la-flatpak.lo: lib/flatpak.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak.Tpo -c -o lib/libflatpak_la-flatpak.lo `test -f 'lib/flatpak.c' || echo '$(srcdir)/'`lib/flatpak.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak.c' object='lib/libflatpak_la-flatpak.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-related-ref.lo: common/flatpak-related-ref.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-related-ref.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Tpo -c -o common/libflatpak_common_la-flatpak-related-ref.lo `test -f 'common/flatpak-related-ref.c' || echo '$(srcdir)/'`common/flatpak-related-ref.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-related-ref.c' object='common/libflatpak_common_la-flatpak-related-ref.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak.lo `test -f 'lib/flatpak.c' || echo '$(srcdir)/'`lib/flatpak.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-related-ref.lo `test -f 'common/flatpak-related-ref.c' || echo '$(srcdir)/'`common/flatpak-related-ref.c -lib/libflatpak_la-flatpak-ref.lo: lib/flatpak-ref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-ref.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-ref.Tpo -c -o lib/libflatpak_la-flatpak-ref.lo `test -f 'lib/flatpak-ref.c' || echo '$(srcdir)/'`lib/flatpak-ref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-ref.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-ref.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-ref.c' object='lib/libflatpak_la-flatpak-ref.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-remote.lo: common/flatpak-remote.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-remote.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Tpo -c -o common/libflatpak_common_la-flatpak-remote.lo `test -f 'common/flatpak-remote.c' || echo '$(srcdir)/'`common/flatpak-remote.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-remote.c' object='common/libflatpak_common_la-flatpak-remote.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-ref.lo `test -f 'lib/flatpak-ref.c' || echo '$(srcdir)/'`lib/flatpak-ref.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-remote.lo `test -f 'common/flatpak-remote.c' || echo '$(srcdir)/'`common/flatpak-remote.c -lib/libflatpak_la-flatpak-installed-ref.lo: lib/flatpak-installed-ref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-installed-ref.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-installed-ref.Tpo -c -o lib/libflatpak_la-flatpak-installed-ref.lo `test -f 'lib/flatpak-installed-ref.c' || echo '$(srcdir)/'`lib/flatpak-installed-ref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-installed-ref.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-installed-ref.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-installed-ref.c' object='lib/libflatpak_la-flatpak-installed-ref.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-error.lo: common/flatpak-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-error.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Tpo -c -o common/libflatpak_common_la-flatpak-error.lo `test -f 'common/flatpak-error.c' || echo '$(srcdir)/'`common/flatpak-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-error.c' object='common/libflatpak_common_la-flatpak-error.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-installed-ref.lo `test -f 'lib/flatpak-installed-ref.c' || echo '$(srcdir)/'`lib/flatpak-installed-ref.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-error.lo `test -f 'common/flatpak-error.c' || echo '$(srcdir)/'`common/flatpak-error.c -lib/libflatpak_la-flatpak-remote-ref.lo: lib/flatpak-remote-ref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-remote-ref.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-remote-ref.Tpo -c -o lib/libflatpak_la-flatpak-remote-ref.lo `test -f 'lib/flatpak-remote-ref.c' || echo '$(srcdir)/'`lib/flatpak-remote-ref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-remote-ref.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-remote-ref.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-remote-ref.c' object='lib/libflatpak_la-flatpak-remote-ref.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-installation.lo: common/flatpak-installation.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-installation.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Tpo -c -o common/libflatpak_common_la-flatpak-installation.lo `test -f 'common/flatpak-installation.c' || echo '$(srcdir)/'`common/flatpak-installation.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-installation.c' object='common/libflatpak_common_la-flatpak-installation.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-remote-ref.lo `test -f 'lib/flatpak-remote-ref.c' || echo '$(srcdir)/'`lib/flatpak-remote-ref.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-installation.lo `test -f 'common/flatpak-installation.c' || echo '$(srcdir)/'`common/flatpak-installation.c -lib/libflatpak_la-flatpak-bundle-ref.lo: lib/flatpak-bundle-ref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-bundle-ref.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-bundle-ref.Tpo -c -o lib/libflatpak_la-flatpak-bundle-ref.lo `test -f 'lib/flatpak-bundle-ref.c' || echo '$(srcdir)/'`lib/flatpak-bundle-ref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-bundle-ref.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-bundle-ref.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-bundle-ref.c' object='lib/libflatpak_la-flatpak-bundle-ref.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-instance.lo: common/flatpak-instance.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-instance.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Tpo -c -o common/libflatpak_common_la-flatpak-instance.lo `test -f 'common/flatpak-instance.c' || echo '$(srcdir)/'`common/flatpak-instance.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-instance.c' object='common/libflatpak_common_la-flatpak-instance.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-bundle-ref.lo `test -f 'lib/flatpak-bundle-ref.c' || echo '$(srcdir)/'`lib/flatpak-bundle-ref.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-instance.lo `test -f 'common/flatpak-instance.c' || echo '$(srcdir)/'`common/flatpak-instance.c -lib/libflatpak_la-flatpak-related-ref.lo: lib/flatpak-related-ref.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-related-ref.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-related-ref.Tpo -c -o lib/libflatpak_la-flatpak-related-ref.lo `test -f 'lib/flatpak-related-ref.c' || echo '$(srcdir)/'`lib/flatpak-related-ref.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-related-ref.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-related-ref.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-related-ref.c' object='lib/libflatpak_la-flatpak-related-ref.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-dbus-generated.lo: common/flatpak-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-dbus-generated.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Tpo -c -o common/libflatpak_common_la-flatpak-dbus-generated.lo `test -f 'common/flatpak-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-dbus-generated.c' object='common/libflatpak_common_la-flatpak-dbus-generated.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-related-ref.lo `test -f 'lib/flatpak-related-ref.c' || echo '$(srcdir)/'`lib/flatpak-related-ref.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-dbus-generated.lo `test -f 'common/flatpak-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-dbus-generated.c -lib/libflatpak_la-flatpak-remote.lo: lib/flatpak-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-remote.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-remote.Tpo -c -o lib/libflatpak_la-flatpak-remote.lo `test -f 'lib/flatpak-remote.c' || echo '$(srcdir)/'`lib/flatpak-remote.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-remote.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-remote.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-remote.c' object='lib/libflatpak_la-flatpak-remote.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-document-dbus-generated.lo: common/flatpak-document-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-document-dbus-generated.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Tpo -c -o common/libflatpak_common_la-flatpak-document-dbus-generated.lo `test -f 'common/flatpak-document-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-document-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-document-dbus-generated.c' object='common/libflatpak_common_la-flatpak-document-dbus-generated.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-remote.lo `test -f 'lib/flatpak-remote.c' || echo '$(srcdir)/'`lib/flatpak-remote.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-document-dbus-generated.lo `test -f 'common/flatpak-document-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-document-dbus-generated.c -lib/libflatpak_la-flatpak-error.lo: lib/flatpak-error.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-error.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-error.Tpo -c -o lib/libflatpak_la-flatpak-error.lo `test -f 'lib/flatpak-error.c' || echo '$(srcdir)/'`lib/flatpak-error.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-error.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-error.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-error.c' object='lib/libflatpak_la-flatpak-error.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo: common/flatpak-systemd-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Tpo -c -o common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo `test -f 'common/flatpak-systemd-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-systemd-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-systemd-dbus-generated.c' object='common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-error.lo `test -f 'lib/flatpak-error.c' || echo '$(srcdir)/'`lib/flatpak-error.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-systemd-dbus-generated.lo `test -f 'common/flatpak-systemd-dbus-generated.c' || echo '$(srcdir)/'`common/flatpak-systemd-dbus-generated.c -lib/libflatpak_la-flatpak-installation.lo: lib/flatpak-installation.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-installation.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-installation.Tpo -c -o lib/libflatpak_la-flatpak-installation.lo `test -f 'lib/flatpak-installation.c' || echo '$(srcdir)/'`lib/flatpak-installation.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-installation.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-installation.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-installation.c' object='lib/libflatpak_la-flatpak-installation.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_common_la-flatpak-enum-types.lo: common/flatpak-enum-types.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_common_la-flatpak-enum-types.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Tpo -c -o common/libflatpak_common_la-flatpak-enum-types.lo `test -f 'common/flatpak-enum-types.c' || echo '$(srcdir)/'`common/flatpak-enum-types.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Tpo common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-enum-types.c' object='common/libflatpak_common_la-flatpak-enum-types.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-installation.lo `test -f 'lib/flatpak-installation.c' || echo '$(srcdir)/'`lib/flatpak-installation.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_common_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_common_la-flatpak-enum-types.lo `test -f 'common/flatpak-enum-types.c' || echo '$(srcdir)/'`common/flatpak-enum-types.c -lib/libflatpak_la-flatpak-enum-types.lo: lib/flatpak-enum-types.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT lib/libflatpak_la-flatpak-enum-types.lo -MD -MP -MF lib/$(DEPDIR)/libflatpak_la-flatpak-enum-types.Tpo -c -o lib/libflatpak_la-flatpak-enum-types.lo `test -f 'lib/flatpak-enum-types.c' || echo '$(srcdir)/'`lib/flatpak-enum-types.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/libflatpak_la-flatpak-enum-types.Tpo lib/$(DEPDIR)/libflatpak_la-flatpak-enum-types.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-enum-types.c' object='lib/libflatpak_la-flatpak-enum-types.lo' libtool=yes @AMDEPBACKSLASH@ +common/libflatpak_la-flatpak.lo: common/flatpak.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -MT common/libflatpak_la-flatpak.lo -MD -MP -MF common/$(DEPDIR)/libflatpak_la-flatpak.Tpo -c -o common/libflatpak_la-flatpak.lo `test -f 'common/flatpak.c' || echo '$(srcdir)/'`common/flatpak.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/libflatpak_la-flatpak.Tpo common/$(DEPDIR)/libflatpak_la-flatpak.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak.c' object='common/libflatpak_la-flatpak.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o lib/libflatpak_la-flatpak-enum-types.lo `test -f 'lib/flatpak-enum-types.c' || echo '$(srcdir)/'`lib/flatpak-enum-types.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libflatpak_la_CFLAGS) $(CFLAGS) -c -o common/libflatpak_la-flatpak.lo `test -f 'common/flatpak.c' || echo '$(srcdir)/'`common/flatpak.c -libglnx/libglnx_la-glnx-backports.lo: libglnx/glnx-backports.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-backports.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-backports.Tpo -c -o libglnx/libglnx_la-glnx-backports.lo `test -f 'libglnx/glnx-backports.c' || echo '$(srcdir)/'`libglnx/glnx-backports.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-backports.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-backports.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-backports.c' object='libglnx/libglnx_la-glnx-backports.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-backports.lo: libglnx/glnx-backports.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-backports.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-backports.Tpo -c -o libglnx/la-glnx-backports.lo `test -f 'libglnx/glnx-backports.c' || echo '$(srcdir)/'`libglnx/glnx-backports.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-backports.Tpo libglnx/$(DEPDIR)/la-glnx-backports.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-backports.c' object='libglnx/la-glnx-backports.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-backports.lo `test -f 'libglnx/glnx-backports.c' || echo '$(srcdir)/'`libglnx/glnx-backports.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-backports.lo `test -f 'libglnx/glnx-backports.c' || echo '$(srcdir)/'`libglnx/glnx-backports.c -libglnx/libglnx_la-glnx-local-alloc.lo: libglnx/glnx-local-alloc.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-local-alloc.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-local-alloc.Tpo -c -o libglnx/libglnx_la-glnx-local-alloc.lo `test -f 'libglnx/glnx-local-alloc.c' || echo '$(srcdir)/'`libglnx/glnx-local-alloc.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-local-alloc.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-local-alloc.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-local-alloc.c' object='libglnx/libglnx_la-glnx-local-alloc.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-local-alloc.lo: libglnx/glnx-local-alloc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-local-alloc.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-local-alloc.Tpo -c -o libglnx/la-glnx-local-alloc.lo `test -f 'libglnx/glnx-local-alloc.c' || echo '$(srcdir)/'`libglnx/glnx-local-alloc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-local-alloc.Tpo libglnx/$(DEPDIR)/la-glnx-local-alloc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-local-alloc.c' object='libglnx/la-glnx-local-alloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-local-alloc.lo `test -f 'libglnx/glnx-local-alloc.c' || echo '$(srcdir)/'`libglnx/glnx-local-alloc.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-local-alloc.lo `test -f 'libglnx/glnx-local-alloc.c' || echo '$(srcdir)/'`libglnx/glnx-local-alloc.c -libglnx/libglnx_la-glnx-errors.lo: libglnx/glnx-errors.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-errors.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-errors.Tpo -c -o libglnx/libglnx_la-glnx-errors.lo `test -f 'libglnx/glnx-errors.c' || echo '$(srcdir)/'`libglnx/glnx-errors.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-errors.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-errors.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-errors.c' object='libglnx/libglnx_la-glnx-errors.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-errors.lo: libglnx/glnx-errors.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-errors.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-errors.Tpo -c -o libglnx/la-glnx-errors.lo `test -f 'libglnx/glnx-errors.c' || echo '$(srcdir)/'`libglnx/glnx-errors.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-errors.Tpo libglnx/$(DEPDIR)/la-glnx-errors.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-errors.c' object='libglnx/la-glnx-errors.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-errors.lo `test -f 'libglnx/glnx-errors.c' || echo '$(srcdir)/'`libglnx/glnx-errors.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-errors.lo `test -f 'libglnx/glnx-errors.c' || echo '$(srcdir)/'`libglnx/glnx-errors.c -libglnx/libglnx_la-glnx-console.lo: libglnx/glnx-console.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-console.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-console.Tpo -c -o libglnx/libglnx_la-glnx-console.lo `test -f 'libglnx/glnx-console.c' || echo '$(srcdir)/'`libglnx/glnx-console.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-console.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-console.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-console.c' object='libglnx/libglnx_la-glnx-console.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-console.lo: libglnx/glnx-console.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-console.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-console.Tpo -c -o libglnx/la-glnx-console.lo `test -f 'libglnx/glnx-console.c' || echo '$(srcdir)/'`libglnx/glnx-console.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-console.Tpo libglnx/$(DEPDIR)/la-glnx-console.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-console.c' object='libglnx/la-glnx-console.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-console.lo `test -f 'libglnx/glnx-console.c' || echo '$(srcdir)/'`libglnx/glnx-console.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-console.lo `test -f 'libglnx/glnx-console.c' || echo '$(srcdir)/'`libglnx/glnx-console.c -libglnx/libglnx_la-glnx-dirfd.lo: libglnx/glnx-dirfd.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-dirfd.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-dirfd.Tpo -c -o libglnx/libglnx_la-glnx-dirfd.lo `test -f 'libglnx/glnx-dirfd.c' || echo '$(srcdir)/'`libglnx/glnx-dirfd.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-dirfd.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-dirfd.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-dirfd.c' object='libglnx/libglnx_la-glnx-dirfd.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-dirfd.lo: libglnx/glnx-dirfd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-dirfd.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-dirfd.Tpo -c -o libglnx/la-glnx-dirfd.lo `test -f 'libglnx/glnx-dirfd.c' || echo '$(srcdir)/'`libglnx/glnx-dirfd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-dirfd.Tpo libglnx/$(DEPDIR)/la-glnx-dirfd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-dirfd.c' object='libglnx/la-glnx-dirfd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-dirfd.lo `test -f 'libglnx/glnx-dirfd.c' || echo '$(srcdir)/'`libglnx/glnx-dirfd.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-dirfd.lo `test -f 'libglnx/glnx-dirfd.c' || echo '$(srcdir)/'`libglnx/glnx-dirfd.c -libglnx/libglnx_la-glnx-fdio.lo: libglnx/glnx-fdio.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-fdio.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-fdio.Tpo -c -o libglnx/libglnx_la-glnx-fdio.lo `test -f 'libglnx/glnx-fdio.c' || echo '$(srcdir)/'`libglnx/glnx-fdio.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-fdio.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-fdio.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-fdio.c' object='libglnx/libglnx_la-glnx-fdio.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-fdio.lo: libglnx/glnx-fdio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-fdio.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-fdio.Tpo -c -o libglnx/la-glnx-fdio.lo `test -f 'libglnx/glnx-fdio.c' || echo '$(srcdir)/'`libglnx/glnx-fdio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-fdio.Tpo libglnx/$(DEPDIR)/la-glnx-fdio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-fdio.c' object='libglnx/la-glnx-fdio.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-fdio.lo `test -f 'libglnx/glnx-fdio.c' || echo '$(srcdir)/'`libglnx/glnx-fdio.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-fdio.lo `test -f 'libglnx/glnx-fdio.c' || echo '$(srcdir)/'`libglnx/glnx-fdio.c -libglnx/libglnx_la-glnx-lockfile.lo: libglnx/glnx-lockfile.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-lockfile.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-lockfile.Tpo -c -o libglnx/libglnx_la-glnx-lockfile.lo `test -f 'libglnx/glnx-lockfile.c' || echo '$(srcdir)/'`libglnx/glnx-lockfile.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-lockfile.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-lockfile.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-lockfile.c' object='libglnx/libglnx_la-glnx-lockfile.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-lockfile.lo: libglnx/glnx-lockfile.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-lockfile.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-lockfile.Tpo -c -o libglnx/la-glnx-lockfile.lo `test -f 'libglnx/glnx-lockfile.c' || echo '$(srcdir)/'`libglnx/glnx-lockfile.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-lockfile.Tpo libglnx/$(DEPDIR)/la-glnx-lockfile.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-lockfile.c' object='libglnx/la-glnx-lockfile.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-lockfile.lo `test -f 'libglnx/glnx-lockfile.c' || echo '$(srcdir)/'`libglnx/glnx-lockfile.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-lockfile.lo `test -f 'libglnx/glnx-lockfile.c' || echo '$(srcdir)/'`libglnx/glnx-lockfile.c -libglnx/libglnx_la-glnx-xattrs.lo: libglnx/glnx-xattrs.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-xattrs.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-xattrs.Tpo -c -o libglnx/libglnx_la-glnx-xattrs.lo `test -f 'libglnx/glnx-xattrs.c' || echo '$(srcdir)/'`libglnx/glnx-xattrs.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-xattrs.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-xattrs.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-xattrs.c' object='libglnx/libglnx_la-glnx-xattrs.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-xattrs.lo: libglnx/glnx-xattrs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-xattrs.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-xattrs.Tpo -c -o libglnx/la-glnx-xattrs.lo `test -f 'libglnx/glnx-xattrs.c' || echo '$(srcdir)/'`libglnx/glnx-xattrs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-xattrs.Tpo libglnx/$(DEPDIR)/la-glnx-xattrs.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-xattrs.c' object='libglnx/la-glnx-xattrs.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-xattrs.lo `test -f 'libglnx/glnx-xattrs.c' || echo '$(srcdir)/'`libglnx/glnx-xattrs.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-xattrs.lo `test -f 'libglnx/glnx-xattrs.c' || echo '$(srcdir)/'`libglnx/glnx-xattrs.c -libglnx/libglnx_la-glnx-shutil.lo: libglnx/glnx-shutil.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/libglnx_la-glnx-shutil.lo -MD -MP -MF libglnx/$(DEPDIR)/libglnx_la-glnx-shutil.Tpo -c -o libglnx/libglnx_la-glnx-shutil.lo `test -f 'libglnx/glnx-shutil.c' || echo '$(srcdir)/'`libglnx/glnx-shutil.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/libglnx_la-glnx-shutil.Tpo libglnx/$(DEPDIR)/libglnx_la-glnx-shutil.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-shutil.c' object='libglnx/libglnx_la-glnx-shutil.lo' libtool=yes @AMDEPBACKSLASH@ +libglnx/la-glnx-shutil.lo: libglnx/glnx-shutil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -MT libglnx/la-glnx-shutil.lo -MD -MP -MF libglnx/$(DEPDIR)/la-glnx-shutil.Tpo -c -o libglnx/la-glnx-shutil.lo `test -f 'libglnx/glnx-shutil.c' || echo '$(srcdir)/'`libglnx/glnx-shutil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libglnx/$(DEPDIR)/la-glnx-shutil.Tpo libglnx/$(DEPDIR)/la-glnx-shutil.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libglnx/glnx-shutil.c' object='libglnx/la-glnx-shutil.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/libglnx_la-glnx-shutil.lo `test -f 'libglnx/glnx-shutil.c' || echo '$(srcdir)/'`libglnx/glnx-shutil.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libglnx_la_CFLAGS) $(CFLAGS) -c -o libglnx/la-glnx-shutil.lo `test -f 'libglnx/glnx-shutil.c' || echo '$(srcdir)/'`libglnx/glnx-shutil.c app/flatpak-flatpak-main.o: app/flatpak-main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-main.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-main.Tpo -c -o app/flatpak-flatpak-main.o `test -f 'app/flatpak-main.c' || echo '$(srcdir)/'`app/flatpak-main.c @@ -2696,89 +3040,89 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-utils.obj `if test -f 'app/flatpak-builtins-utils.c'; then $(CYGPATH_W) 'app/flatpak-builtins-utils.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-utils.c'; fi` -app/flatpak-flatpak-transaction.o: app/flatpak-transaction.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-transaction.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-transaction.Tpo -c -o app/flatpak-flatpak-transaction.o `test -f 'app/flatpak-transaction.c' || echo '$(srcdir)/'`app/flatpak-transaction.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-transaction.Tpo app/$(DEPDIR)/flatpak-flatpak-transaction.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-transaction.c' object='app/flatpak-flatpak-transaction.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-add.o: app/flatpak-builtins-remote-add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-add.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Tpo -c -o app/flatpak-flatpak-builtins-remote-add.o `test -f 'app/flatpak-builtins-remote-add.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-add.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-add.c' object='app/flatpak-flatpak-builtins-remote-add.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-transaction.o `test -f 'app/flatpak-transaction.c' || echo '$(srcdir)/'`app/flatpak-transaction.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-add.o `test -f 'app/flatpak-builtins-remote-add.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-add.c -app/flatpak-flatpak-transaction.obj: app/flatpak-transaction.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-transaction.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-transaction.Tpo -c -o app/flatpak-flatpak-transaction.obj `if test -f 'app/flatpak-transaction.c'; then $(CYGPATH_W) 'app/flatpak-transaction.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-transaction.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-transaction.Tpo app/$(DEPDIR)/flatpak-flatpak-transaction.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-transaction.c' object='app/flatpak-flatpak-transaction.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-add.obj: app/flatpak-builtins-remote-add.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-add.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Tpo -c -o app/flatpak-flatpak-builtins-remote-add.obj `if test -f 'app/flatpak-builtins-remote-add.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-add.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-add.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-add.c' object='app/flatpak-flatpak-builtins-remote-add.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-transaction.obj `if test -f 'app/flatpak-transaction.c'; then $(CYGPATH_W) 'app/flatpak-transaction.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-transaction.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-add.obj `if test -f 'app/flatpak-builtins-remote-add.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-add.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-add.c'; fi` -app/flatpak-flatpak-builtins-add-remote.o: app/flatpak-builtins-add-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-add-remote.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Tpo -c -o app/flatpak-flatpak-builtins-add-remote.o `test -f 'app/flatpak-builtins-add-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-add-remote.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-add-remote.c' object='app/flatpak-flatpak-builtins-add-remote.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-modify.o: app/flatpak-builtins-remote-modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-modify.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Tpo -c -o app/flatpak-flatpak-builtins-remote-modify.o `test -f 'app/flatpak-builtins-remote-modify.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-modify.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-modify.c' object='app/flatpak-flatpak-builtins-remote-modify.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-add-remote.o `test -f 'app/flatpak-builtins-add-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-add-remote.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-modify.o `test -f 'app/flatpak-builtins-remote-modify.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-modify.c -app/flatpak-flatpak-builtins-add-remote.obj: app/flatpak-builtins-add-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-add-remote.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Tpo -c -o app/flatpak-flatpak-builtins-add-remote.obj `if test -f 'app/flatpak-builtins-add-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-add-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-add-remote.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-add-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-add-remote.c' object='app/flatpak-flatpak-builtins-add-remote.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-modify.obj: app/flatpak-builtins-remote-modify.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-modify.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Tpo -c -o app/flatpak-flatpak-builtins-remote-modify.obj `if test -f 'app/flatpak-builtins-remote-modify.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-modify.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-modify.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-modify.c' object='app/flatpak-flatpak-builtins-remote-modify.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-add-remote.obj `if test -f 'app/flatpak-builtins-add-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-add-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-add-remote.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-modify.obj `if test -f 'app/flatpak-builtins-remote-modify.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-modify.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-modify.c'; fi` -app/flatpak-flatpak-builtins-delete-remote.o: app/flatpak-builtins-delete-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-delete-remote.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Tpo -c -o app/flatpak-flatpak-builtins-delete-remote.o `test -f 'app/flatpak-builtins-delete-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-delete-remote.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-delete-remote.c' object='app/flatpak-flatpak-builtins-delete-remote.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-delete.o: app/flatpak-builtins-remote-delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-delete.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Tpo -c -o app/flatpak-flatpak-builtins-remote-delete.o `test -f 'app/flatpak-builtins-remote-delete.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-delete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-delete.c' object='app/flatpak-flatpak-builtins-remote-delete.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-delete-remote.o `test -f 'app/flatpak-builtins-delete-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-delete-remote.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-delete.o `test -f 'app/flatpak-builtins-remote-delete.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-delete.c -app/flatpak-flatpak-builtins-delete-remote.obj: app/flatpak-builtins-delete-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-delete-remote.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Tpo -c -o app/flatpak-flatpak-builtins-delete-remote.obj `if test -f 'app/flatpak-builtins-delete-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-delete-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-delete-remote.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-delete-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-delete-remote.c' object='app/flatpak-flatpak-builtins-delete-remote.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-delete.obj: app/flatpak-builtins-remote-delete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-delete.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Tpo -c -o app/flatpak-flatpak-builtins-remote-delete.obj `if test -f 'app/flatpak-builtins-remote-delete.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-delete.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-delete.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-delete.c' object='app/flatpak-flatpak-builtins-remote-delete.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-delete-remote.obj `if test -f 'app/flatpak-builtins-delete-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-delete-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-delete-remote.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-delete.obj `if test -f 'app/flatpak-builtins-remote-delete.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-delete.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-delete.c'; fi` -app/flatpak-flatpak-builtins-list-remotes.o: app/flatpak-builtins-list-remotes.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-list-remotes.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Tpo -c -o app/flatpak-flatpak-builtins-list-remotes.o `test -f 'app/flatpak-builtins-list-remotes.c' || echo '$(srcdir)/'`app/flatpak-builtins-list-remotes.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-list-remotes.c' object='app/flatpak-flatpak-builtins-list-remotes.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-list.o: app/flatpak-builtins-remote-list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-list.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Tpo -c -o app/flatpak-flatpak-builtins-remote-list.o `test -f 'app/flatpak-builtins-remote-list.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-list.c' object='app/flatpak-flatpak-builtins-remote-list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-list-remotes.o `test -f 'app/flatpak-builtins-list-remotes.c' || echo '$(srcdir)/'`app/flatpak-builtins-list-remotes.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-list.o `test -f 'app/flatpak-builtins-remote-list.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-list.c -app/flatpak-flatpak-builtins-list-remotes.obj: app/flatpak-builtins-list-remotes.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-list-remotes.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Tpo -c -o app/flatpak-flatpak-builtins-list-remotes.obj `if test -f 'app/flatpak-builtins-list-remotes.c'; then $(CYGPATH_W) 'app/flatpak-builtins-list-remotes.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-list-remotes.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-list-remotes.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-list-remotes.c' object='app/flatpak-flatpak-builtins-list-remotes.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-list.obj: app/flatpak-builtins-remote-list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-list.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Tpo -c -o app/flatpak-flatpak-builtins-remote-list.obj `if test -f 'app/flatpak-builtins-remote-list.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-list.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-list.c' object='app/flatpak-flatpak-builtins-remote-list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-list-remotes.obj `if test -f 'app/flatpak-builtins-list-remotes.c'; then $(CYGPATH_W) 'app/flatpak-builtins-list-remotes.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-list-remotes.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-list.obj `if test -f 'app/flatpak-builtins-remote-list.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-list.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-list.c'; fi` -app/flatpak-flatpak-builtins-ls-remote.o: app/flatpak-builtins-ls-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-ls-remote.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Tpo -c -o app/flatpak-flatpak-builtins-ls-remote.o `test -f 'app/flatpak-builtins-ls-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-ls-remote.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-ls-remote.c' object='app/flatpak-flatpak-builtins-ls-remote.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-ls.o: app/flatpak-builtins-remote-ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-ls.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Tpo -c -o app/flatpak-flatpak-builtins-remote-ls.o `test -f 'app/flatpak-builtins-remote-ls.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-ls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-ls.c' object='app/flatpak-flatpak-builtins-remote-ls.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-ls-remote.o `test -f 'app/flatpak-builtins-ls-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-ls-remote.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-ls.o `test -f 'app/flatpak-builtins-remote-ls.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-ls.c -app/flatpak-flatpak-builtins-ls-remote.obj: app/flatpak-builtins-ls-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-ls-remote.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Tpo -c -o app/flatpak-flatpak-builtins-ls-remote.obj `if test -f 'app/flatpak-builtins-ls-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-ls-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-ls-remote.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-ls-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-ls-remote.c' object='app/flatpak-flatpak-builtins-ls-remote.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-ls.obj: app/flatpak-builtins-remote-ls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-ls.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Tpo -c -o app/flatpak-flatpak-builtins-remote-ls.obj `if test -f 'app/flatpak-builtins-remote-ls.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-ls.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-ls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-ls.c' object='app/flatpak-flatpak-builtins-remote-ls.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-ls-remote.obj `if test -f 'app/flatpak-builtins-ls-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-ls-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-ls-remote.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-ls.obj `if test -f 'app/flatpak-builtins-remote-ls.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-ls.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-ls.c'; fi` -app/flatpak-flatpak-builtins-info-remote.o: app/flatpak-builtins-info-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-info-remote.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Tpo -c -o app/flatpak-flatpak-builtins-info-remote.o `test -f 'app/flatpak-builtins-info-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-info-remote.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-info-remote.c' object='app/flatpak-flatpak-builtins-info-remote.o' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-info.o: app/flatpak-builtins-remote-info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-info.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Tpo -c -o app/flatpak-flatpak-builtins-remote-info.o `test -f 'app/flatpak-builtins-remote-info.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-info.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-info.c' object='app/flatpak-flatpak-builtins-remote-info.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-info-remote.o `test -f 'app/flatpak-builtins-info-remote.c' || echo '$(srcdir)/'`app/flatpak-builtins-info-remote.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-info.o `test -f 'app/flatpak-builtins-remote-info.c' || echo '$(srcdir)/'`app/flatpak-builtins-remote-info.c -app/flatpak-flatpak-builtins-info-remote.obj: app/flatpak-builtins-info-remote.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-info-remote.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Tpo -c -o app/flatpak-flatpak-builtins-info-remote.obj `if test -f 'app/flatpak-builtins-info-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-info-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-info-remote.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-info-remote.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-info-remote.c' object='app/flatpak-flatpak-builtins-info-remote.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-remote-info.obj: app/flatpak-builtins-remote-info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-remote-info.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Tpo -c -o app/flatpak-flatpak-builtins-remote-info.obj `if test -f 'app/flatpak-builtins-remote-info.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-info.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-info.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-remote-info.c' object='app/flatpak-flatpak-builtins-remote-info.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-info-remote.obj `if test -f 'app/flatpak-builtins-info-remote.c'; then $(CYGPATH_W) 'app/flatpak-builtins-info-remote.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-info-remote.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-remote-info.obj `if test -f 'app/flatpak-builtins-remote-info.c'; then $(CYGPATH_W) 'app/flatpak-builtins-remote-info.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-remote-info.c'; fi` app/flatpak-flatpak-builtins-install.o: app/flatpak-builtins-install.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-install.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-install.Tpo -c -o app/flatpak-flatpak-builtins-install.o `test -f 'app/flatpak-builtins-install.c' || echo '$(srcdir)/'`app/flatpak-builtins-install.c @@ -2920,6 +3264,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-enter.obj `if test -f 'app/flatpak-builtins-enter.c'; then $(CYGPATH_W) 'app/flatpak-builtins-enter.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-enter.c'; fi` +app/flatpak-flatpak-builtins-ps.o: app/flatpak-builtins-ps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-ps.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Tpo -c -o app/flatpak-flatpak-builtins-ps.o `test -f 'app/flatpak-builtins-ps.c' || echo '$(srcdir)/'`app/flatpak-builtins-ps.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-ps.c' object='app/flatpak-flatpak-builtins-ps.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-ps.o `test -f 'app/flatpak-builtins-ps.c' || echo '$(srcdir)/'`app/flatpak-builtins-ps.c + +app/flatpak-flatpak-builtins-ps.obj: app/flatpak-builtins-ps.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-ps.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Tpo -c -o app/flatpak-flatpak-builtins-ps.obj `if test -f 'app/flatpak-builtins-ps.c'; then $(CYGPATH_W) 'app/flatpak-builtins-ps.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-ps.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-ps.c' object='app/flatpak-flatpak-builtins-ps.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-ps.obj `if test -f 'app/flatpak-builtins-ps.c'; then $(CYGPATH_W) 'app/flatpak-builtins-ps.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-ps.c'; fi` + app/flatpak-flatpak-builtins-build-init.o: app/flatpak-builtins-build-init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-build-init.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Tpo -c -o app/flatpak-flatpak-builtins-build-init.o `test -f 'app/flatpak-builtins-build-init.c' || echo '$(srcdir)/'`app/flatpak-builtins-build-init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po @@ -3032,19 +3390,19 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-build-sign.obj `if test -f 'app/flatpak-builtins-build-sign.c'; then $(CYGPATH_W) 'app/flatpak-builtins-build-sign.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-build-sign.c'; fi` -app/flatpak-flatpak-builtins-repo-update.o: app/flatpak-builtins-repo-update.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-repo-update.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Tpo -c -o app/flatpak-flatpak-builtins-repo-update.o `test -f 'app/flatpak-builtins-repo-update.c' || echo '$(srcdir)/'`app/flatpak-builtins-repo-update.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-repo-update.c' object='app/flatpak-flatpak-builtins-repo-update.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-repo-update.o `test -f 'app/flatpak-builtins-repo-update.c' || echo '$(srcdir)/'`app/flatpak-builtins-repo-update.c - -app/flatpak-flatpak-builtins-repo-update.obj: app/flatpak-builtins-repo-update.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-repo-update.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Tpo -c -o app/flatpak-flatpak-builtins-repo-update.obj `if test -f 'app/flatpak-builtins-repo-update.c'; then $(CYGPATH_W) 'app/flatpak-builtins-repo-update.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-repo-update.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-repo-update.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-repo-update.c' object='app/flatpak-flatpak-builtins-repo-update.obj' libtool=no @AMDEPBACKSLASH@ +app/flatpak-flatpak-builtins-build-update-repo.o: app/flatpak-builtins-build-update-repo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-build-update-repo.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Tpo -c -o app/flatpak-flatpak-builtins-build-update-repo.o `test -f 'app/flatpak-builtins-build-update-repo.c' || echo '$(srcdir)/'`app/flatpak-builtins-build-update-repo.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-build-update-repo.c' object='app/flatpak-flatpak-builtins-build-update-repo.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-build-update-repo.o `test -f 'app/flatpak-builtins-build-update-repo.c' || echo '$(srcdir)/'`app/flatpak-builtins-build-update-repo.c + +app/flatpak-flatpak-builtins-build-update-repo.obj: app/flatpak-builtins-build-update-repo.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-build-update-repo.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Tpo -c -o app/flatpak-flatpak-builtins-build-update-repo.obj `if test -f 'app/flatpak-builtins-build-update-repo.c'; then $(CYGPATH_W) 'app/flatpak-builtins-build-update-repo.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-build-update-repo.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-build-update-repo.c' object='app/flatpak-flatpak-builtins-build-update-repo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-repo-update.obj `if test -f 'app/flatpak-builtins-repo-update.c'; then $(CYGPATH_W) 'app/flatpak-builtins-repo-update.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-repo-update.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-build-update-repo.obj `if test -f 'app/flatpak-builtins-build-update-repo.c'; then $(CYGPATH_W) 'app/flatpak-builtins-build-update-repo.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-build-update-repo.c'; fi` app/flatpak-flatpak-builtins-repo.o: app/flatpak-builtins-repo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-repo.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Tpo -c -o app/flatpak-flatpak-builtins-repo.o `test -f 'app/flatpak-builtins-repo.c' || echo '$(srcdir)/'`app/flatpak-builtins-repo.c @@ -3116,6 +3474,62 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-document-list.obj `if test -f 'app/flatpak-builtins-document-list.c'; then $(CYGPATH_W) 'app/flatpak-builtins-document-list.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-document-list.c'; fi` +app/flatpak-flatpak-builtins-permission-remove.o: app/flatpak-builtins-permission-remove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-remove.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Tpo -c -o app/flatpak-flatpak-builtins-permission-remove.o `test -f 'app/flatpak-builtins-permission-remove.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-remove.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-remove.c' object='app/flatpak-flatpak-builtins-permission-remove.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-remove.o `test -f 'app/flatpak-builtins-permission-remove.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-remove.c + +app/flatpak-flatpak-builtins-permission-remove.obj: app/flatpak-builtins-permission-remove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-remove.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Tpo -c -o app/flatpak-flatpak-builtins-permission-remove.obj `if test -f 'app/flatpak-builtins-permission-remove.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-remove.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-remove.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-remove.c' object='app/flatpak-flatpak-builtins-permission-remove.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-remove.obj `if test -f 'app/flatpak-builtins-permission-remove.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-remove.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-remove.c'; fi` + +app/flatpak-flatpak-builtins-permission-list.o: app/flatpak-builtins-permission-list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-list.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Tpo -c -o app/flatpak-flatpak-builtins-permission-list.o `test -f 'app/flatpak-builtins-permission-list.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-list.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-list.c' object='app/flatpak-flatpak-builtins-permission-list.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-list.o `test -f 'app/flatpak-builtins-permission-list.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-list.c + +app/flatpak-flatpak-builtins-permission-list.obj: app/flatpak-builtins-permission-list.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-list.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Tpo -c -o app/flatpak-flatpak-builtins-permission-list.obj `if test -f 'app/flatpak-builtins-permission-list.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-list.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-list.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-list.c' object='app/flatpak-flatpak-builtins-permission-list.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-list.obj `if test -f 'app/flatpak-builtins-permission-list.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-list.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-list.c'; fi` + +app/flatpak-flatpak-builtins-permission-show.o: app/flatpak-builtins-permission-show.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-show.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Tpo -c -o app/flatpak-flatpak-builtins-permission-show.o `test -f 'app/flatpak-builtins-permission-show.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-show.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-show.c' object='app/flatpak-flatpak-builtins-permission-show.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-show.o `test -f 'app/flatpak-builtins-permission-show.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-show.c + +app/flatpak-flatpak-builtins-permission-show.obj: app/flatpak-builtins-permission-show.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-show.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Tpo -c -o app/flatpak-flatpak-builtins-permission-show.obj `if test -f 'app/flatpak-builtins-permission-show.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-show.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-show.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-show.c' object='app/flatpak-flatpak-builtins-permission-show.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-show.obj `if test -f 'app/flatpak-builtins-permission-show.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-show.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-show.c'; fi` + +app/flatpak-flatpak-builtins-permission-reset.o: app/flatpak-builtins-permission-reset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-reset.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Tpo -c -o app/flatpak-flatpak-builtins-permission-reset.o `test -f 'app/flatpak-builtins-permission-reset.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-reset.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-reset.c' object='app/flatpak-flatpak-builtins-permission-reset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-reset.o `test -f 'app/flatpak-builtins-permission-reset.c' || echo '$(srcdir)/'`app/flatpak-builtins-permission-reset.c + +app/flatpak-flatpak-builtins-permission-reset.obj: app/flatpak-builtins-permission-reset.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-permission-reset.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Tpo -c -o app/flatpak-flatpak-builtins-permission-reset.obj `if test -f 'app/flatpak-builtins-permission-reset.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-reset.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-reset.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-permission-reset.c' object='app/flatpak-flatpak-builtins-permission-reset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-permission-reset.obj `if test -f 'app/flatpak-builtins-permission-reset.c'; then $(CYGPATH_W) 'app/flatpak-builtins-permission-reset.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-permission-reset.c'; fi` + app/flatpak-flatpak-builtins-search.o: app/flatpak-builtins-search.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-search.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-search.Tpo -c -o app/flatpak-flatpak-builtins-search.o `test -f 'app/flatpak-builtins-search.c' || echo '$(srcdir)/'`app/flatpak-builtins-search.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-search.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po @@ -3130,6 +3544,104 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-search.obj `if test -f 'app/flatpak-builtins-search.c'; then $(CYGPATH_W) 'app/flatpak-builtins-search.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-search.c'; fi` +app/flatpak-flatpak-builtins-repair.o: app/flatpak-builtins-repair.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-repair.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Tpo -c -o app/flatpak-flatpak-builtins-repair.o `test -f 'app/flatpak-builtins-repair.c' || echo '$(srcdir)/'`app/flatpak-builtins-repair.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-repair.c' object='app/flatpak-flatpak-builtins-repair.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-repair.o `test -f 'app/flatpak-builtins-repair.c' || echo '$(srcdir)/'`app/flatpak-builtins-repair.c + +app/flatpak-flatpak-builtins-repair.obj: app/flatpak-builtins-repair.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-repair.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Tpo -c -o app/flatpak-flatpak-builtins-repair.obj `if test -f 'app/flatpak-builtins-repair.c'; then $(CYGPATH_W) 'app/flatpak-builtins-repair.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-repair.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-repair.c' object='app/flatpak-flatpak-builtins-repair.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-repair.obj `if test -f 'app/flatpak-builtins-repair.c'; then $(CYGPATH_W) 'app/flatpak-builtins-repair.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-repair.c'; fi` + +app/flatpak-flatpak-builtins-create-usb.o: app/flatpak-builtins-create-usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-create-usb.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Tpo -c -o app/flatpak-flatpak-builtins-create-usb.o `test -f 'app/flatpak-builtins-create-usb.c' || echo '$(srcdir)/'`app/flatpak-builtins-create-usb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-create-usb.c' object='app/flatpak-flatpak-builtins-create-usb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-create-usb.o `test -f 'app/flatpak-builtins-create-usb.c' || echo '$(srcdir)/'`app/flatpak-builtins-create-usb.c + +app/flatpak-flatpak-builtins-create-usb.obj: app/flatpak-builtins-create-usb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-builtins-create-usb.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Tpo -c -o app/flatpak-flatpak-builtins-create-usb.obj `if test -f 'app/flatpak-builtins-create-usb.c'; then $(CYGPATH_W) 'app/flatpak-builtins-create-usb.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-create-usb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Tpo app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-builtins-create-usb.c' object='app/flatpak-flatpak-builtins-create-usb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-builtins-create-usb.obj `if test -f 'app/flatpak-builtins-create-usb.c'; then $(CYGPATH_W) 'app/flatpak-builtins-create-usb.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-builtins-create-usb.c'; fi` + +app/flatpak-flatpak-table-printer.o: app/flatpak-table-printer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-table-printer.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-table-printer.Tpo -c -o app/flatpak-flatpak-table-printer.o `test -f 'app/flatpak-table-printer.c' || echo '$(srcdir)/'`app/flatpak-table-printer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-table-printer.Tpo app/$(DEPDIR)/flatpak-flatpak-table-printer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-table-printer.c' object='app/flatpak-flatpak-table-printer.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-table-printer.o `test -f 'app/flatpak-table-printer.c' || echo '$(srcdir)/'`app/flatpak-table-printer.c + +app/flatpak-flatpak-table-printer.obj: app/flatpak-table-printer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-table-printer.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-table-printer.Tpo -c -o app/flatpak-flatpak-table-printer.obj `if test -f 'app/flatpak-table-printer.c'; then $(CYGPATH_W) 'app/flatpak-table-printer.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-table-printer.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-table-printer.Tpo app/$(DEPDIR)/flatpak-flatpak-table-printer.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-table-printer.c' object='app/flatpak-flatpak-table-printer.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-table-printer.obj `if test -f 'app/flatpak-table-printer.c'; then $(CYGPATH_W) 'app/flatpak-table-printer.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-table-printer.c'; fi` + +app/flatpak-flatpak-complete.o: app/flatpak-complete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-complete.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-complete.Tpo -c -o app/flatpak-flatpak-complete.o `test -f 'app/flatpak-complete.c' || echo '$(srcdir)/'`app/flatpak-complete.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-complete.Tpo app/$(DEPDIR)/flatpak-flatpak-complete.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-complete.c' object='app/flatpak-flatpak-complete.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-complete.o `test -f 'app/flatpak-complete.c' || echo '$(srcdir)/'`app/flatpak-complete.c + +app/flatpak-flatpak-complete.obj: app/flatpak-complete.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-complete.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-complete.Tpo -c -o app/flatpak-flatpak-complete.obj `if test -f 'app/flatpak-complete.c'; then $(CYGPATH_W) 'app/flatpak-complete.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-complete.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-complete.Tpo app/$(DEPDIR)/flatpak-flatpak-complete.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-complete.c' object='app/flatpak-flatpak-complete.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-complete.obj `if test -f 'app/flatpak-complete.c'; then $(CYGPATH_W) 'app/flatpak-complete.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-complete.c'; fi` + +app/flatpak-flatpak-cli-transaction.o: app/flatpak-cli-transaction.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-cli-transaction.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Tpo -c -o app/flatpak-flatpak-cli-transaction.o `test -f 'app/flatpak-cli-transaction.c' || echo '$(srcdir)/'`app/flatpak-cli-transaction.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Tpo app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-cli-transaction.c' object='app/flatpak-flatpak-cli-transaction.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-cli-transaction.o `test -f 'app/flatpak-cli-transaction.c' || echo '$(srcdir)/'`app/flatpak-cli-transaction.c + +app/flatpak-flatpak-cli-transaction.obj: app/flatpak-cli-transaction.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-cli-transaction.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Tpo -c -o app/flatpak-flatpak-cli-transaction.obj `if test -f 'app/flatpak-cli-transaction.c'; then $(CYGPATH_W) 'app/flatpak-cli-transaction.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-cli-transaction.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Tpo app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-cli-transaction.c' object='app/flatpak-flatpak-cli-transaction.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-cli-transaction.obj `if test -f 'app/flatpak-cli-transaction.c'; then $(CYGPATH_W) 'app/flatpak-cli-transaction.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-cli-transaction.c'; fi` + +app/flatpak-flatpak-permission-dbus-generated.o: app/flatpak-permission-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-permission-dbus-generated.o -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Tpo -c -o app/flatpak-flatpak-permission-dbus-generated.o `test -f 'app/flatpak-permission-dbus-generated.c' || echo '$(srcdir)/'`app/flatpak-permission-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Tpo app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-permission-dbus-generated.c' object='app/flatpak-flatpak-permission-dbus-generated.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-permission-dbus-generated.o `test -f 'app/flatpak-permission-dbus-generated.c' || echo '$(srcdir)/'`app/flatpak-permission-dbus-generated.c + +app/flatpak-flatpak-permission-dbus-generated.obj: app/flatpak-permission-dbus-generated.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-flatpak-permission-dbus-generated.obj -MD -MP -MF app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Tpo -c -o app/flatpak-flatpak-permission-dbus-generated.obj `if test -f 'app/flatpak-permission-dbus-generated.c'; then $(CYGPATH_W) 'app/flatpak-permission-dbus-generated.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-permission-dbus-generated.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Tpo app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/flatpak-permission-dbus-generated.c' object='app/flatpak-flatpak-permission-dbus-generated.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-flatpak-permission-dbus-generated.obj `if test -f 'app/flatpak-permission-dbus-generated.c'; then $(CYGPATH_W) 'app/flatpak-permission-dbus-generated.c'; else $(CYGPATH_W) '$(srcdir)/app/flatpak-permission-dbus-generated.c'; fi` + +app/flatpak-parse-datetime.o: app/parse-datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-parse-datetime.o -MD -MP -MF app/$(DEPDIR)/flatpak-parse-datetime.Tpo -c -o app/flatpak-parse-datetime.o `test -f 'app/parse-datetime.c' || echo '$(srcdir)/'`app/parse-datetime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-parse-datetime.Tpo app/$(DEPDIR)/flatpak-parse-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/parse-datetime.c' object='app/flatpak-parse-datetime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-parse-datetime.o `test -f 'app/parse-datetime.c' || echo '$(srcdir)/'`app/parse-datetime.c + +app/flatpak-parse-datetime.obj: app/parse-datetime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -MT app/flatpak-parse-datetime.obj -MD -MP -MF app/$(DEPDIR)/flatpak-parse-datetime.Tpo -c -o app/flatpak-parse-datetime.obj `if test -f 'app/parse-datetime.c'; then $(CYGPATH_W) 'app/parse-datetime.c'; else $(CYGPATH_W) '$(srcdir)/app/parse-datetime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) app/$(DEPDIR)/flatpak-parse-datetime.Tpo app/$(DEPDIR)/flatpak-parse-datetime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='app/parse-datetime.c' object='app/flatpak-parse-datetime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_CFLAGS) $(CFLAGS) -c -o app/flatpak-parse-datetime.obj `if test -f 'app/parse-datetime.c'; then $(CYGPATH_W) 'app/parse-datetime.c'; else $(CYGPATH_W) '$(srcdir)/app/parse-datetime.c'; fi` + bubblewrap/flatpak_bwrap-bubblewrap.o: bubblewrap/bubblewrap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_bwrap_CFLAGS) $(CFLAGS) -MT bubblewrap/flatpak_bwrap-bubblewrap.o -MD -MP -MF bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Tpo -c -o bubblewrap/flatpak_bwrap-bubblewrap.o `test -f 'bubblewrap/bubblewrap.c' || echo '$(srcdir)/'`bubblewrap/bubblewrap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Tpo bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po @@ -3214,6 +3726,62 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_dbus_proxy_CFLAGS) $(CFLAGS) -c -o dbus-proxy/flatpak_dbus_proxy-dbus-proxy.obj `if test -f 'dbus-proxy/dbus-proxy.c'; then $(CYGPATH_W) 'dbus-proxy/dbus-proxy.c'; else $(CYGPATH_W) '$(srcdir)/dbus-proxy/dbus-proxy.c'; fi` +portal/flatpak_portal-flatpak-portal.o: portal/flatpak-portal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal.o -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Tpo -c -o portal/flatpak_portal-flatpak-portal.o `test -f 'portal/flatpak-portal.c' || echo '$(srcdir)/'`portal/flatpak-portal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal.c' object='portal/flatpak_portal-flatpak-portal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal.o `test -f 'portal/flatpak-portal.c' || echo '$(srcdir)/'`portal/flatpak-portal.c + +portal/flatpak_portal-flatpak-portal.obj: portal/flatpak-portal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal.obj -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Tpo -c -o portal/flatpak_portal-flatpak-portal.obj `if test -f 'portal/flatpak-portal.c'; then $(CYGPATH_W) 'portal/flatpak-portal.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal.c' object='portal/flatpak_portal-flatpak-portal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal.obj `if test -f 'portal/flatpak-portal.c'; then $(CYGPATH_W) 'portal/flatpak-portal.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal.c'; fi` + +portal/flatpak_portal-flatpak-portal-app-info.o: portal/flatpak-portal-app-info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal-app-info.o -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Tpo -c -o portal/flatpak_portal-flatpak-portal-app-info.o `test -f 'portal/flatpak-portal-app-info.c' || echo '$(srcdir)/'`portal/flatpak-portal-app-info.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal-app-info.c' object='portal/flatpak_portal-flatpak-portal-app-info.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal-app-info.o `test -f 'portal/flatpak-portal-app-info.c' || echo '$(srcdir)/'`portal/flatpak-portal-app-info.c + +portal/flatpak_portal-flatpak-portal-app-info.obj: portal/flatpak-portal-app-info.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal-app-info.obj -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Tpo -c -o portal/flatpak_portal-flatpak-portal-app-info.obj `if test -f 'portal/flatpak-portal-app-info.c'; then $(CYGPATH_W) 'portal/flatpak-portal-app-info.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal-app-info.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal-app-info.c' object='portal/flatpak_portal-flatpak-portal-app-info.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal-app-info.obj `if test -f 'portal/flatpak-portal-app-info.c'; then $(CYGPATH_W) 'portal/flatpak-portal-app-info.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal-app-info.c'; fi` + +common/flatpak_portal-flatpak-portal-error.o: common/flatpak-portal-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT common/flatpak_portal-flatpak-portal-error.o -MD -MP -MF common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Tpo -c -o common/flatpak_portal-flatpak-portal-error.o `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Tpo common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-portal-error.c' object='common/flatpak_portal-flatpak-portal-error.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o common/flatpak_portal-flatpak-portal-error.o `test -f 'common/flatpak-portal-error.c' || echo '$(srcdir)/'`common/flatpak-portal-error.c + +common/flatpak_portal-flatpak-portal-error.obj: common/flatpak-portal-error.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT common/flatpak_portal-flatpak-portal-error.obj -MD -MP -MF common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Tpo -c -o common/flatpak_portal-flatpak-portal-error.obj `if test -f 'common/flatpak-portal-error.c'; then $(CYGPATH_W) 'common/flatpak-portal-error.c'; else $(CYGPATH_W) '$(srcdir)/common/flatpak-portal-error.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Tpo common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/flatpak-portal-error.c' object='common/flatpak_portal-flatpak-portal-error.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o common/flatpak_portal-flatpak-portal-error.obj `if test -f 'common/flatpak-portal-error.c'; then $(CYGPATH_W) 'common/flatpak-portal-error.c'; else $(CYGPATH_W) '$(srcdir)/common/flatpak-portal-error.c'; fi` + +portal/flatpak_portal-flatpak-portal-dbus.o: portal/flatpak-portal-dbus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal-dbus.o -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Tpo -c -o portal/flatpak_portal-flatpak-portal-dbus.o `test -f 'portal/flatpak-portal-dbus.c' || echo '$(srcdir)/'`portal/flatpak-portal-dbus.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal-dbus.c' object='portal/flatpak_portal-flatpak-portal-dbus.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal-dbus.o `test -f 'portal/flatpak-portal-dbus.c' || echo '$(srcdir)/'`portal/flatpak-portal-dbus.c + +portal/flatpak_portal-flatpak-portal-dbus.obj: portal/flatpak-portal-dbus.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -MT portal/flatpak_portal-flatpak-portal-dbus.obj -MD -MP -MF portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Tpo -c -o portal/flatpak_portal-flatpak-portal-dbus.obj `if test -f 'portal/flatpak-portal-dbus.c'; then $(CYGPATH_W) 'portal/flatpak-portal-dbus.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal-dbus.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Tpo portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='portal/flatpak-portal-dbus.c' object='portal/flatpak_portal-flatpak-portal-dbus.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(flatpak_portal_CPPFLAGS) $(CPPFLAGS) $(flatpak_portal_CFLAGS) $(CFLAGS) -c -o portal/flatpak_portal-flatpak-portal-dbus.obj `if test -f 'portal/flatpak-portal-dbus.c'; then $(CYGPATH_W) 'portal/flatpak-portal-dbus.c'; else $(CYGPATH_W) '$(srcdir)/portal/flatpak-portal-dbus.c'; fi` + session-helper/flatpak_session_helper-flatpak-session-helper.o: session-helper/flatpak-session-helper.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_session_helper_CFLAGS) $(CFLAGS) -MT session-helper/flatpak_session_helper-flatpak-session-helper.o -MD -MP -MF session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Tpo -c -o session-helper/flatpak_session_helper-flatpak-session-helper.o `test -f 'session-helper/flatpak-session-helper.c' || echo '$(srcdir)/'`session-helper/flatpak-session-helper.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Tpo session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po @@ -3242,33 +3810,19 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_system_helper_CFLAGS) $(CFLAGS) -c -o system-helper/flatpak_system_helper-flatpak-system-helper.obj `if test -f 'system-helper/flatpak-system-helper.c'; then $(CYGPATH_W) 'system-helper/flatpak-system-helper.c'; else $(CYGPATH_W) '$(srcdir)/system-helper/flatpak-system-helper.c'; fi` -lib/flatpak_system_helper-flatpak-error.o: lib/flatpak-error.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_system_helper_CFLAGS) $(CFLAGS) -MT lib/flatpak_system_helper-flatpak-error.o -MD -MP -MF lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Tpo -c -o lib/flatpak_system_helper-flatpak-error.o `test -f 'lib/flatpak-error.c' || echo '$(srcdir)/'`lib/flatpak-error.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Tpo lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-error.c' object='lib/flatpak_system_helper-flatpak-error.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_system_helper_CFLAGS) $(CFLAGS) -c -o lib/flatpak_system_helper-flatpak-error.o `test -f 'lib/flatpak-error.c' || echo '$(srcdir)/'`lib/flatpak-error.c - -lib/flatpak_system_helper-flatpak-error.obj: lib/flatpak-error.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_system_helper_CFLAGS) $(CFLAGS) -MT lib/flatpak_system_helper-flatpak-error.obj -MD -MP -MF lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Tpo -c -o lib/flatpak_system_helper-flatpak-error.obj `if test -f 'lib/flatpak-error.c'; then $(CYGPATH_W) 'lib/flatpak-error.c'; else $(CYGPATH_W) '$(srcdir)/lib/flatpak-error.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Tpo lib/$(DEPDIR)/flatpak_system_helper-flatpak-error.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/flatpak-error.c' object='lib/flatpak_system_helper-flatpak-error.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(flatpak_system_helper_CFLAGS) $(CFLAGS) -c -o lib/flatpak_system_helper-flatpak-error.obj `if test -f 'lib/flatpak-error.c'; then $(CYGPATH_W) 'lib/flatpak-error.c'; else $(CYGPATH_W) '$(srcdir)/lib/flatpak-error.c'; fi` - -lib/test_libflatpak-test-lib.o: lib/test-lib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -MT lib/test_libflatpak-test-lib.o -MD -MP -MF lib/$(DEPDIR)/test_libflatpak-test-lib.Tpo -c -o lib/test_libflatpak-test-lib.o `test -f 'lib/test-lib.c' || echo '$(srcdir)/'`lib/test-lib.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/test_libflatpak-test-lib.Tpo lib/$(DEPDIR)/test_libflatpak-test-lib.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/test-lib.c' object='lib/test_libflatpak-test-lib.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -c -o lib/test_libflatpak-test-lib.o `test -f 'lib/test-lib.c' || echo '$(srcdir)/'`lib/test-lib.c - -lib/test_libflatpak-test-lib.obj: lib/test-lib.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -MT lib/test_libflatpak-test-lib.obj -MD -MP -MF lib/$(DEPDIR)/test_libflatpak-test-lib.Tpo -c -o lib/test_libflatpak-test-lib.obj `if test -f 'lib/test-lib.c'; then $(CYGPATH_W) 'lib/test-lib.c'; else $(CYGPATH_W) '$(srcdir)/lib/test-lib.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) lib/$(DEPDIR)/test_libflatpak-test-lib.Tpo lib/$(DEPDIR)/test_libflatpak-test-lib.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lib/test-lib.c' object='lib/test_libflatpak-test-lib.obj' libtool=no @AMDEPBACKSLASH@ +common/test_libflatpak-test-lib.o: common/test-lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -MT common/test_libflatpak-test-lib.o -MD -MP -MF common/$(DEPDIR)/test_libflatpak-test-lib.Tpo -c -o common/test_libflatpak-test-lib.o `test -f 'common/test-lib.c' || echo '$(srcdir)/'`common/test-lib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/test_libflatpak-test-lib.Tpo common/$(DEPDIR)/test_libflatpak-test-lib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/test-lib.c' object='common/test_libflatpak-test-lib.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -c -o common/test_libflatpak-test-lib.o `test -f 'common/test-lib.c' || echo '$(srcdir)/'`common/test-lib.c + +common/test_libflatpak-test-lib.obj: common/test-lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -MT common/test_libflatpak-test-lib.obj -MD -MP -MF common/$(DEPDIR)/test_libflatpak-test-lib.Tpo -c -o common/test_libflatpak-test-lib.obj `if test -f 'common/test-lib.c'; then $(CYGPATH_W) 'common/test-lib.c'; else $(CYGPATH_W) '$(srcdir)/common/test-lib.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) common/$(DEPDIR)/test_libflatpak-test-lib.Tpo common/$(DEPDIR)/test_libflatpak-test-lib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='common/test-lib.c' object='common/test_libflatpak-test-lib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -c -o lib/test_libflatpak-test-lib.obj `if test -f 'lib/test-lib.c'; then $(CYGPATH_W) 'lib/test-lib.c'; else $(CYGPATH_W) '$(srcdir)/lib/test-lib.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libflatpak_CFLAGS) $(CFLAGS) -c -o common/test_libflatpak-test-lib.obj `if test -f 'common/test-lib.c'; then $(CYGPATH_W) 'common/test-lib.c'; else $(CYGPATH_W) '$(srcdir)/common/test-lib.c'; fi` libglnx/tests/test_libglnx_errors-test-libglnx-errors.o: libglnx/tests/test-libglnx-errors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_libglnx_errors_CFLAGS) $(CFLAGS) -MT libglnx/tests/test_libglnx_errors-test-libglnx-errors.o -MD -MP -MF libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Tpo -c -o libglnx/tests/test_libglnx_errors-test-libglnx-errors.o `test -f 'libglnx/tests/test-libglnx-errors.c' || echo '$(srcdir)/'`libglnx/tests/test-libglnx-errors.c @@ -3354,38 +3908,52 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testlibrary_CFLAGS) $(CFLAGS) -c -o tests/testlibrary-testlibrary.obj `if test -f 'tests/testlibrary.c'; then $(CYGPATH_W) 'tests/testlibrary.c'; else $(CYGPATH_W) '$(srcdir)/tests/testlibrary.c'; fi` +tests/httpcache-httpcache.o: tests/httpcache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_httpcache_CFLAGS) $(CFLAGS) -MT tests/httpcache-httpcache.o -MD -MP -MF tests/$(DEPDIR)/httpcache-httpcache.Tpo -c -o tests/httpcache-httpcache.o `test -f 'tests/httpcache.c' || echo '$(srcdir)/'`tests/httpcache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/httpcache-httpcache.Tpo tests/$(DEPDIR)/httpcache-httpcache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/httpcache.c' object='tests/httpcache-httpcache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_httpcache_CFLAGS) $(CFLAGS) -c -o tests/httpcache-httpcache.o `test -f 'tests/httpcache.c' || echo '$(srcdir)/'`tests/httpcache.c + +tests/httpcache-httpcache.obj: tests/httpcache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_httpcache_CFLAGS) $(CFLAGS) -MT tests/httpcache-httpcache.obj -MD -MP -MF tests/$(DEPDIR)/httpcache-httpcache.Tpo -c -o tests/httpcache-httpcache.obj `if test -f 'tests/httpcache.c'; then $(CYGPATH_W) 'tests/httpcache.c'; else $(CYGPATH_W) '$(srcdir)/tests/httpcache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) tests/$(DEPDIR)/httpcache-httpcache.Tpo tests/$(DEPDIR)/httpcache-httpcache.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tests/httpcache.c' object='tests/httpcache-httpcache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(tests_httpcache_CFLAGS) $(CFLAGS) -c -o tests/httpcache-httpcache.obj `if test -f 'tests/httpcache.c'; then $(CYGPATH_W) 'tests/httpcache.c'; else $(CYGPATH_W) '$(srcdir)/tests/httpcache.c'; fi` + mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf common/.libs common/_libs - -rm -rf lib/.libs lib/_libs -rm -rf libglnx/.libs libglnx/_libs + -rm -rf tests/.libs tests/_libs distclean-libtool: -rm -f libtool config.lt -install-completionDATA: $(completion_DATA) +install-bashcompletionDATA: $(bashcompletion_DATA) @$(NORMAL_INSTALL) - @list='$(completion_DATA)'; test -n "$(completiondir)" || list=; \ + @list='$(bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(completiondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(completiondir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(bashcompletiondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bashcompletiondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(completiondir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(completiondir)" || exit $$?; \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bashcompletiondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bashcompletiondir)" || exit $$?; \ done -uninstall-completionDATA: +uninstall-bashcompletionDATA: @$(NORMAL_UNINSTALL) - @list='$(completion_DATA)'; test -n "$(completiondir)" || list=; \ + @list='$(bashcompletion_DATA)'; test -n "$(bashcompletiondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(completiondir)'; $(am__uninstall_files_from_dir) + dir='$(DESTDIR)$(bashcompletiondir)'; $(am__uninstall_files_from_dir) install-dbus_serviceDATA: $(dbus_service_DATA) @$(NORMAL_INSTALL) @list='$(dbus_service_DATA)'; test -n "$(dbus_servicedir)" || list=; \ @@ -3788,6 +4356,27 @@ @list='$(systemduserunit_DATA)'; test -n "$(systemduserunitdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(systemduserunitdir)'; $(am__uninstall_files_from_dir) +install-zshcompletionDATA: $(zshcompletion_DATA) + @$(NORMAL_INSTALL) + @list='$(zshcompletion_DATA)'; test -n "$(zshcompletiondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(zshcompletiondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(zshcompletiondir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(zshcompletiondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(zshcompletiondir)" || exit $$?; \ + done + +uninstall-zshcompletionDATA: + @$(NORMAL_UNINSTALL) + @list='$(zshcompletion_DATA)'; test -n "$(zshcompletiondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(zshcompletiondir)'; $(am__uninstall_files_from_dir) install-flatpakincludeHEADERS: $(flatpakinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(flatpakinclude_HEADERS)'; test -n "$(flatpakincludedir)" || list=; \ @@ -4057,7 +4646,7 @@ fi; \ $$success || exit 1 -check-TESTS: +check-TESTS: $(check_PROGRAMS) $(check_LTLIBRARIES) $(check_SCRIPTS) $(check_DATA) @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @@ -4067,7 +4656,7 @@ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; -recheck: all $(check_LTLIBRARIES) $(check_PROGRAMS) $(check_SCRIPTS) $(check_DATA) +recheck: all $(check_PROGRAMS) $(check_LTLIBRARIES) $(check_SCRIPTS) $(check_DATA) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ @@ -4085,86 +4674,114 @@ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-basic.sh.log: tests/test-basic.sh - @p='tests/test-basic.sh'; \ - b='tests/test-basic.sh'; \ +tests/test-run@user,nodeltas.wrap.log: tests/test-run@user,nodeltas.wrap + @p='tests/test-run@user,nodeltas.wrap'; \ + b='tests/test-run@user,nodeltas.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-run.sh.log: tests/test-run.sh - @p='tests/test-run.sh'; \ - b='tests/test-run.sh'; \ +tests/test-run@user,deltas.wrap.log: tests/test-run@user,deltas.wrap + @p='tests/test-run@user,deltas.wrap'; \ + b='tests/test-run@user,deltas.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-run-system.sh.log: tests/test-run-system.sh - @p='tests/test-run-system.sh'; \ - b='tests/test-run-system.sh'; \ +tests/test-run@system,nodeltas.wrap.log: tests/test-run@system,nodeltas.wrap + @p='tests/test-run@system,nodeltas.wrap'; \ + b='tests/test-run@system,nodeltas.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-run-deltas.sh.log: tests/test-run-deltas.sh - @p='tests/test-run-deltas.sh'; \ - b='tests/test-run-deltas.sh'; \ +tests/test-run@system,deltas.wrap.log: tests/test-run@system,deltas.wrap + @p='tests/test-run@system,deltas.wrap'; \ + b='tests/test-run@system,deltas.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-run-system-deltas.sh.log: tests/test-run-system-deltas.sh - @p='tests/test-run-system-deltas.sh'; \ - b='tests/test-run-system-deltas.sh'; \ +tests/test-repo@user.wrap.log: tests/test-repo@user.wrap + @p='tests/test-repo@user.wrap'; \ + b='tests/test-repo@user.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-repo.sh.log: tests/test-repo.sh - @p='tests/test-repo.sh'; \ - b='tests/test-repo.sh'; \ +tests/test-repo@system.wrap.log: tests/test-repo@system.wrap + @p='tests/test-repo@system.wrap'; \ + b='tests/test-repo@system.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-repo-collections.sh.log: tests/test-repo-collections.sh - @p='tests/test-repo-collections.sh'; \ - b='tests/test-repo-collections.sh'; \ +tests/test-repo@collections.wrap.log: tests/test-repo@collections.wrap + @p='tests/test-repo@collections.wrap'; \ + b='tests/test-repo@collections.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-repo-collections-server-only.sh.log: tests/test-repo-collections-server-only.sh - @p='tests/test-repo-collections-server-only.sh'; \ - b='tests/test-repo-collections-server-only.sh'; \ +tests/test-repo@collections-server-only.wrap.log: tests/test-repo@collections-server-only.wrap + @p='tests/test-repo@collections-server-only.wrap'; \ + b='tests/test-repo@collections-server-only.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-repo-system.sh.log: tests/test-repo-system.sh - @p='tests/test-repo-system.sh'; \ - b='tests/test-repo-system.sh'; \ +tests/test-bundle@user.wrap.log: tests/test-bundle@user.wrap + @p='tests/test-bundle@user.wrap'; \ + b='tests/test-bundle@user.wrap'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-extensions.sh.log: tests/test-extensions.sh - @p='tests/test-extensions.sh'; \ - b='tests/test-extensions.sh'; \ +tests/test-bundle@system.wrap.log: tests/test-bundle@system.wrap + @p='tests/test-bundle@system.wrap'; \ + b='tests/test-bundle@system.wrap'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +tests/test-oci-registry@user.wrap.log: tests/test-oci-registry@user.wrap + @p='tests/test-oci-registry@user.wrap'; \ + b='tests/test-oci-registry@user.wrap'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +tests/test-oci-registry@system.wrap.log: tests/test-oci-registry@system.wrap + @p='tests/test-oci-registry@system.wrap'; \ + b='tests/test-oci-registry@system.wrap'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +tests/test-basic.sh.log: tests/test-basic.sh + @p='tests/test-basic.sh'; \ + b='tests/test-basic.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-bundle.sh.log: tests/test-bundle.sh - @p='tests/test-bundle.sh'; \ - b='tests/test-bundle.sh'; \ +tests/test-build-update-repo.sh.log: tests/test-build-update-repo.sh + @p='tests/test-build-update-repo.sh'; \ + b='tests/test-build-update-repo.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) -tests/test-bundle-system.sh.log: tests/test-bundle-system.sh - @p='tests/test-bundle-system.sh'; \ - b='tests/test-bundle-system.sh'; \ +tests/test-http-utils.sh.log: tests/test-http-utils.sh + @p='tests/test-http-utils.sh'; \ + b='tests/test-http-utils.sh'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +tests/test-extensions.sh.log: tests/test-extensions.sh + @p='tests/test-extensions.sh'; \ + b='tests/test-extensions.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ @@ -4240,7 +4857,10 @@ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) -distdir: $(DISTFILES) +distdir: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) distdir-am + +distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @@ -4428,18 +5048,18 @@ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) \ + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_LTLIBRARIES) \ $(check_SCRIPTS) $(check_DATA) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive -all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ +all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(SCRIPTS) $(DATA) \ $(HEADERS) config.h install-binPROGRAMS: install-libLTLIBRARIES installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bwrapdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(triggersdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(scriptsdir)" "$(DESTDIR)$(completiondir)" "$(DESTDIR)$(dbus_servicedir)" "$(DESTDIR)$(dbussnippetdir)" "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(installed_test_keyringdir)" "$(DESTDIR)$(installed_test_keyring2dir)" "$(DESTDIR)$(envdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(installed_test_metadir)" "$(DESTDIR)$(introspectiondir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(polkit_policydir)" "$(DESTDIR)$(polkit_rulesdir)" "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(systemduserunitdir)" "$(DESTDIR)$(flatpakincludedir)" "$(DESTDIR)$(flatpakincludedir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bwrapdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libexecdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(libdir)" "$(DESTDIR)$(triggersdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(scriptsdir)" "$(DESTDIR)$(bashcompletiondir)" "$(DESTDIR)$(dbus_servicedir)" "$(DESTDIR)$(dbussnippetdir)" "$(DESTDIR)$(dbussystemservicedir)" "$(DESTDIR)$(dbusconfdir)" "$(DESTDIR)$(installed_test_keyringdir)" "$(DESTDIR)$(installed_test_keyring2dir)" "$(DESTDIR)$(envdir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(installed_test_metadir)" "$(DESTDIR)$(introspectiondir)" "$(DESTDIR)$(installed_testdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibdir)" "$(DESTDIR)$(pkgconfigdir)" "$(DESTDIR)$(polkit_policydir)" "$(DESTDIR)$(polkit_rulesdir)" "$(DESTDIR)$(profiledir)" "$(DESTDIR)$(systemdsystemunitdir)" "$(DESTDIR)$(systemduserunitdir)" "$(DESTDIR)$(zshcompletiondir)" "$(DESTDIR)$(flatpakincludedir)" "$(DESTDIR)$(flatpakincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) @@ -4481,12 +5101,12 @@ -rm -f common/$(am__dirstamp) -rm -f dbus-proxy/$(DEPDIR)/$(am__dirstamp) -rm -f dbus-proxy/$(am__dirstamp) - -rm -f lib/$(DEPDIR)/$(am__dirstamp) - -rm -f lib/$(am__dirstamp) -rm -f libglnx/$(DEPDIR)/$(am__dirstamp) -rm -f libglnx/$(am__dirstamp) -rm -f libglnx/tests/$(DEPDIR)/$(am__dirstamp) -rm -f libglnx/tests/$(am__dirstamp) + -rm -f portal/$(DEPDIR)/$(am__dirstamp) + -rm -f portal/$(am__dirstamp) -rm -f session-helper/$(DEPDIR)/$(am__dirstamp) -rm -f session-helper/$(am__dirstamp) -rm -f system-helper/$(DEPDIR)/$(am__dirstamp) @@ -4510,7 +5130,107 @@ distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf app/$(DEPDIR) bubblewrap/$(DEPDIR) common/$(DEPDIR) dbus-proxy/$(DEPDIR) lib/$(DEPDIR) libglnx/$(DEPDIR) libglnx/tests/$(DEPDIR) session-helper/$(DEPDIR) system-helper/$(DEPDIR) tests/$(DEPDIR) + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-bundle.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-commit-from.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-export.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-finish.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-import-bundle.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-sign.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-config.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-export.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-unexport.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-enter.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-install.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-make-current.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-override.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-run.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-uninstall.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-update.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-utils.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-complete.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-main.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-table-printer.Po + -rm -f app/$(DEPDIR)/flatpak-parse-datetime.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-bind-mount.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-network.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-utils.Po + -rm -f common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-bwrap.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-context.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-dir.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-exports.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-json-oci.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-oci-registry.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-run.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Plo + -rm -f common/$(DEPDIR)/libflatpak_la-flatpak.Plo + -rm -f common/$(DEPDIR)/test_libflatpak-test-lib.Po + -rm -f dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-dbus-proxy.Po + -rm -f dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-flatpak-proxy.Po + -rm -f libglnx/$(DEPDIR)/la-glnx-backports.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-console.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-dirfd.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-errors.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-fdio.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-local-alloc.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-lockfile.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-shutil.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-xattrs.Plo + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_fdio-test-libglnx-fdio.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_macros-test-libglnx-macros.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_shutil-test-libglnx-shutil.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_xattrs-test-libglnx-xattrs.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po + -rm -f session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po + -rm -f system-helper/$(DEPDIR)/flatpak_system_helper-flatpak-system-helper.Po + -rm -f tests/$(DEPDIR)/httpcache-httpcache.Po + -rm -f tests/$(DEPDIR)/testlibrary-testlibrary.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags @@ -4527,7 +5247,7 @@ info-am: -install-data-am: install-bwrapPROGRAMS install-completionDATA \ +install-data-am: install-bashcompletionDATA install-bwrapPROGRAMS \ install-dbus_serviceDATA install-dbussnippetDATA \ install-dbussystemserviceDATA install-dist_dbusconfDATA \ install-dist_installed_test_keyring2DATA \ @@ -4542,7 +5262,8 @@ install-nodist_typelibDATA install-pkgconfigDATA \ install-polkit_policyDATA install-polkit_rulesDATA \ install-profileDATA install-scriptsSCRIPTS \ - install-systemdsystemunitDATA install-systemduserunitDATA + install-systemdsystemunitDATA install-systemduserunitDATA \ + install-zshcompletionDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive @@ -4575,7 +5296,107 @@ maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf app/$(DEPDIR) bubblewrap/$(DEPDIR) common/$(DEPDIR) dbus-proxy/$(DEPDIR) lib/$(DEPDIR) libglnx/$(DEPDIR) libglnx/tests/$(DEPDIR) session-helper/$(DEPDIR) system-helper/$(DEPDIR) tests/$(DEPDIR) + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-bundle.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-commit-from.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-export.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-finish.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-import-bundle.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-init.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-sign.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build-update-repo.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-build.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-config.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-create-usb.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-export.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-document-unexport.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-enter.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-install.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-make-current.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-override.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-remove.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-reset.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-permission-show.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-ps.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-add.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-delete.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-info.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-list.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-ls.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-remote-modify.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-repair.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-repo.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-run.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-search.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-uninstall.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-update.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-builtins-utils.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-cli-transaction.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-complete.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-main.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-permission-dbus-generated.Po + -rm -f app/$(DEPDIR)/flatpak-flatpak-table-printer.Po + -rm -f app/$(DEPDIR)/flatpak-parse-datetime.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-bind-mount.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-bubblewrap.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-network.Po + -rm -f bubblewrap/$(DEPDIR)/flatpak_bwrap-utils.Po + -rm -f common/$(DEPDIR)/flatpak_portal-flatpak-portal-error.Po + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-bundle-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-bwrap.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-chain-input-stream.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-context.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-dir.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-document-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-enum-types.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-error.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-exports.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-installation.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-installed-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-instance.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-json-oci.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-json.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-oci-registry.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-portal-error.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-related-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-remote-ref.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-remote.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-run.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-systemd-dbus-generated.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-transaction.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-utils-http.Plo + -rm -f common/$(DEPDIR)/libflatpak_common_la-flatpak-utils.Plo + -rm -f common/$(DEPDIR)/libflatpak_la-flatpak.Plo + -rm -f common/$(DEPDIR)/test_libflatpak-test-lib.Po + -rm -f dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-dbus-proxy.Po + -rm -f dbus-proxy/$(DEPDIR)/flatpak_dbus_proxy-flatpak-proxy.Po + -rm -f libglnx/$(DEPDIR)/la-glnx-backports.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-console.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-dirfd.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-errors.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-fdio.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-local-alloc.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-lockfile.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-shutil.Plo + -rm -f libglnx/$(DEPDIR)/la-glnx-xattrs.Plo + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_errors-test-libglnx-errors.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_fdio-test-libglnx-fdio.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_macros-test-libglnx-macros.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_shutil-test-libglnx-shutil.Po + -rm -f libglnx/tests/$(DEPDIR)/test_libglnx_xattrs-test-libglnx-xattrs.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal-app-info.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal-dbus.Po + -rm -f portal/$(DEPDIR)/flatpak_portal-flatpak-portal.Po + -rm -f session-helper/$(DEPDIR)/flatpak_session_helper-flatpak-session-helper.Po + -rm -f system-helper/$(DEPDIR)/flatpak_system_helper-flatpak-system-helper.Po + -rm -f tests/$(DEPDIR)/httpcache-httpcache.Po + -rm -f tests/$(DEPDIR)/testlibrary-testlibrary.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic @@ -4592,8 +5413,8 @@ ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-bwrapPROGRAMS \ - uninstall-completionDATA uninstall-dbus_serviceDATA \ +uninstall-am: uninstall-bashcompletionDATA uninstall-binPROGRAMS \ + uninstall-bwrapPROGRAMS uninstall-dbus_serviceDATA \ uninstall-dbussnippetDATA uninstall-dbussystemserviceDATA \ uninstall-dist_dbusconfDATA \ uninstall-dist_installed_test_keyring2DATA \ @@ -4611,26 +5432,26 @@ uninstall-pkgconfigDATA uninstall-polkit_policyDATA \ uninstall-polkit_rulesDATA uninstall-profileDATA \ uninstall-scriptsSCRIPTS uninstall-systemdsystemunitDATA \ - uninstall-systemduserunitDATA + uninstall-systemduserunitDATA uninstall-zshcompletionDATA .MAKE: $(am__recursive_targets) all check check-am install install-am \ install-data-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ - am--refresh check check-TESTS check-am clean clean-binPROGRAMS \ - clean-bwrapPROGRAMS clean-checkLTLIBRARIES clean-checkPROGRAMS \ - clean-cscope clean-generic clean-installed_testLTLIBRARIES \ - clean-installed_testPROGRAMS clean-libLTLIBRARIES \ - clean-libexecPROGRAMS clean-libtool clean-noinstLTLIBRARIES \ - clean-noinstPROGRAMS cscope cscopelist-am ctags ctags-am dist \ - dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ - dist-xz dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-tags distcleancheck distdir distuninstallcheck dvi \ - dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-bwrapPROGRAMS \ - install-completionDATA install-data install-data-am \ - install-data-hook install-dbus_serviceDATA \ + am--depfiles am--refresh check check-TESTS check-am clean \ + clean-binPROGRAMS clean-bwrapPROGRAMS clean-checkLTLIBRARIES \ + clean-checkPROGRAMS clean-cscope clean-generic \ + clean-installed_testLTLIBRARIES clean-installed_testPROGRAMS \ + clean-libLTLIBRARIES clean-libexecPROGRAMS clean-libtool \ + clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscope \ + cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ + dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-bashcompletionDATA \ + install-binPROGRAMS install-bwrapPROGRAMS install-data \ + install-data-am install-data-hook install-dbus_serviceDATA \ install-dbussnippetDATA install-dbussystemserviceDATA \ install-dist_dbusconfDATA \ install-dist_installed_test_keyring2DATA \ @@ -4650,12 +5471,13 @@ install-polkit_rulesDATA install-profileDATA install-ps \ install-ps-am install-scriptsSCRIPTS install-strip \ install-systemdsystemunitDATA install-systemduserunitDATA \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am recheck tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-bwrapPROGRAMS \ - uninstall-completionDATA uninstall-dbus_serviceDATA \ + install-zshcompletionDATA installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am \ + uninstall-bashcompletionDATA uninstall-binPROGRAMS \ + uninstall-bwrapPROGRAMS uninstall-dbus_serviceDATA \ uninstall-dbussnippetDATA uninstall-dbussystemserviceDATA \ uninstall-dist_dbusconfDATA \ uninstall-dist_installed_test_keyring2DATA \ @@ -4673,7 +5495,7 @@ uninstall-pkgconfigDATA uninstall-polkit_policyDATA \ uninstall-polkit_rulesDATA uninstall-profileDATA \ uninstall-scriptsSCRIPTS uninstall-systemdsystemunitDATA \ - uninstall-systemduserunitDATA + uninstall-systemduserunitDATA uninstall-zshcompletionDATA .PRECIOUS: Makefile @@ -4681,7 +5503,10 @@ @ENABLE_INSTALLED_TESTS_TRUE@%.test: %$(EXEEXT) Makefile @ENABLE_INSTALLED_TESTS_TRUE@ $(AM_V_GEN) (echo '[Test]' > $@.tmp; \ @ENABLE_INSTALLED_TESTS_TRUE@ echo 'Type=session' >> $@.tmp; \ -@ENABLE_INSTALLED_TESTS_TRUE@ echo 'Exec=env G_TEST_SRCDIR=$(installed_testdir) G_TEST_BUILDDIR=$(installed_testdir) $(installed_testdir)/$(notdir $<) --tap' >> $@.tmp; \ +@ENABLE_INSTALLED_TESTS_TRUE@ if [[ $(notdir $<) == *.wrap ]]; then \ +@ENABLE_INSTALLED_TESTS_TRUE@ wrapper=$(installed_testdir)/test-wrapper.sh; \ +@ENABLE_INSTALLED_TESTS_TRUE@ fi; \ +@ENABLE_INSTALLED_TESTS_TRUE@ echo "Exec=env G_TEST_SRCDIR=$(installed_testdir) G_TEST_BUILDDIR=$(installed_testdir) $$wrapper $(installed_testdir)/$(notdir $<) --tap" >> $@.tmp; \ @ENABLE_INSTALLED_TESTS_TRUE@ echo 'Output=TAP' >> $@.tmp; \ @ENABLE_INSTALLED_TESTS_TRUE@ mv $@.tmp $@) @@ -4690,49 +5515,76 @@ -e "s|\@localstatedir\@|$(localstatedir)|" \ -e "s|\@extraargs\@||" $< > $@ -common/flatpak-dbus.c: data/org.freedesktop.Flatpak.xml Makefile +common/flatpak-enum-types.h: $(flatpakinclude_HEADERS) common/flatpak-enum-types.h.template + $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ + common/flatpak-enum-types.h.tmp && mv common/flatpak-enum-types.h.tmp common/flatpak-enum-types.h + +common/flatpak-enum-types.c: $(flatpakinclude_HEADERS) common/flatpak-enum-types.c.template + $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ + common/flatpak-enum-types.c.tmp && mv common/flatpak-enum-types.c.tmp common/flatpak-enum-types.c + +common/flatpak-dbus-generated.c: data/org.freedesktop.Flatpak.xml Makefile mkdir -p $(builddir)/common $(AM_V_GEN) $(GDBUS_CODEGEN) \ --interface-prefix org.freedesktop.Flatpak. \ --c-namespace Flatpak \ - --generate-c-code $(builddir)/common/flatpak-dbus \ + --generate-c-code $(builddir)/common/flatpak-dbus-generated \ $(srcdir)/data/org.freedesktop.Flatpak.xml \ $(NULL) -common/flatpak-document-dbus.c: data/org.freedesktop.portal.Documents.xml Makefile +common/flatpak-document-dbus-generated.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 \ + --generate-c-code $(builddir)/common/flatpak-document-dbus-generated \ $(srcdir)/data/org.freedesktop.portal.Documents.xml \ $(NULL) -common/flatpak-systemd-dbus.c: data/org.freedesktop.systemd1.xml Makefile +common/flatpak-systemd-dbus-generated.c: data/org.freedesktop.systemd1.xml Makefile mkdir -p $(builddir)/common $(AM_V_GEN) $(GDBUS_CODEGEN) \ --interface-prefix org.freedesktop.systemd1. \ --c-namespace Systemd \ - --generate-c-code $(builddir)/common/flatpak-systemd-dbus \ + --generate-c-code $(builddir)/common/flatpak-systemd-dbus-generated \ $(srcdir)/data/org.freedesktop.systemd1.xml \ $(NULL) -common/%-dbus.h: common/%-dbus.c +common/%-dbus-generated.h: common/%-dbus-generated.c @true # Built as a side-effect of the rules for the .c -lib/flatpak-enum-types.h: $(flatpakinclude_HEADERS) lib/flatpak-enum-types.h.template - $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ - lib/flatpak-enum-types.h.tmp && mv lib/flatpak-enum-types.h.tmp lib/flatpak-enum-types.h - -lib/flatpak-enum-types.c: $(flatpakinclude_HEADERS) lib/flatpak-enum-types.c.template - $(AM_V_GEN) $(GLIB_MKENUMS) --template $(filter %.template,$^) $(filter-out %.template,$^) > \ - lib/flatpak-enum-types.c.tmp && mv lib/flatpak-enum-types.c.tmp lib/flatpak-enum-types.c - # gobject-introspection rules -include $(INTROSPECTION_MAKEFILE) @HAVE_INTROSPECTION_TRUE@Flatpak-1.0.gir: libflatpak.la Makefile +app/flatpak-permission-dbus-generated.c: data/org.freedesktop.impl.portal.PermissionStore.xml Makefile + mkdir -p $(builddir)/common + $(AM_V_GEN) $(GDBUS_CODEGEN) \ + --interface-prefix org.freedesktop.impl.portal \ + --c-namespace XdpDbus \ + --generate-c-code $(builddir)/app/flatpak-permission-dbus-generated \ + $(srcdir)/data/org.freedesktop.impl.portal.PermissionStore.xml \ + $(NULL) + +app/%-dbus-generated.h: app/%-dbus-generated.c + @true # Built as a side-effect of the rules for the .c + +app/parse-datetime.c: app/parse-datetime.y Makefile + $(AM_V_GEN) $(YACC) $< -o $@ + +portal/flatpak-portal-dbus.c: data/org.freedesktop.portal.Flatpak.xml Makefile + mkdir -p $(builddir)/portal + $(AM_V_GEN) $(GDBUS_CODEGEN) \ + --interface-prefix org.freedesktop.portal \ + --c-namespace Portal \ + --generate-c-code $(builddir)/portal/flatpak-portal-dbus \ + $(srcdir)/data/org.freedesktop.portal.Flatpak.xml \ + $(NULL) + +portal/%-dbus.h: portal/%-dbus.c + @true # Built as a side-effect of the rules for the .c + @BUILD_SYSTEM_HELPER_TRUE@system-helper/org.freedesktop.Flatpak.rules: system-helper/org.freedesktop.Flatpak.rules.in @BUILD_SYSTEM_HELPER_TRUE@ $(AM_V_GEN) $(SED) -e "s|\@privileged_group\@|$(PRIVILEGED_GROUP)|" $< > $@ @@ -4759,6 +5611,12 @@ tests/test-basic.sh: tests/package_version.txt +update-test-matrix: + $(srcdir)/tests/expand-test-matrix.sh "$(TEST_MATRIX_SOURCE)" > tests/Makefile-test-matrix.am.inc + +tests/test-%.wrap: + @true + @VALGRIND_CHECK_RULES@ # NOTE: bwrap is install-bwrapPROGS which is run from install-data, not install-exec, this data-hook is used diff -Nru flatpak-0.11.3/missing flatpak-1.0.7/missing --- flatpak-0.11.3/missing 2018-02-19 10:33:03.000000000 +0000 +++ flatpak-1.0.7/missing 2019-02-10 17:12:18.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2013-10-28.13; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -17,7 +17,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -101,9 +101,9 @@ exit $st fi -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software +perl_URL=https://www.perl.org/ +flex_URL=https://github.com/westes/flex +gnu_software_URL=https://www.gnu.org/software program_details () { @@ -207,9 +207,9 @@ exit $st # Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru flatpak-0.11.3/NEWS flatpak-1.0.7/NEWS --- flatpak-0.11.3/NEWS 2018-02-19 13:19:34.000000000 +0000 +++ flatpak-1.0.7/NEWS 2019-02-11 12:42:20.000000000 +0000 @@ -1,3 +1,443 @@ +Changes in 1.0.7 +================ + +The CVE-2019-5736 runc vulnerability is about using /proc/self/exe +to modify the host side binary from the sandbox. This mostly does not +affect flatpak since the flatpak sandbox is not run with root permissions. +However, there is one case (running the apply_extra script for system +installs) where this happens, so this release contains a fix for that. + + * Don't expose /proc in apply_extra script sandbox. + +Changes in 1.0.6 +================ + +This release fixes an issue that lets system-wide installed +applications create setuid root files inside their app dir (somewhere +in /var/lib/flatpak/app). Setuid support is disabled inside flatpaks, +so such files are only a risk if the user runs them manually outside +flatpak. + +Installing a flatpak system-wide is needs root access, so this isn't a +privilege elevation for non-root users, and allowing root to install +setuid files is something all traditional packaging systems +allow. However flatpak tries to be better than that, in order to make +it easier to trust third party repositories. Thus, it is recommended +that all distros update to this version, or backport commit +b98e09b20dfab896616b4a65e15c31f684a5f9f2. + +Changes in this version: + * The permissions of the files created by the apply_extra script is + canonicalized and the script itself is run without any capabilities. + * Better matching of existing remotes when the local and remote configuration + differs wrt collection ids. + * New flatpakrepo DeployCollectionID replaces CollectionID, doing the + same thing. It is recommended to use this instead because older versions + of flatpak has bugs in the support of collection ids, and this key + will only be respected in versions where it works. + * The X11 socket is now mounted read-only. + +Changes in 1.0.5 +================ + +There was a sandbox bug in the previous version where parts of the runtime +/etc was not mounted read-only. In case the runtime was installed as the +user (not the default) this means that the app could modify files on the +runtime. Nothing in the host uses the runtime files, so this is not a direct +sandbox escape, but it is possible that an app can confuse a different app +that has higher permissions and so gain privileges. + +So, it is recommended that everyone shipping flatpak to update to +1.0.5, or at least backport the change in commit +6711d7ae99c50a9dca8e4e2e9e9989a8fa6c3f06. + +Changes in this version: + + * Make the /etc -> /usr/etc bind-mounts read-only. + * Make various app-specific configuration files read-only. + * flatpak is more picky about remote names to avoid problems with storing weird + names in the ostree config. + * A segfault in libflatpak handling of bundles was fixed. + * Updated translations + * Fixed a regression in flatpak run that caused problems running user-installed + apps when the system installation was broken. + +Changes in 1.0.4 +================ + + * Flatpak 0.99.1 removed the inheritance of permissions from the runtime due + to concerns with dynamic app permissions. Due to popular requests, this + version re-introduces such inheritance, but does it instead at build time. + This solved the issues with dynamic permissions while still allowing runtimes + to have default permissions. Apps can disable this by passing + --no-inherit-permissions to build-finish. + * The sandbox now always includes a /etc/timezone file, following the (old) + debian standard for this. This is needed, because the more modern way + of exposing the timezone name by having /etc/localtime be a symlink + into /usr/share/zoneinfo doesn't work when exposing the host timezone. + * All apps now have automatic permissions to own their own app id as a + subname of org.mpris.MediaPlayer2. + * We now properly re-load remote state in FlatpakTransaction if the + metadata was updated for the remote. + * The signature of the FlatpakTransaction::operation-done signal was wrong + in the header and has now been corrected to the signature that is actually + emitted. + * A crash was fixed when reading invalid .flatpakref files. + * A crash during updates when a local ref was unexpectedly missing was fixed. + * An error case on uninstalling was incorrectly returning success even + thought there was an error. + * flatpak_installation_modify_remote did not correctly save the nodeps state. + * flatpak_installation_load_app_overrides() was improperly returning freed + memory. + * The tarball now ships with an icon (flatpak.png). + +Changes in 1.0.3 +================ + + * run: You can now use --system to run an app that otherwise would run the + user version. + * New permission --allow=canbus that filters out access to AF_CAN sockets. + * lib: New install flags FLATPAK_INSTALL_FLAGS_NO_TRIGGERS and new function + flatpak_installation_run_triggers() + * lib: Better error reporting, including some new error values that + replace the generic FAILED. + * uninstall --unused: Improve handling of which .Locale extensions are used + * run: Make flatpak run on systems where $XDG_RUNTIME_DIR contains a symlink + beneath /var (commonly /var/run -> /run). + * Don't export any desktop/dbus/mimetype files in subdirectories. + * build-init: We now record the base ref (if used) in the metadata. Nothing + uses this atm, but it can be used by tools. + * We now respect the upstream ostree.deploy-collection-id instead of the + flatpak-specific xa.collection-id metadata key to decide whether to switch + to collection ids for a remote. This is useful, because if you use the + new one, only new clients (that support it better) will use it. + * create-usb: Fix assertion failure in some error cases + * create-usb: Always create archive-z2 repos + * create-usb: Don't create unnecessary summary in repo + * permissions: Avoid errors if there is no permissions table + * repo: Fix flatpak repo sometimes using the wrong ostree-metadata ref. + * Avoid fsync when updating $installation/.changed. + * Add the missing appstream2 ref to the xa.cache metadata + * The test-suite got some modifications to make it easier to maintain. + * Documentation updates + * Translation updates + +Changes in 1.0.2 +================ + + * The dbus proxy is now available in a separate git module, xdg-dbus-portal, + which is imported into flatpak as a submodule. It is possible to build + flatpak against the system xdg-dbus-portal instead, but this is not currently + very useful as no other applications yet depend on xdg-dbus-portal. + * Build regressions with older versions of glib have been fixed. + * Flatpak ps now also tracks the pid the main process inside the sandbox. + * Added flatpak override --reset to reset overrides for an app. + * Added flatpak override --show to show overrides for an app. + * flatpak install now automatically pick user or system based on the remote + name given (unless the remote exists in both). + * flatpak uninstall --unused now does not remove SDKs if some installed app + refers to them. + * Fixed bug where flatpak uninstall --unused prompted for uninstall twice. + * Set IO class on the system helper to "idle", which should cause backgroun + updates to affect the system less. + * Fixed regression in flatpak uninstall --no-related. + * Better handling of empty collection ids in flatpak bundles. + * Cleaned up some error messages. + * Various documentation fixes and cleanups. + * Updated translations. + +Changes in 1.0.1 +================ + +This fixes various build and test failures that were detected when +packaging 1.0, as well as translations and doc udpates. It also +has some minor features, including a new subcommand "flatpak ps" +to list the running flatpak instances for your user. + + * Print application tags in the prompt when installing/updating. + * Make sure we don't accidentally leak the host /proc into + the sandbox. + * Translation updates. + * Added a "flatpak ps" command that lists running flatpak instances. + * Improve error reporting when exporting documents. + * Improve detection of dynamic p2p remotes. + * Build fixes for older versions of glib. + * Fix threading issue in the OCI support that was causing the + installed tests to sometimes fail. + * Fix OCI AppStream support on 32bit architectures. + * Fix utf8 issue in the dbus API description. + * Some install fixes to make installed tests work + * Make the tests work with python3 (as well as python2) + * Improve introspection annotations in libflatpak + * Improve libflatpak API docs + +Changes in 1.0 +============== + +Flatpak 1.0 is the first version in a new stable release series. This +new 1.x series is the successor to the 0.10.x series, which was first +introduced in October 2017. 1.0 is the new standard Flatpak version, +and distributions are recommended to update to it as soon as possible. + +The following release notes describe the major changes since +0.10.0. For a complete overview of Flatpak, please see +[docs.flatpak.org](http://docs.flatpak.org/en/latest/). + +## For users, app developers and distributors + +Flatpak 1.0 marks a significant improvement in performance and +reliability, and includes a big collection of bug fixes. 1.0 also +includes a collection of new features, including: + + * Faster installation and updates. + * Applications can now be marked as end-of-life. App centers and + desktops can use this information to warn users who have an end-of-life + version installed. + * Permissions now use an up-front verification model: users are + asked to confirm app permissions at install time, if an update + requires additional permissions, the user must also confirm. + * A [new portal](https://flatpak.github.io/xdg-desktop-portal/portal-docs.html#gdbus-org.freedesktop.portal.Flatpak) + allows apps to create sandboxes and restart themselves. This allows + applications to restart themselves after they have been updated (to + start using the new version), and to increase sandboxing for parts + of the application. + * `flatpak-spawn` is a new tool for running host commands (if + permissions allow) and creating new sandboxes from an app (this + uses the above portals APIs). + * Apps can now export D-Bus services for all the D-Bus names they are + privileged to own (rather than just the application ID). + * Flatpak's support for OCI bundles has been updated to the latest + specification. Also, AppData can now be distributed through OCI + repositories. + * Host TLS certificates are now exposed to applications, using + p11-kit-server. This removes a point of friction when accessing + network services in some environments. + * Apps can now request access the host SSH agent to securely access + remote servers or Git repositories. + * A new application permission can be used to grant access to + Bluetooth devices. + * A new `fallback-x11` permission grants X11 access, but only if the + user is running in a X11 session. For applications that support + both Wayland and X11, this can be used to ensure that the app + doesn't have unnecessary X11 access while in Wayland, but still + works in an X11 session. + * Peer-to-peer installation (via USB sticks or local network) is now + enabled and supported by default in all builds. + +The Flatpak command line also introduces new commands and options, including: + + * `uninstall --unused` automatically removes unused runtimes and + extensions (if you've removed all apps that depend on a runtime, or + all the apps you had depending on it have upgraded to a newer + version). + * New `info` options, including `--show-permissions`, + `--file-access`, `--show-location`, `--show-runtime`, `--show-sdk`. + * `repair` - fixes broken installs by scanning for errors, removing + invalid objects and reinstalling anything that's missing. + * `permission-*` - allows interaction with the portals permissions + store. This is useful for testing and for getting back to a clean + state. + * `create-usb` - can be used to prepare an repository to be used as a + local updates source. + +Finally, the command line has a collection of other improvements, such as: + + * If `--system` or `--user` aren't specified, one is automatically + picked if it is obvious (or it will ask if the correct option isn't + obvious). + * The `install`, `update` and `uninstall` commands now ask for + confirmation of changes before proceeding, in order to prevent + mistakes, and to show the required application permissions. + * The `uninstall` command now does not allow you to remove a runtime + if some installed application requires it. + * `flatpak remove` is now an alias for `flatpak uninstall`. + +## For Linux distributors, OS and platform developers + + * Flatpak no longer requires a filesystem that supports `xattr`. + * Portals are now more cleanly separated from Flatpak, thanks to the + document portal and permission store having been moved to + `xdg-desktop-portal`. It is recommended that the flatpak package has + a weak dependency on `xdg-desktop-portal`. + * `libflatpak` now has a transaction API for install, update and + uninstall operations. This means that it is much easier to use as + the basis of app centers and other graphical app management + software. + * Flatpak now sets several HTTP headers when installing applications, + which make it easier for Flatpak repositories to log things like + app download statistics and Flatpak versions in use. + * It is now recommended that Flatpak packages add a dependency on + p11-kit-server, as this allows apps to access host + certificates. However, this does not need to be a hard dependency. + * Requires bubblewrap 0.2.1 or later, and comes bundled with 0.3.0. + * Requires OSTree 2018.7. + +Major changes in 0.99.3 +======================= + + * Fixed case where system install would sometimes fail + due to the system-helper idle exiting. + * Support installing flatpakref files in FlatpakTransaction, + including a new signal add-new-remote for when remotes + might be added. + * Added some new FlatpakError codes. + * We now support .flatpakrepo files with no gpg signatures + * Fix crash in system-helper when updating appstream + * New command create-usb which can be used to prepare + an repo for offline updates. + * Fix some non-handled cases of the CLI not working when + /var/lib/flatpak doesn't exist. + * Fix crash when running with a gid that is not in + /etc/groups. + * Add new permission-* commands to interact with the + permissions store from the portals. + * Include appdata in OCI bundle. + +Major changes in 0.99.2 +======================= + + * Fix race condition on instance id allocation + * Translation updates + * Build fixes for new glibc versions + * Build fixes for new libsoup versions + * Build fixes for old glib versions + +Major changes in 0.99.1 +======================= + +This is the first pre-release before flatpak 1.0. This is considered +feature-complete and we expect no features or major changes before +1.0, only bugfixes. + +Note: There were some (minor) API changes in the FlatpakTransaction +APIs that were added in 0.11.8, so please don't use the old +version. (Note: I know of no user of this API). + +Changes since last minor release: + * Ostree 2018.6 is required, and with this, the p2p code in + flatpak is made non-optional. + * flatpak install/update/ininstall now lists all the operations + that it will do and asks for confirmation before starting. + * In the above confirmation the permissions (new permissions + for updates) are shown for all applications. + * The FlatpakTranscation API has a new ::ready signal that + allows users to do similar confirmation prompts. + * P2P updates are more efficient + * system-wide installation uses less fsync calls so should + installation should be faster. + * New ssh agent permissions allows granting an app + ssh access. + +Major changes in 0.11.8.3 +========================= + + * Fix a 25 second timeout on startup if using p11-kit < 0.23.10 + * Minor change in dbus proxy default filter, now broadcasts are + not accepted from portals. + +Major changes in 0.11.8.2 +========================= + + * Fix crash when building some apps + * Allow multiple appstream components per app + * Fix handling of gl drivers in uninstall --unused + * Don't prompt if nothing changed in uninstall --unused + * Longer timeouts in test suite + * Updated translations + +Major changes in 0.11.8.1 +========================= + + * Fixed regression running apps with --own=* permissions + +Major changes in 0.11.8 +======================= + + * Flatpak uninstall now accepts --all to remove everything and --unused to remove unused + runtimes. + * New command "flatpak repair" allows checking and repairing a flatpak installation. + * New permission --allow=bluetooth allows use of AF_BLUETOOTH sockets + * If p11-kit-server is installed on the host, this is now used to forward the host + certificate trust store to the sandboxed app. + * New transaction API in libflatpak that makes it much easier to implement + installation and updates in frontends. + * Flatpak uninstall now does not allow you to remove a runtime if some installed app requires it. + * We now have tab-completion for zsh. + * New installations of flatpak now defaults to bare-user-only repos, which means + that it works with filesystems that don't support xattrs. + * New flatpak info options: --show-location, --show-runtime, --show-sdk + * New flatpak remote-info options: --show-runtime, --show-sdk + * p2p operations now work when offline. + * Work around hanging on app startup on blocking autofs mounts. + * The dbus proxy filtering now works matches the new dbus containers filtering API. + * Various optimizations make installation and updates faster. In particular + operations like running triggers and pruning only happens once per + install/update operation. + * We now respect multiple extension versions matches when auto-downloading extensions. + * New http header Flatpak-Upgrade-From sent when upgrading. + * Commands like "flatpak info/list/remotes/seach" now work properly if /var/lib/flatpak doesn't exist. + * The bubblewrap version required for system-bwrap is now 0.2.1. + +Major changes in 0.11.7 +======================= + + * Fix regression in installing .flatpak bundles + +Major changes in 0.11.6 +======================= + + * Further work on the export filename regression, now also fixes the + same issue as in 0.11.5 but in flatpak build-finish. + * Fix segfault when installing from .flatpakref in gnome-software + * Build yacc parser from source. + * Don't tab-complete Sources/Locale/Debug extension by default. + * Fix tests on debian. + +Major changes in 0.11.5 +======================= + + * Fix a regression which caused installation of epiphany and + other apps that export multiple .service files to fail. + * Fix appstream updates in p2p mode. + * Don't distribute generated gdbus code with tarball. + * Add documentation for the flatpak portal + +Major changes in 0.11.4 +======================= + + * flatpak remove is now an alias for flatpak uninstall. + * flatpak uninstall now picks system or user automatically if not specified + * New appstream branch format which is more efficient to distribute, + the old is still generated for backwards compat. + * Appstream data now contains compatible arches (for applications + that doesn't exist for the primary arch). For example, an + i386-only app is now listed in the x86-64 appstream. + * The flatpak version is included in the user agent when downloading. + * The Flatpak-Ref http header is set to the currently installing ref when + downloading. + * New argument --timestamp in build-commit-from. + * When updating many apps we now only prune the local repo when all + updates are done, making multi-app updates faster. + * flatpak build now always allows multiarch use. + * flatpak build now mounts app extensions during build. + * flatpak build-init now supports --extension to add extension points earlier + than build-finish. Also build-finish now supports --remove-extension. + * New flatpak portal allows applications to sandbox themselves and restart a + newer version of themselves. + * New flatpak run options: --no-a11y-bus, --no-documents-portal. + * Initial support for end-of-life:ing applications. + * New option X-Flatpak-RunOptions in exported desktop/files allow you to specify + no-a11y-bus and no-documents-portal. + * Support for tagged extension points, which is useful if you want to use + the same extension id (but maybe different versions) multiple times in an app. + * We now export .service files for names that the app is allowed to own on + the session bus. + * libflatpak got new methods for listing remotes by type. + * libflatpak now has support in FlatpakRemoteRef for getting remote metadata + such as end-of-life, download size, metadata etc. + * There was some internal restructuring on how installs/updates are done + which should improve performance and maintainability. + Major changes in 0.11.3 ======================= @@ -1041,7 +1481,7 @@ as an OCI tarball. * builder: Fix creation of locale extensions if there was no locale data in the build. - * Its now possible to disable/enable configured remotes. + * It is now possible to disable/enable configured remotes. * A lot of new tests where added, and we now support installed tests. * builder now has an optional --arch argument for multiarch building. * Builder modules can be disabled with "disabled": true. Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/cs.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/cs.gmo differ diff -Nru flatpak-0.11.3/po/cs.po flatpak-1.0.7/po/cs.po --- flatpak-0.11.3/po/cs.po 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/cs.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,8 +7,8 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2018-01-25 14:08+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2018-12-13 22:42+0100\n" "Last-Translator: Daniel Rusek \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,213 +16,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Poedit 2.0.3\n" - -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Nedělat nic, pokud poskytnutý vzdálený repozitář již existuje" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "UMÍSTĚNÍ určuje konfigurační soubor, ne cestu k repozitáři" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Povolit ověřování pomocí GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Označit vzdálený repozitář jako použit pro enumeraci" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Označit vzdálený repozitář jako použit pro závislosti" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Nastavit novou url" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Povolit vzdálený repozitář" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Aktualizovat dodatečná metadata ze souboru shrnutí" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Zakázat ověřování pomocí GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Označit vzdálený repozitář jako nepoužit pro enumeraci" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Označit vzdálený repozitář jako nepoužit pro závislosti" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" -"Nastavit prioritu (výchozí hodnota je 1, vyšší hodnota znamená větší " -"prioritu)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITA" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Hezký název, který bude použit pro tento repozitář" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "JMÉNO" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Výchozí větev pro použití s tímto vzdáleným repozitářem" - -#: 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 -msgid "BRANCH" -msgstr "VĚTEV" - -#: 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 "ID kolekce" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Zakázat vzdálený repozitář" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Přidat OCI registr" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Vzdálený repozitář %s již existuje" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NÁZEV - Upravit vzdálený repozitář" - -#: 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: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: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:489 -#, c-format -msgid "Could not update extra metadata for %s" -msgstr "Nepodařilo se aktualizovat dodatečná metadata pro %s" +"X-Generator: Poedit 2.2\n" #: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" @@ -233,12 +27,13 @@ msgstr "Architektura, pro kterou se má vytvořit balík" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTURA" @@ -246,6 +41,14 @@ msgid "Url for repo" msgstr "Url pro repozitář" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url pro flatpakrepo soubor prostředí" @@ -254,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "SOUBOR" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportovat oci obraz namísto flatpak balíku" @@ -263,39 +74,42 @@ msgstr "ID klíče GPG pro podepsání OCI obrazu" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "KLÍČ-ID" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "DOMOVSKÝ_ADRESÁŘ" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +msgstr "OSTree commit pro vytvoření delta bundle" -#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "COMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -303,25 +117,46 @@ "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:458 +#: app/flatpak-builtins-build-bundle.c:556 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: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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Příliš mnoho parametrů" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s“ není platným repozitářem" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s“ není platným názvem: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s“ není platným názvem větve: %s" @@ -347,19 +182,19 @@ msgstr "Spustit sestavení v tomto adresáři" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "ADRESÁŘ" #: app/flatpak-builtins-build.c:53 msgid "Where to look for custom sdk dir (defaults to 'usr')" -msgstr "" +msgstr "Kde hledat adresář s upraveným sdk (výchozí je „usr“)" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Použít alternativní soubor pro metadata" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Zabít procesy v případě, že rodičovský proces zemře" @@ -367,396 +202,448 @@ msgid "Export application homedir directory to build" msgstr "Exportovat domovský adresář aplikace do sestavení" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Zaznamenávat volání systémové sběrnice" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ADRESÁŘ [PŘÍKAZ [parametry...]] - Sestavit v adresáři" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "ADRESÁŘ musí být určen" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "neplatná metadata, není aplikace nebo prostředí" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" -msgstr "Není možné spustit aplikaci" +msgstr "Nelze spustit aplikaci" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Adresář pro zdrojový repozitář" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "ZDROJ-REPOZITÁŘ" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Ref pro zdrojový repozitář" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "ZDROJ-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Předmět na jeden řádek" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "PŘEDMĚT" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Úplný popis" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TĚLO" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Aktualizovat appstream větev" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Neaktualizovat shrnutí" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 klíče GPG pro podepsání commitu" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "Označit sestavení jako end-of-life" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "DŮVOD" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Přepsat časovou značku commitu (NOW pro aktuální čas)" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "TIMESTAMP" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "CÍL-REPO musí být určeno" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 msgid "Either --src-repo or --src-ref must be specified." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "Nelze zpracovat „%s“" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: žádná změna\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "" "Architektura, pro kterou exportovat (musí být kompatibilní s hostitelem)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Použít alternativní adresář pro soubory" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "PODADRESÁŘ" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Soubory k vyloučení" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "VZOR" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Vyloučené soubory k zahrnutí" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Přepsat časovou značku commitu" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "ID kolekce" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:370 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Neplatný typ uri %s, pouze http/https jsou podporovány" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "V názvu souboru dodatečných dat nejsou povolena lomítka" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Neplatný formát pro kontrolní součet sha256: „%s“" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Dodatečná data s nulovou velikostí nejsou podporována" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "UMÍSTĚNÍ ADRESÁŘ [VĚTEV] - Vytvořit repozitář z adresáře sestavení" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "UMÍSTĚNÍ a ADRESÁŘ musí být určeny" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "„%s“ není platným ID kolekce: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Není určen žádný název v metadatech" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Commit: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Celková metadata: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Zapsaná metadata: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Celkový obsah: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Zapsaný obsah: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Zapsáno bajtů obsahu:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "PŘÍKAZ" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Požadovaná verze flatpaku" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAJOR.MINOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Nezpracovat exporty" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Informace o dodatečných údajích" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NÁZEV=PROMĚNNÁ[=HODNOTA]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NÁZEV" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Nastavit prioritu rozšíření (pouze pro rozšíření)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Změnit sdk použité pro aplikaci" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Změnit prostředí použité pro aplikaci" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "PROSTŘEDÍ" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Nastavit generickou volbu metadat" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "SKUPINA=KLÍČ[=HODNOTA]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +msgid "Don't inherit permissions from runtime" +msgstr "Nedědit oprávnění z prostředí" + +#: app/flatpak-builtins-build-finish.c:155 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, wrong extension\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:163 +#, c-format +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "Exportuji %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "Nalezen více než jeden spustitelný soubor\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "Používám %s jako příkaz\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Nenalezen žádný spustitelný soubor\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " "GROUP=KEY[=VALUE]]" msgstr "" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " "NAME=VAR[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "ADRESÁŘ - Dokončit adresář sestavení" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Adresář sestavení %s není inicializován" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Adresář sestavení %s je již uzavřen" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Zkontrolujte prosím exportované soubory a metadata\n" @@ -772,140 +659,148 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importovat oci obraz namísto flatpak balíku" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Ref „%s“ nebyl nalezen v registru" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "Importuji %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "UMÍSTĚNÍ NÁZEV_SOUBORU - Importovat soubor balíku do místního repozitáře" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Architektura, která se má použít" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APLIKACE" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Určit verzi pro --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERZE" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Zahrnout toto základní rozšíření" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "ROZŠÍŘENÍ" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "Tag rozšíření, který je použit při sestavování rozšíření" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "TAG_ROZŠÍŘENÍ" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Určit typ sestavení (aplikace, prostředí, rozšíření)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TYP" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Přidat značku" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ZNAČKA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" -msgstr "" +msgstr "Zahrnout toto rozšíření sdk v /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" -msgstr "" +msgstr "Kam uložit sdk (výchozí je „usr“)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Požadované rozšíření %s je nainstalováno pouze částečně" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Požadované rozšíření %s není nainstalováno" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "ADRESÁŘ NÁZEV_APLIKACE SDK PROSTŘEDÍ [VĚTEV] - Inicializovat adresář k " "sestavování" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "PROSTŘEDÍ musí byť určeno" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s“ není platným názvem aplikace: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Adresář sestavení %s je již inicializován" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Architektura, pro kterou se má instalovat" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Hledat prostředí s určeným názvem" @@ -913,10 +808,118 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "UMÍSTĚNÍ [ID [VĚTEV]] - Podepsat aplikaci nebo prostředí" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "UMÍSTĚNÍ musí být určeno" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Žádné id klíče gpg určeny" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Přesměrovat tento repozitář na novou URL" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Hezký název, který bude použit pro tento repozitář" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "JMÉNO" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Výchozí větev pro použití s tímto vzdáleným repozitářem" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "VĚTEV" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ID-KOLEKCE" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importovat nový výchozí veřejný klíč GPG ze SOUBORU" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "ID klíče GPG pro podepsání shrnutí" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Generovat delta soubory" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "HLOUBKA" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Generování delta souboru: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Generování delta souboru: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Selhalo generování delta souboru %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Selhalo generování delta souboru %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "UMÍSTĚNÍ - Aktualizovat metadata repozitáře" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Aktualizace appstream větve\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Aktualizace shrnutí\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Celkový počet objektů: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Žádné nedostupné objekty\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Odstraněno %u objektů, %s uvolněno\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "Vypsat konfigurační klíče a hodnoty" @@ -933,34 +936,116 @@ msgid "Unset configuration for KEY" msgstr "Zrušit konfiguraci pro KLÍČ" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, 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 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Musíte určit klíč" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "Musíte určit klíč i hodnotu" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[KLÍČ [HODNOTA]] - Spravovat konfiguraci" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NÁZEV - Odstranit vzdálený repozitář" +#: app/flatpak-builtins-create-usb.c:44 +msgid "Arch to copy" +msgstr "Architektura, která se má kopírovat" + +#: app/flatpak-builtins-create-usb.c:45 +msgid "DEST" +msgstr "CÍL" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" +"Varování: Vynechávám související ref „%s“, protože není nainstalován.\n" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" +"Varování: Vynechávám související ref „%s“, protože jeho vzdálený repozitář " +"„%s“ nemá nastaveno ID kolekce.\n" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" +"Vzdálený repozitář „%s“ nemá nastaveno ID kolekce, které je povinné pro P2P " +"distribuci „%s“." + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" +"CESTA-PŘIPOJENÍ REF [REF...] - Kopírovat aplikace a/nebo prostředí na " +"vyměnitelné médium" + +#: app/flatpak-builtins-create-usb.c:459 +msgid "MOUNT-PATH and REF must be specified" +msgstr "CESTA-PŘIPOJENÍ a REF musí být určeny" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "Ref „%s“ nalezen ve více instalacích: %s. Musíte určit jednu." + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "Refy musí být všechny ve stejné instalaci (nalezeno v %s a %s)." + +#: app/flatpak-builtins-create-usb.c:673 +#, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Varování: Nepodařilo se aktualizovat repo metadata pro vzdálený repozitář " +"„%s“: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Varování: Nepodařilo se aktualizovat appstream data pro vzdálený repozitář " +"„%s“ architektura „%s“: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Varování: Nelze nalézt appstream data pro vzdálený repozitář „%s“ " +"architektura „%s“: %s; %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Nelze nalézt appstream2 data pro vzdálený repozitář „%s“ architektura „%s“: " +"%s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1053,7 +1138,7 @@ #: app/flatpak-builtins-enter.c:109 msgid "Not running as root, may be unable to enter namespace" -msgstr "Neběží jako root, možná nebude možno vstoupit do jmenného prostoru" +msgstr "Neběží jako root, možná nebude možné vstoupit do jmenného prostoru" #: app/flatpak-builtins-enter.c:115 #, c-format @@ -1109,204 +1194,175 @@ msgid "Can't switch uid" msgstr "Nelze přepnout uid" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Zobrazit uživatelské instalace" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Zobrazit systémové instalace" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Zobrazit specifické systémové instalace" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Zobrazit referenci" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Zobrazit commit" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Zobrazit původ" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Zobrazit velikost" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Zobrazit metadata" -#: app/flatpak-builtins-info.c:60 -#, fuzzy +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "Zobrazit prostředí" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "Zobrazit sdk" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" -msgstr "Zobrazit rozšíření" +msgstr "Zobrazit oprávnění" -#: app/flatpak-builtins-info.c:61 -#, fuzzy +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Správa přístupu k souborům" +msgstr "Dotázat se na přístup k souborům" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "CESTA" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Zobrazit rozšíření" -#: 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:68 +msgid "Show location" +msgstr "Zobrazit umístění" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" +msgstr "NÁZEV [VĚTEV] - Získat informace o instalované aplikaci nebo prostředí" + +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NÁZEV musí být určen" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Varování: Commit nemá žádná flatpak metadata\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Architektura:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Větev:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Původ:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" msgstr "ID kolekce:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "Datum:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "Předmět:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Aktivní commit:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Poslední commit:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Commit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "Rodič:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Umístění:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Instalovaná velikost:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "end-of-life:" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "end-of-life-rebase:" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Prostředí:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "Sdk:" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Instalované podadresáře:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Rozšíření:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Podcesty:" -#: app/flatpak-builtins-info-remote.c:49 -msgid "Commit to show info for" -msgstr "Commit, pro který zobrazit informace" - -#: 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-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" @@ -1344,7 +1400,8 @@ msgid "Only install this subpath" msgstr "Instalovat pouze tuto podcestu" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automaticky odpovědět ano na všechny otázky" @@ -1352,51 +1409,25 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Tato aplikace závisí na prostředí z:\n" -" %s\n" -"Konfigurovat tohle jako nový vzdálený repozitář „%s“" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Název souboru balíku musí byt určen" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Vzdálené balíky nejsou podporovány" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"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:398 +#: app/flatpak-builtins-install.c:184 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:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Instaluji: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" -msgstr "UMÍSTĚNÍ/VZDÁLENÉ [REF...] - Instalovat aplikaci nebo prostředí" +msgstr "UMÍSTĚNÍ/VZDÁLENÉ [REF...] - Instalovat aplikace nebo prostředí" + +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "VZDÁLENÉ a REF musí být určeny" #: app/flatpak-builtins-list.c:43 msgid "Show extra information" @@ -1414,123 +1445,531 @@ msgid "Arch to show" msgstr "Architektura, která se má zobrazit" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Zobrazit všechny refy (včetně locale/debug)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Původ" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Aktivní commit" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Poslední commit" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Instalovaná velikost" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Možnosti" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Vypsat instalované aplikace a/nebo prostředí" -#: 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:41 -msgid "Show disabled remotes" -msgstr "Zobrazit zakázané vzdálené repozitáře" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "" -#: app/flatpak-builtins-list-remotes.c:53 -msgid " - List remote repositories" -msgstr " - Vypsat vzdálené repozitáře" +#: app/flatpak-builtins-make-current.c:58 +msgid "APP BRANCH - Make branch of application current" +msgstr "" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" -msgstr "Název" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "APLIKACE musí být určena" -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" -msgstr "Jméno" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "VĚTEV musí být určena" -#: app/flatpak-builtins-list-remotes.c:71 -msgid "Priority" -msgstr "Priorita" +#: 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-ls-remote.c:45 -msgid "Show arches and branches" -msgstr "Zobrazit architektury a větve" +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" +msgstr "Odstranit existující přepsání" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "Zobrazit existující přepsání" -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" -msgstr "Zobrazit pouze prostředí" +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[APLIKACE] - Přepsat nastavení [pro aplikaci]" -#: app/flatpak-builtins-ls-remote.c:47 -msgid "Show only apps" -msgstr "Zobrazit pouze aplikace" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "[TABULKA] [ID] - Zobrazit oprávnění" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "Tabulka" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "Objekt" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "Aplikace" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" +msgstr "Oprávnění" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "Data" + +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" +msgstr "TABULKA ID - Odstranit položku z úložiště oprávnění" + +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" +msgstr "Příliš málo parametrů" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" +msgstr "APP_ID - Resetovat oprávnění pro aplikaci" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" +msgstr "Špatný počet parametrů" + +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" +msgstr "APP_ID - Zobrazit oprávnění pro aplikaci" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" +msgstr "Zobrazit dostupné sloupce" + +#: app/flatpak-builtins-ps.c:43 +msgid "What information to show" +msgstr "Jaké informace zobrazit" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "POLE,…" + +#: app/flatpak-builtins-ps.c:53 +msgid "Application" +msgstr "Aplikace" + +#: app/flatpak-builtins-ps.c:53 +msgid "Show the application ID" +msgstr "Zobrazit ID aplikace" + +#: app/flatpak-builtins-ps.c:54 +msgid "Architecture" +msgstr "Architektura" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "Zobrazit architekturu" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Větev" + +#: app/flatpak-builtins-ps.c:55 +msgid "Show the application branch" +msgstr "Zobrazit větev aplikace" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Commit" + +#: app/flatpak-builtins-ps.c:56 +msgid "Show the application commit" +msgstr "Zobrazit commit aplikace" + +#: app/flatpak-builtins-ps.c:57 +msgid "Runtime" +msgstr "Prostředí" + +#: app/flatpak-builtins-ps.c:57 +msgid "Show the runtime ID" +msgstr "Zobrazit ID prostředí" + +#: app/flatpak-builtins-ps.c:58 +msgid "Runtime Branch" +msgstr "Větev prostředí" + +#: app/flatpak-builtins-ps.c:58 +msgid "Show the runtime branch" +msgstr "Zobrazit větev prostředí" + +#: app/flatpak-builtins-ps.c:59 +msgid "Runtime Commit" +msgstr "Commit prostředí" + +#: app/flatpak-builtins-ps.c:59 +msgid "Show the runtime commit" +msgstr "Zobrazit commit prostředí" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" +msgstr "PID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "Zobrazit PID wrapper procesu" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "PID potomka" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "Zobrazit PID sandbox procesu" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "Nejednoznačný sloupec: %s" + +#: app/flatpak-builtins-ps.c:98 +#, c-format +msgid "Unknown column: %s" +msgstr "Neznámý sloupec: %s" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "Dostupné sloupce:\n" + +#: app/flatpak-builtins-ps.c:119 +msgid "Show all columns" +msgstr "Zobrazit všechny sloupce" + +#: app/flatpak-builtins-ps.c:156 +msgid "Instance" +msgstr "Instance" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr " - Vypsat spuštěné sandboxy" + +#: app/flatpak-builtins-ps.c:264 +msgid "Extra arguments given" +msgstr "Zadány parametry navíc" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Nedělat nic, pokud poskytnutý vzdálený repozitář již existuje" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "UMÍSTĚNÍ určuje konfigurační soubor, ne cestu k repozitáři" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Zakázat ověřování pomocí GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Označit vzdálený repozitář jako nepoužit pro enumeraci" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Označit vzdálený repozitář jako nepoužit pro závislosti" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "" +"Nastavit prioritu (výchozí hodnota je 1, vyšší hodnota znamená větší " +"prioritu)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITA" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Hezký název, který bude použit pro tento repozitář" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Výchozí větev pro použití s tímto vzdáleným repozitářem" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importovat klíč GPG ze SOUBORU (- pro standardní vstup)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Zakázat vzdálený repozitář" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Nelze načíst uri %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:206 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Nelze načíst soubor %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" +msgstr "Neplatný formát souboru" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Neplatná verze %s, pouze 1 je podporována" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Neplatný klíč gpg" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NÁZEV UMÍSTĚNÍ - Přidat vzdálený repozitář" + +#: app/flatpak-builtins-remote-add.c:319 +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-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Vzdálený repozitář %s již existuje" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Žádný url není určen ve flatpakrepo souboru" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Odstranit vzdálený repozitář i pokud se používá" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NÁZEV - Odstranit vzdálený repozitář" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Commit, pro který zobrazit informace" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Zobrazit záznam" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Zobrazit rodiče" + +#: app/flatpak-builtins-remote-info.c:126 +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-remote-info.c:213 +msgid "Download size:" +msgstr "Stahovaná velikost:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Historie:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Předmět:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Datum:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Commit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Varování: Commit %s nemá žádná flatpak metadata\n" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Zobrazit detaily vzdáleného repozitáře" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Zobrazit zakázané vzdálené repozitáře" + +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" +msgstr " - Vypsat vzdálené repozitáře" + +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" +msgstr "Název" + +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" +msgstr "Jméno" + +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" +msgstr "Priorita" + +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" +msgstr "Zobrazit architektury a větve" + +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" +msgstr "Zobrazit pouze prostředí" + +#: app/flatpak-builtins-remote-ls.c:47 +msgid "Show only apps" +msgstr "Zobrazit pouze aplikace" + +#: app/flatpak-builtins-remote-ls.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:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Omezit na tuto architekturu (* pro všechny)" -#: 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:177 -msgid "Commit" -msgstr "Commit" +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr " [VZDÁLENÉ nebo URI] - Zobrazit dostupná prostředí a aplikace" -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Stahovaná velikost" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "V repozitáři nejsou dostupné žádné ref informace" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Povolit ověřování pomocí GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Označit vzdálený repozitář jako použit pro enumeraci" -#: app/flatpak-builtins-make-current.c:58 -msgid "APP BRANCH - Make branch of application current" -msgstr "" +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Označit vzdálený repozitář jako použit pro závislosti" -#: 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-remote-modify.c:57 +msgid "Set a new url" +msgstr "Nastavit novou url" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "VĚTEV musí být určena" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Povolit vzdálený repozitář" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Aktualizovat dodatečná metadata ze souboru shrnutí" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NÁZEV - Upravit vzdálený repozitář" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "NÁZEV vzdáleného repozitáře musí být určen" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "Aplikace %s větev %s není nainstalována" +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-override.c:54 -msgid "[APP] - Override settings [for application]" -msgstr "[APLIKACE] - Přepsat nastavení [pro aplikaci]" +#: app/flatpak-builtins-remote-modify.c:214 +#, 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-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Nepodařilo se aktualizovat dodatečná metadata pro %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "Objekt chybí: %s.%s\n" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "%s, mažu objekt\n" + +#: app/flatpak-builtins-repair.c:134 +#, c-format +msgid "Can't load object %s: %s\n" +msgstr "Nelze načíst objekt %s: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Problémy při načítání dat pro %s: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Chyba při reinstalování %s: %s\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "- Opravit flatpak instalaci" + +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "Ověřuji %s...\n" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "Mažu ref %s z důvodu chybějících objektů\n" + +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" +msgstr "Reinstaluji odstraněné refy\n" #: app/flatpak-builtins-repo.c:48 #, c-format @@ -1552,300 +1991,467 @@ msgid "Redirect URL: %s\n" msgstr "URL přesměrování: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-repo.c:65 #, c-format -msgid "Redirect collection ID: %s\n" -msgstr "ID kolekce přesměrování: %s\n" +msgid "Deploy collection ID: %s\n" +msgstr "ID kolekce nasazení: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" msgstr "Hash klíče GPG: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" msgstr "%zd větví\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Instalováno" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Stažení" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Vypsat obecné informace o repozitáři" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "Vypsat větve v repozitáři" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Vypsat metadata pro větev" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "UMÍSTĚNÍ - Údržba repozitáře" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Přesměrovat tento repozitář na novou URL" +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "Příkaz, který se má spustit" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Hezký název, který bude použit pro tento repozitář" +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" +msgstr "Větev, která se má použít" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Výchozí větev pro použití s tímto vzdáleným repozitářem" +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "Použije vývojové prostředí" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" +#: app/flatpak-builtins-run.c:62 +msgid "Runtime to use" +msgstr "Prostředí, které se má použít" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importovat nový výchozí veřejný klíč GPG ze SOUBORU" +#: app/flatpak-builtins-run.c:63 +msgid "Runtime version to use" +msgstr "Verze prostředí, které se má použít" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "ID klíče GPG pro podepsání shrnutí" +#: app/flatpak-builtins-run.c:66 +msgid "Log accessibility bus calls" +msgstr "Zaznamenávat volání sběrnice zpřístupnění" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Generovat delta soubory" +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "Nepoužívat proxy pro volání sběrnice zpřístupnění" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "Nespouštět portály" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "" +#: app/flatpak-builtins-run.c:69 +msgid "Enable file forwarding" +msgstr "Povolit přesměrování souboru" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "Spustit určený commit" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "Použít určený commit prostředí" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "Spustit kompletně v sandboxu" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "HLOUBKA" +#: app/flatpak-builtins-run.c:95 +msgid "APP [args...] - Run an app" +msgstr "APLIKACE [argumenty...] - Spustit aplikaci" -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Generování delta souboru: %s (%.10s)\n" +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "Architektura, která se má hledat" -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Generování delta souboru: %s (%.10s-%.10s)\n" +#: app/flatpak-builtins-search.c:254 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "TEXT - Vyhledat text ve vzdálených aplikacích/prostředích" -#: app/flatpak-builtins-repo-update.c:203 -#, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Selhalo generování delta souboru %s (%.10s): " +#: app/flatpak-builtins-search.c:263 +msgid "TEXT must be specified" +msgstr "TEXT musí být určen" + +#: app/flatpak-builtins-search.c:316 +msgid "Application ID" +msgstr "ID aplikace" + +#: app/flatpak-builtins-search.c:317 +msgid "Version" +msgstr "Verze" + +#: app/flatpak-builtins-search.c:321 +msgid "Remotes" +msgstr "Vzdálené repozitáře" -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-search.c:322 +msgid "Description" +msgstr "Popis" + +#: app/flatpak-builtins-search.c:331 +msgid "No matches found" +msgstr "Nenalezeny žádné shody" + +#: app/flatpak-builtins-uninstall.c:50 +msgid "Arch to uninstall" +msgstr "Architektura k odinstalování" + +#: app/flatpak-builtins-uninstall.c:51 +msgid "Keep ref in local repository" +msgstr "Nechat ref v lokálním repozitáři" + +#: app/flatpak-builtins-uninstall.c:52 +msgid "Don't uninstall related refs" +msgstr "Neodinstalovat související refy" + +#: app/flatpak-builtins-uninstall.c:53 +msgid "Remove files even if running" +msgstr "Odstranit soubory i za běhu" + +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "Odinstalovat vše" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "Odinstalovat nepoužívané" + +#: app/flatpak-builtins-uninstall.c:155 +msgid "REF... - Uninstall an application" +msgstr "REF... - Odinstalovat aplikaci" + +#: app/flatpak-builtins-uninstall.c:164 +msgid "Must specify at least one REF, --unused or --all" +msgstr "Musí být určen alespoň jeden REF, --unused nebo --all" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "REFy nesmí být určeny, pokud se používá --all" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "REFy nesmí být určeny, pokud se používá --unused" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "Nic nepoužívaného k odinstalaci\n" + +#: app/flatpak-builtins-update.c:53 +msgid "Arch to update for" +msgstr "Architektura, pro kterou se má aktualizovat" + +#: app/flatpak-builtins-update.c:54 +msgid "Commit to deploy" +msgstr "Commit pro deploy" + +#: app/flatpak-builtins-update.c:55 +msgid "Remove old files even if running" +msgstr "Odstranit staré soubory i za běhu" + +#: app/flatpak-builtins-update.c:56 +msgid "Don't pull, only update from local cache" +msgstr "Nedělat pull, pouze aktualizovat z místní cache" + +#: app/flatpak-builtins-update.c:58 +msgid "Don't update related refs" +msgstr "Neaktualizovat související refy" + +#: app/flatpak-builtins-update.c:63 +msgid "Update appstream for remote" +msgstr "Aktualizovat appstream pro vzdálený repozitář" + +#: app/flatpak-builtins-update.c:64 +msgid "Only update this subpath" +msgstr "Aktualizovat pouze tuto podcestu" + +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "[REF...] - Aktualizovat aplikace nebo prostředí" + +#: app/flatpak-builtins-update.c:128 +msgid "Looking for updates...\n" +msgstr "Vyhledávají se aktualizace...\n" + +#: app/flatpak-builtins-utils.c:367 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Selhalo generování delta souboru %s (%.10s-%.10s): " +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Vzdálený repozitář „%s“ nalezen ve více instalacích:\n" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "UMÍSTĚNÍ - Aktualizovat metadata repozitáře" +#: app/flatpak-builtins-utils.c:374 +msgid "Which do you want to use (0 to abort)?" +msgstr "Který si přejete použít (0 pro zrušení)?" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Aktualizace appstream větve\n" +#: app/flatpak-builtins-utils.c:376 +#, 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-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Aktualizace shrnutí\n" +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 +#, c-format +msgid "Updating appstream data for user remote %s" +msgstr "Aktualizuji appstream data pro uživatelský vzdálený repozitář %s" -#: app/flatpak-builtins-repo-update.c:534 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, c-format -msgid "Total objects: %u\n" -msgstr "Celkový počet objektů: %u\n" +msgid "Updating appstream data for remote %s" +msgstr "Aktualizuji appstream data pro vzdálený repozitář %s" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Žádné nedostupné objekty\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "Chyba během aktualizace" -#: app/flatpak-builtins-repo-update.c:538 +#: app/flatpak-builtins-utils.c:553 #, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Odstraněno %u objektů, %s uvolněno\n" +msgid "Remote \"%s\" not found" +msgstr "Vzdálený repozitář „%s“ nebyl nalezen" -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" -msgstr "Příkaz, který se má spustit" +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" +"Požadované prostředí pro %s (%s) bylo nalezeno ve vzdáleném repozitáři %s\n" -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" -msgstr "Větev, která se má použít" +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "Chcete ho nainstalovat?" -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" -msgstr "Použije vývojové prostředí" +#: app/flatpak-cli-transaction.c:86 +#, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Požadované prostředí pro %s (%s) bylo nalezeno ve vzdálených repozitářích: " +"%s\n" -#: app/flatpak-builtins-run.c:56 -msgid "Runtime to use" -msgstr "Prostředí, které se má použít" +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Který si přejete instalovat (0 pro zrušení)?" -#: app/flatpak-builtins-run.c:57 -msgid "Runtime version to use" -msgstr "Verze prostředí, které se má použít" +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Nastavuji %s jako nový vzdálený repozitář „%s“" -#: app/flatpak-builtins-run.c:60 -msgid "Log accessibility bus calls" -msgstr "Zaznamenávat volání sběrnice zpřístupnění" +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"Vzdálený repozitář „%s“, na který odkazuje „%s“ v umístění %s obsahuje " +"dodatečné aplikace.\n" +"Má být vzdálený repozitář ponechán pro budoucí instalace?" -#: app/flatpak-builtins-run.c:61 -msgid "Enable file forwarding" -msgstr "Povolit přesměrování souboru" +#: app/flatpak-cli-transaction.c:123 +#, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Aplikace %s závisí na prostředí z:\n" +" %s\n" +"Konfigurovat tohle jako nový vzdálený repozitář „%s“" -#: app/flatpak-builtins-run.c:82 -msgid "APP [args...] - Run an app" -msgstr "APLIKACE [argumenty...] - Spustit aplikaci" +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "instalace" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "aktualizace" -#: 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-cli-transaction.c:144 +msgid "install bundle" +msgstr "instalace balíku" -#: app/flatpak-builtins-search.c:249 -msgid "TEXT must be specified" -msgstr "TEXT musí být určen" +#: app/flatpak-cli-transaction.c:147 +msgid "uninstall" +msgstr "odinstalace" -#: app/flatpak-builtins-search.c:305 -msgid "Application ID" -msgstr "ID aplikace" +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instaluji pro uživatele: %s z %s\n" -#: app/flatpak-builtins-search.c:306 -msgid "Version" -msgstr "Verze" +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Instaluji: %s z %s\n" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" -msgstr "Větev" +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizuji pro uživatele: %s z %s\n" -#: app/flatpak-builtins-search.c:310 -msgid "Remotes" -msgstr "Vzdálené repozitáře" +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Aktualizuji: %s z %s\n" -#: app/flatpak-builtins-search.c:311 -msgid "Description" -msgstr "Popis" +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instaluji pro uživatele: %s z balíku %s\n" -#: app/flatpak-builtins-search.c:320 -msgid "No matches found" -msgstr "Nenalezeny žádné shody" +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Instaluji: %s z balíku %s\n" -#: app/flatpak-builtins-uninstall.c:44 -msgid "Arch to uninstall" -msgstr "Architektura k odinstalování" +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Odstraňuji pro uživatele: %s\n" -#: app/flatpak-builtins-uninstall.c:45 -msgid "Keep ref in local repository" -msgstr "Nechat ref v lokálním repozitáři" +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Odstraňuji: %s\n" -#: app/flatpak-builtins-uninstall.c:46 -msgid "Don't uninstall related refs" -msgstr "Neodinstalovat související refy" +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Žádné aktualizace.\n" -#: app/flatpak-builtins-uninstall.c:47 -msgid "Remove files even if running" -msgstr "Odstranit soubory i za běhu" +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Nyní na %s.\n" -#: app/flatpak-builtins-uninstall.c:70 -msgid "REF... - Uninstall an application" -msgstr "REF... - Odinstalovat aplikaci" +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Varování: Selhalo %s %s: %s\n" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" -msgstr "Alespoň jeden REF musí být určen" +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "Selhalo %s %s: " -#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 +#: app/flatpak-cli-transaction.c:335 #, c-format -msgid "Warning: Problem looking for related refs: %s\n" -msgstr "" +msgid "Error: Failed to %s %s: %s\n" +msgstr "Chyba: Selhalo %s %s: %s\n" -#: app/flatpak-builtins-uninstall.c:164 +#: app/flatpak-cli-transaction.c:350 #, c-format -msgid "Uninstalling: %s\n" -msgstr "Odstraňuji: %s\n" +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "Varování: %s je end-of-life, ve prospěch %s\n" -#: app/flatpak-builtins-update.c:53 -msgid "Arch to update for" -msgstr "Architektura, pro kterou se má aktualizovat" +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "Varování: %s je end-of-life, z důvodu: %s\n" -#: app/flatpak-builtins-update.c:54 -msgid "Commit to deploy" -msgstr "Commit pro deploy" +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "nová oprávnění" -#: app/flatpak-builtins-update.c:55 -msgid "Remove old files even if running" -msgstr "Odstranit staré soubory i za běhu" +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "oprávnění" -#: app/flatpak-builtins-update.c:56 -msgid "Don't pull, only update from local cache" -msgstr "Nedělat pull, pouze aktualizovat z místní cache" +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "nový přístup k souborům" -#: app/flatpak-builtins-update.c:58 -msgid "Don't update related refs" -msgstr "Neaktualizovat související refy" +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "přístup k souborům" -#: app/flatpak-builtins-update.c:63 -msgid "Update appstream for remote" -msgstr "Aktualizovat appstream pro vzdálený repozitář" +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "nový přístup k dbus" -#: app/flatpak-builtins-update.c:64 -msgid "Only update this subpath" -msgstr "Aktualizovat pouze tuto podcestu" +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "přístup k dbus" -#: app/flatpak-builtins-update.c:83 -msgid "[REF...] - Update applications or runtimes" -msgstr "[REF...] - Aktualizovat aplikace nebo prostředí" +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "nové vlastnictví dbus" -#: app/flatpak-builtins-update.c:119 -msgid "Looking for updates...\n" -msgstr "Vyhledávají se aktualizace...\n" +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "vlastnictví dbus" -#: 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-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "nový přístup k systémové dbus" -#: 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-cli-transaction.c:529 +msgid "system dbus access" +msgstr "přístup k systémové dbus" -#: 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-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "nové vlastnictví systémové dbus" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "vlastnictví systémové dbus" -#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "nové tagy" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "tagy" + +#: app/flatpak-cli-transaction.c:564 #, c-format -msgid "Updating appstream data for user remote %s\n" -msgstr "Aktualizuji appstream data pro uživatelský vzdálený repozitář %s\n" +msgid "Uninstalling from %s:\n" +msgstr "Odstraňuji z %s:\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-cli-transaction.c:586 #, c-format -msgid "Updating appstream data for remote %s\n" -msgstr "Aktualizuji appstream data pro vzdálený repozitář %s\n" +msgid "Installing in %s:\n" +msgstr "Instaluji v %s:\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-cli-transaction.c:623 #, c-format -msgid "Error updating: %s\n" -msgstr "Chyba během aktualizace: %s\n" +msgid "Updating in %s:\n" +msgstr "Aktualizuji v %s:\n" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "Je tohle ok" + +#: app/flatpak-cli-transaction.c:728 #, c-format -msgid "Remote \"%s\" not found" -msgstr "Vzdálený repozitář „%s“ nebyl nalezen" +msgid "Skipping: %s\n" +msgstr "Přeskakuji: %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "Vyskytla se jedna či více chyb" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1864,33 +2470,41 @@ msgid "Uninstall an installed application or runtime" msgstr "Odinstalovat instalovanou aplikaci nebo prostředí" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Vypsat instalované aplikace a/nebo prostředí" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Zobrazit informace pro nainstalovanou aplikaci či prostředí" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Nastavit flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +msgid "Repair flatpak installation" +msgstr "Opravit flatpak instalaci" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "Umístit aplikace a/nebo prostředí na vyměnitelné médium" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" msgstr "" "\n" -" Vyhledávají se aplikace a prostředí" +" Vyhledávání aplikací a prostředí" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 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 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1898,24 +2512,28 @@ "\n" " Spuštěné aplikace" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Spustit aplikaci" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Přepsat oprávnění pro aplikaci" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Určit výchozí verzi ke spuštění" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Vstoupit do jmenného prostoru běžící aplikace" +#: app/flatpak-main.c:84 +msgid "Enumerate running applications" +msgstr "Vypsat spuštěné aplikace" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1923,24 +2541,49 @@ "\n" " Správa přístupu k souborům" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Udělit aplikaci přístup k určenému souboru" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Zrušit přístup aplikace k určenému souboru" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Zobrazit informace o určeném souboru" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Zobrazit exportované soubory" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" +"\n" +" Spravovat dynamická oprávnění" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "Odstranit položku z úložiště oprávnění" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "Vypsat oprávnění" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "Zobrazit oprávnění aplikace" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "Resetovat oprávnění aplikace" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1948,32 +2591,32 @@ "\n" " Správa vzdálených repozitářů" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Vypsat všechny nastavené vzdálené repozitáře" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Přidat nový vzdálený repozitář (pomocí URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Měnit vlastnosti nastaveného vzdáleného repozitáře" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Odstranit nastavený vzdálený repozitář" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Vypsat obsah nastaveného vzdáleného repozitáře" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -1981,282 +2624,143 @@ "\n" " Sestavení aplikací" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inicializovat adresář pro sestavení" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Spustit příkaz k sestavení uvnitř adresáře sestavení" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Dokončit adresář sestavení pro export" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exportovat adresář sestavení do repozitáře" -#: app/flatpak-main.c:104 -#, fuzzy +#: app/flatpak-main.c:116 msgid "Create a bundle file from a ref in a local repository" -msgstr "Vytvořit soubor balíku z adresáře sestavení" +msgstr "Vytvořit soubor balíku z refu v lokálním repozitáři" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importovat soubor balíku" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Podepsat aplikaci nebo prostředí" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Aktualizovat soubor shrnutí v repozitáři" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Vytvořit nový commit založený na existujícím ref" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Vypsat informace o repozitáři" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 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:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Zobrazit volby nápovědy" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Vypsat informace o verzi a skončit" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Vypsat výchozí architekturu a skončit" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Vypsat podporované architektury a skončit" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Vypsat aktivní gl ovladače a skončit" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Pracovat na uživatelských instalacích" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Pracovat na systémových instalacích (výchozí)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" msgstr "Pracovat na specifických systémových instalacích" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NÁZEV" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Vestavěné příkazy:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" +"Volba --installation byla použita vícenásobně pro příkaz, který funguje na " +"jedné instalaci" -#: app/flatpak-main.c:489 -#, c-format -msgid "Unknown command '%s'" -msgstr "Neznámý příkaz „%s“" - -#: app/flatpak-main.c:497 -msgid "No command specified" -msgstr "Nebyl určen žádný příkaz" - -#: app/flatpak-main.c:615 -msgid "error:" -msgstr "chyba:" - -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Nalezeno v několika vzdálených repozitářích:\n" - -#: 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: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: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: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: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:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s je již nainstalováno, přeskakuji\n" - -#: 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: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: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:765 -msgid "update" -msgstr "aktualizace" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Nyní na %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Žádné aktualizace.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "instalace balíku" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Varování: Selhalo %s %s: %s\n" - -#: app/flatpak-transaction.c:841 +#: app/flatpak-main.c:480 #, c-format -msgid "Error: Failed to %s %s: %s\n" -msgstr "Chyba: Selhalo %s %s: %s\n" +msgid "Unknown command '%s'" +msgstr "Neznámý příkaz „%s“" -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" -msgstr "Jedna nebo více operací selhalo" +#: app/flatpak-main.c:488 +msgid "No command specified" +msgstr "Nebyl určen žádný příkaz" + +#: app/flatpak-main.c:608 +msgid "error:" +msgstr "chyba:" -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" -msgstr "" +msgstr "Neznámý typ sdílení %s, platné typy jsou: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" -msgstr "" +msgstr "Neznámý typ zásad %s, platné typy jsou: %s" -#: common/flatpak-context.c:248 +#: common/flatpak-context.c:251 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Neplatný název dbus %s\n" +msgid "Invalid dbus name %s" +msgstr "Neplatný název dbus %s" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" -msgstr "" +msgstr "Neznámý typ soketu %s, platné typy jsou: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" -msgstr "" +msgstr "Neznámý typ zařízení %s, platné typy jsou: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" -msgstr "" +msgstr "Neznámý typ vlastnosti %s, platné typy jsou: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2265,479 +2769,988 @@ "Neplatné umístění systému souborů %s, platná umístění jsou: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Neplatný formát env %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Sdílet s hostitelem" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "SDÍLET" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Zrušit sdílení s hostitelem" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Odhalit soket aplikaci" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Neodhalovat soket aplikaci" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Odhalit zařízení aplikaci" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "ZAŘÍZENÍ" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Neodhalovat zařízení aplikaci" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Umožnit funkci" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FUNKCE" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Neumožnit funkci" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Odhalit systém souborů aplikaci (:ro pro přístup pouze ke čtení)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SYSTÉM_SOUBORŮ[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Neodhalovat systém souborů aplikaci" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SYSTÉM_SOUBORŮ" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Nastavit proměnnou prostředí" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "PROMĚNNÁ=HODNOTA" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Povolit aplikaci vlastnit název na sběrnici sezení" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NÁZEV_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Povolit aplikaci komunikovat s názvem na sběrnici sezení" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Povolit aplikaci vlastnit název na systémové sběrnici" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 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-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Přidat generickou volbu bezpečnostní politiky" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSYSTEM.KLÍČ=HODNOTA" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Odebrat generickou volbu bezpečnostní politiky" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Trvalý domovský adresář" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NÁZEV_SOUBORU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Nevyžadovat běžící sezení (bez vytvoření cgroups)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Nelze načíst shrnutí ze vzdáleného repozitáře %s: %s" + +#: common/flatpak-dir.c:260 +#, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Nelze načíst metadata ze vzdáleného repozitáře %s: %s" + +#: common/flatpak-dir.c:284 +#, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Nemohu nalézt ref (%s, %s) ve vzdáleném repozitáři %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Nemohu nalézt ref „%s“ ve vzdáleném repozitáři %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Žádná cache ve shrnutí vzdáleného repozitáře „%s“" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Žádný záznam pro %s v cache shrnutí vzdáleného repozitáře „%s“ " + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Žádný záznam pro %s v řídké cache shrnutí vzdáleného repozitáře " + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "Nelze se připojit k systémové sběrnici" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" -msgstr "" +msgstr "Žádná přepsání nenalezena pro %s" + +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s není nainstalováno" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "%s (commit %s) nenainstalováno" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:2321 #, 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 +#: common/flatpak-dir.c:2581 +msgid "No appstream commit to deploy" +msgstr "Žádný appstream commit pro deploy" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 msgid "Can't create deploy directory" msgstr "Nemohu vytvořit adresář sestavení" -#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Žádný ref (%s, %s) ve vzdáleném repozitáři %s nebo jinde" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 #, c-format -msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "" +"Nepodařilo se získat nejnovější kontrolní součet pro ref %s ve vzdáleném " +"repozitáři %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" -#: common/flatpak-dir.c:2761 +#: common/flatpak-dir.c:3959 #, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Neplatný sha256 pro dodatečná data uri %s" +msgid "Invalid checksum for extra data uri %s" +msgstr "Neplatný kontrolní součet pro uri dodatečných dat %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, 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 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Nepodporovaný uri dodatečných dat %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Chybná velikost pro dodatečná data %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Během stahování %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Chybná velikost pro dodatečná data %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Neplatný kontrolní součet pro dodatečná data %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" msgstr "" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, 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 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, 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 +#: common/flatpak-dir.c:4697 +msgid "No summary found" +msgstr "Nenalezeno žádné shrnutí" + +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Nemohu nalézt %s ve vzdáleném repozitáři %s" +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Nedostatek paměti" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Selhalo čtení z exportovaného souboru" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Chyba při čtení mimetype xml souboru" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Neplatný mimetype xml soubor" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "Soubor služby D-Bus „%s“ má neplatný název" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "" -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +msgid "Extra data missing in detached metadata" +msgstr "" + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Neplatný kontrolní součet pro dodatečná data" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, 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 +#: common/flatpak-dir.c:6378 +#, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "" + +#: common/flatpak-dir.c:6557 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "apply_extra skript selhal, návratová hodnota %d" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Během pokusu o vyřešení ref %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s větev %s je již nainstalováno" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Nelze číst commit %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, c-format msgid "While trying to checkout %s into %s: " msgstr "" -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "" -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "" + +#: common/flatpak-dir.c:6775 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 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Během pokusu o aplikaci dodatečných dat: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "" -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, c-format msgid "Deployed ref %s kind does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5615 +#: common/flatpak-dir.c:6836 #, c-format msgid "Deployed ref %s name does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5623 +#: common/flatpak-dir.c:6844 #, c-format msgid "Deployed ref %s arch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5629 +#: common/flatpak-dir.c:6850 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5635 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, c-format msgid "This version of %s is already installed" msgstr "Tato verze aplikace %s je již nainstalována" -#: common/flatpak-dir.c:6540 +#: common/flatpak-dir.c:7801 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 +#: common/flatpak-dir.c:7968 +#, c-format +msgid "%s branch already installed" +msgstr "větev %s je již nainstalována" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "Nelze aktualizovat na specifický commit bez root oprávnění" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "Nelze odstranit %s, je požadováno pro: %s" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s větev %s není nainstalováno" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s větev %s nenainstalováno" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Žádné shrnutí nebo Flatpak cache dostupná pro vzdálený repozitář %s" + +#: common/flatpak-dir.c:9716 #, 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 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Nic nevyhovuje názvu %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, 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 +#: common/flatpak-dir.c:9969 #, 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 +#: common/flatpak-dir.c:10114 #, c-format -msgid "%s %s not installed" -msgstr "%s %s nenainstalováno" +msgid "%s/%s/%s not installed" +msgstr "%s/%s/%s nenainstalováno" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Nemohu nalézt instalaci %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +msgid "Invalid .flatpakref" +msgstr "Neplatný .flatpakref" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, c-format +msgid "Invalid file format, no %s group" +msgstr "Neplatný formát souboru, žádná skupina %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, c-format +msgid "Invalid file format, no %s specified" +msgstr "Neplatný formát souboru, %s není určen" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +msgid "Invalid file format, gpg key invalid" +msgstr "Neplatný formát souboru, neplatný klíč gpg" + +#: common/flatpak-dir.c:10871 #, 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 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" +"Nelze odstranit vzdálený repozitář „%s“ s nainstalovaným refem %s (minimálně)" + +#: common/flatpak-dir.c:11250 +#, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Neplatný znak „/“ v názvu vzdáleného repozitáře: %s" -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" -msgstr "Vzdálený default-branch nenastaven" +#: common/flatpak-dir.c:11255 +#, c-format +msgid "No configuration for remote %s specified" +msgstr "Neurčena žádná konfigurace pro vzdálený repozitář %s" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Žádná cache ve vzdáleném shrnutí" +#: common/flatpak-dir.c:11496 +msgid "No metadata branch for OCI" +msgstr "" -#: common/flatpak-dir.c:10342 +#: common/flatpak-installation.c:751 #, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Žádný záznam pro %s v cache vzdáleného shrnutí " +msgid "Ref %s not installed" +msgstr "Ref %s není nainstalován" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:793 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Selhalo otevření dočasného souboru flatpak-info: %s" +msgid "App %s not installed" +msgstr "Aplikace %s není nainstalována" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-installation.c:1778 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Selhalo otevření dočasného souboru: %s" +msgid "As requested, %s was only pulled, but not installed" +msgstr "Jak bylo požadováno, %s bylo pouze staženo, ale nebylo nainstalováno" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Selhalo vytvoření synchronizační roury" +#: common/flatpak-oci-registry.c:1679 +#, c-format +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" + +#: common/flatpak-oci-registry.c:1686 +#, c-format +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: common/flatpak-run.c:1910 +#: common/flatpak-oci-registry.c:1694 #, c-format -msgid "Failed to open app info file: %s" -msgstr "Selhalo otevření souboru s informacemi o aplikaci: %s" +msgid "Error signing commit: %d" +msgstr "Chyba během podepisování commitu: %d" + +#: common/flatpak-remote.c:822 +#, c-format +msgid "Bad remote name: %s" +msgstr "Neplatný název vzdáleného repozitáře: %s" + +#: common/flatpak-remote.c:826 +msgid "No url specified" +msgstr "Žádný url není určen" + +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" +msgstr "Selhalo otevření souboru s informacemi o aplikaci" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Selhalo vytvoření synchronizační roury" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Selhala synchronizace s dbus proxy" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Selhalo zjištění částí z refu: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +msgid "Unable to allocate instance id" +msgstr "Selhala alokace id instance" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Selhalo otevření souboru flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Selhalo otevření souboru bwrapinfo.json: %s" + +#: common/flatpak-run.c:2187 +msgid "Initialize seccomp failed" +msgstr "Selhala inicializace seccomp" + +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" +msgstr "Selhalo přidání architektury do seccomp filtru" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "Selhalo přidání multiarch architektury do seccomp filtru" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, c-format +msgid "Failed to block syscall %d" +msgstr "Selhalo blokování systémového volání %d" + +#: common/flatpak-run.c:2299 +msgid "Failed to export bpf" +msgstr "Selhalo exportování bpf" + +#: common/flatpak-run.c:2355 +#, c-format +msgid "Invalid group: %d" +msgstr "Neplatná skupina: %d" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig selhal, návratová hodnota %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +msgid "Can't open generated ld.so.cache" +msgstr "Nelze otevřít vygenerovaný ld.so.cache" + +#: common/flatpak-run.c:2947 +#, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Špatný počet součástí v prostředí %s" + +#: common/flatpak-transaction.c:1347 +#, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Varování: Problém při hledání souvisejících refů: %s" + +#: common/flatpak-transaction.c:1417 +#, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Aplikace %s vyžaduje prostředí %s, které nebylo nalezeno" + +#: common/flatpak-transaction.c:1433 +#, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Aplikace %s vyžaduje prostředí %s, které není nainstalováno" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Vzdálený repozitář %s je zakázán, ignoruji aktualizaci %s" + +#: common/flatpak-transaction.c:1583 +#, c-format +msgid "%s is already installed" +msgstr "%s je již nainstalováno" + +#: common/flatpak-transaction.c:1586 +#, c-format +msgid "%s is already installed from remote %s" +msgstr "%s je již nainstalováno ze vzdáleného repozitáře %s" + +#: common/flatpak-transaction.c:1699 +#, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Neplatný .flatpakref: %s" + +#: common/flatpak-transaction.c:1787 +#, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Chyba během aktualizace vzdálených metadat pro „%s“: %s" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Varování: Nelze nalézt %s metadata pro závislosti: %s" + +#: common/flatpak-transaction.c:2345 +#, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Neplatné .flatpakrepo: %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "Přerušeno uživatelem" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "Přeskakuji %s z důvodu předchozí chyby" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "Přerušeno z důvodu selhání" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "Migruji %s do %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Chyba během migrace: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "Název nemůže být prázdný" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "Název nemůže být delší než 255 znaků" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "Název nemůže začínat tečkou" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "Název nemůže začínat %c" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "Název nemůže končit tečkou" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "Pouze poslední část názvu může obsahovat -" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "Část názvu nemůže začínat %c" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "Název nemůže obsahovat %c" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "Názvy musí obsahovat alespoň dvě tečky" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "Větev nemůže být prázdná" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "Větev nemůže začínat %c" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "Větev nemůže obsahovat %c" + +#: common/flatpak-utils.c:1087 +#, c-format +msgid "Wrong number of components in %s" +msgstr "Špatný počet součástí v %s" + +#: common/flatpak-utils.c:1093 +#, c-format +msgid "%s is not application or runtime" +msgstr "%s není aplikace nebo prostředí" + +#: common/flatpak-utils.c:1099 +#, c-format +msgid "Invalid name %s: %s" +msgstr "Neplatný název %s: %s" + +#: common/flatpak-utils.c:1105 +#, c-format +msgid "Invalid arch %s" +msgstr "Neplatná architektura %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, c-format +msgid "Invalid branch %s: %s" +msgstr "Neplatná větev %s: %s" + +#: common/flatpak-utils.c:1199 +#, c-format +msgid "Invalid id %s: %s" +msgstr "Neplatné id %s: %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Žádné zdroje dodatečných dat" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "Získávám ikony pro komponentu %s\n" + +#: common/flatpak-utils.c:3716 +#, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Chyba během kopírování 64x64 ikony: %s\n" + +#: common/flatpak-utils.c:3721 +#, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Chyba během kopírování 128x128 ikony: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "%s je end-of-life, ignoruji\n" + +#: common/flatpak-utils.c:3926 +#, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Žádná appstream data pro %s: %s\n" + +#: common/flatpak-utils.c:4744 +msgid "Invalid bundle, no ref in metadata" +msgstr "" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Stahuji metadata: %u/(odhadováno) %s" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Stahuji: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Stahuji dodatečná data: %s/%s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Stahuji soubory: %d/%d %s" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s vyžaduje novější verzi flatpaku (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "Prázdný řetězec není číslo" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2853,11 +3866,50 @@ msgid "Update appstream" msgstr "Aktualizovat appstream" -#~ msgid "No remote %s" -#~ msgstr "Žádný vzdálený repozitář %s" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "ID kolekce přesměrování: %s\n" + +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Neplatný sha256 pro dodatečná data uri %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Neplatný sha256 pro dodatečná data" + +#~ msgid "Is this ok?" +#~ msgstr "Je tohle ok?" + +#~ msgid "Add OCI registry" +#~ msgstr "Přidat OCI registr" + +#~ msgid "Installing: %s\n" +#~ msgstr "Instaluji: %s\n" + +#~ msgid "Found in remote %s\n" +#~ msgstr "Nalezeno ve vzdáleném repozitáři %s\n" -#~ msgid "Search only user installations" -#~ msgstr "Prohledat pouze uživatelské instalace" +#~ 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?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Nalezeno v několika vzdálených repozitářích:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s je již nainstalováno, přeskakuji\n" + +#~ msgid "One or more operations failed" +#~ msgstr "Jedna nebo více operací selhalo" + +#~ msgid "No ref information available in repository" +#~ msgstr "V repozitáři nejsou dostupné žádné ref informace" + +#~ msgid "Remote title not set" +#~ msgstr "Jméno vzdáleného adresáře nenastaveno" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Vzdálený default-branch nenastaven" #~ msgid "Search only system-wide installations" #~ msgstr "Prohledat pouze systémové instalace" @@ -2871,9 +3923,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Selhalo odlinkování dočasného souboru" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Selhal zápis dočasného souboru" - #~ msgid "REMOTE must be specified" #~ msgstr "VZDÁLENÉ musí být určeno" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/de.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/de.gmo differ diff -Nru flatpak-0.11.3/po/de.po flatpak-1.0.7/po/de.po --- flatpak-0.11.3/po/de.po 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/de.po 2019-02-11 12:42:42.000000000 +0000 @@ -8,228 +8,16 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\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" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2017-11-03 20:24+0100\n" +"Last-Translator: Christian Kirbach \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.8.12\n" - -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Nichts unternehmen, wenn die entfernte Quelle existiert" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "ORT legt eine Konfigurationsdatei fest, nicht den Quellort" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "GPG-Überprüfung aktivieren" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Entfernte Quelle markieren als »berücksichtigen«" - -# Bedeutung aus flatpak-remote-add.xml -# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Ferne Quelle markieren als »Verwendet für Abhängigkeiten«" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Eine neue Adresse festlegen" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Entfernte Quelle aktivieren" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Zusätzliche Metadaten aus der Zusammenfassungsdatei aktualisieren" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "GPG-Überprüfung deaktivieren" - -# Bedeutung aus flatpak-remote-add.xml -# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Entfernte Quelle markieren als »nicht berücksichtigen«" - -# Bedeutung aus flatpak-remote-add.xml -# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Ferne Quelle markieren als »Nicht für Abhängigkeiten verwenden«" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Priorität festlegen (Standard 1, mehr bedeutet höhere Priorität)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITÄT" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Ein passender Name für diese entfernte Quelle" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TITEL" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Zu verwendender Vorgabe-Zweig für diese ferne Quelle" - -#: 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 -msgid "BRANCH" -msgstr "ZWEIG" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Entfernte Quelle deaktivieren" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "OCI-Registrierung hinzufügen" - -#: 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: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: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: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: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: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: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:348 -msgid "GPG verification is required if collections are enabled" -msgstr "" - -#. Do nothing -#: 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:371 -msgid "No url specified in flatpakrepo file" -msgstr "In der flatpakrepo-Datei ist keine Adresse angegeben" - -#: 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:464 -msgid "NAME - Modify a remote repository" -msgstr "NAME - Entfernte Quelle verändern" - -#: 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:485 -#, c-format -msgid "Updating extra metadata from remote summary for %s\n" -msgstr "" - -#: 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:489 -#, c-format -msgid "Could not update extra metadata for %s" -msgstr "Zusätzliche Metadaten für %s konnten nicht aktualisiert werden" +"X-Generator: Poedit 2.0.4\n" #: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" @@ -240,12 +28,13 @@ msgstr "Architektur für die gebündelt wird" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCH" @@ -253,6 +42,14 @@ msgid "Url for repo" msgstr "Adresse für Quelle" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "ADRESSE" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Adresse der flatpakrepo-Datei der Laufzeit" @@ -261,6 +58,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "DATEI" + #: 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" @@ -270,26 +75,29 @@ msgstr "GPG-Schlüsselkennung zum Unterschreiben des OCI-Abbilds" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "SCHLÜSSEL-Kennung" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "BASISORDNER" @@ -297,12 +105,12 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "COMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -310,25 +118,46 @@ "ORT DATEINAME NAME [ZWEIG] - Ein einzelnes Dateibündel aus lokaler Quelle " "erstellen" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "ORT, DATEINAME und NAME müssen angegeben werden" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Zu viele Argumente" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "»%s« ist keine gültige Quelle" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "»%s« ist kein gültiger Name: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "»%s« ist kein gültiger Zweig-Name: %s" @@ -354,7 +183,7 @@ msgstr "Erstellung in diesem Ordner starten" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "ORDNER" @@ -362,387 +191,442 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Alternative Datei für diese Metadaten verwenden" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" -msgstr "" +msgstr "Prozesse abwürgen, wenn der übergeordnete Prozess beendet wird" #: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "Sitzungsbus-Aufrufe protokollieren" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Systembus-Aufrufe protokollieren" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ORDNER [BEFEHL [Argumente …]] - In Ordner Erstellen" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "ORDNER muss angegeben werden" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "Metadaten sind ungültig. Es ist keine Anwendung oder Laufzeit" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "Kein Erweiterungspunkt entspricht %s in %s" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Fehlendes »=« in Bind-Mount-Option »%s«" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Anwendung kann nicht gestartet werden" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Quellenordner" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "QUELL-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Quellenreferenz" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "QUELL-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Einzeiliger Betreff" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "BETREFF" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Vollständige Beschreibung" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TEXTKÖRPER" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Appstream-Zweig aktualisieren" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Die Zusammenfassung nicht aktualisieren" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "GPG-Schlüsselkennung zum Unterschreiben des »Commit«" +msgstr "GPG-Schlüsselkennung zum Unterschreiben des Commits" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#, fuzzy +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Zeitstempel des Commits überschreiben" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +#, fuzzy +msgid "TIMESTAMP" +msgstr "ISO-8601-ZEITSTEMPEL" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "ZIEL-REPO muss angegeben werden" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Zu exportierende Architektur (muss kompatibel mit dem Rechner sein)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Commit von Laufzeit (/usr), nicht /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Alternativen Ordner für die Dateien verwenden" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "UNTERORDNER" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Auszuschließende Dateien" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "MUSTER" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Einzuschließende ausgeschlossene Dateien" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" -msgstr "" +msgstr "Zeitstempel des Commits überschreiben" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "Sammlungskennung" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Ungültiger URI-Typ %s, nur http/https werden unterstützt" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" "Basisname konnte in %s nicht gefunden werden, bitte geben Sie einen Namen " "explizit an" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Schrägstriche sind nicht im zusätzlichen Datennamen erlaubt" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Ungültiges Format der sha256-Prüfsumme: »%s«" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Größe 0 der Extradaten wird nicht unterstützt" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "ORT ORDNER [ZWEIG] - Quelle aus Erstellungsordner erzeugen" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "ORT und ORDNER müssen angegeben werden" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "»%s« ist keine gültige Sammlungskennung: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "In den Metadaten ist kein Name angegeben" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" -msgstr "" +msgstr "Commit: %s\n" -#: app/flatpak-builtins-build-export.c:977 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:973 +#, c-format msgid "Metadata Total: %u\n" -msgstr "Details zur entfernten Quelle anzeigen" +msgstr "" -#: app/flatpak-builtins-build-export.c:978 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:974 +#, c-format msgid "Metadata Written: %u\n" -msgstr "Details zur entfernten Quelle anzeigen" +msgstr "" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "Festzulegender Befehl" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "BEFEHL" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Benötigte Flatpak-Version" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" -msgstr "" +msgstr "MAJOR.MINOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Exporte nicht verarbeiten" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Zusätzliche Dateninformation" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Information zu Erweiterungspunkt hinzufügen" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NAME=VARIABLE[=WERT]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Information zu Erweiterungspunkt hinzufügen" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NAME" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" -msgstr "" +msgstr "Priorität der Erweiterung festlegen (nur für Erweiterungen)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" -msgstr "" +msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Die für die App verwendete Laufzeit ändern" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Die für die App verwendete Laufzeit ändern" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "LAUFZEIT" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Allgemeine Metadaten-Einstellungen festlegen" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUPPE=SCHLÜSSEL[=WERT]]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Schreib-Berechtigungen der Anwendung widerrufen" + +#: app/flatpak-builtins-build-finish.c:155 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, wrong extension\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 -#, fuzzy, c-format +#: app/flatpak-builtins-build-finish.c:163 +#, c-format +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:167 +#, c-format msgid "Exporting %s\n" -msgstr "Zusammenfassung wird aktualisiert\n" +msgstr "" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Zu wenige Elemente im Argument %s von --extra-data" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -751,7 +635,8 @@ "Zu wenige Elemente im Argument %s von --metadata. Das Format ist " "GRUPPE=SCHLÜSSEL[=WERT]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -760,21 +645,21 @@ "Zu wenige Elemente für den Parameter %s von --extension. Das Format ist " "NAME=VAR[=WERT]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "ORDNER - einen Erstellungsordner abschließen" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Erstellungsordner %s ist nicht initialisiert" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Erstellungsordner %s wurde bereits finalisiert" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Bitte überprüfen Sie die exportierten Dateien und die Metadaten\n" @@ -790,141 +675,150 @@ msgid "Import oci image instead of flatpak bundle" msgstr "OCI-Abbild anstelle eines Flatpak-Bündels importieren" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Referenz »%s« wurde in der Registrierungsdatenbank nicht gefunden" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 msgid "Multiple images in registry, specify a ref with --ref" 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, fuzzy, c-format msgid "Importing %s (%s)\n" msgstr "Aktualisieren: %s von %s\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "ORT DATEINAME - Ein Dateibündel in eine lokale Quelle importieren" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Zu verwendende Architektur" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Variable anhand angegebener Laufzeit initialisieren" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 #, fuzzy msgid "Initialize apps from named app" msgstr "Variable anhand angegebener Laufzeit initialisieren" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APP" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Version für --base angeben" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSION" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Diese Basiserweiterung einschließen" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "ERWEITERUNG" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "ERWEITERUNG" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "/usr mit einer schreibbaren Kopie der sdk initialisieren" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Geben Sie den Erstellungstyp an (App, Laufzeit, Erweiterung)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TYP" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Schlagwort hinzufügen" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "SCHLAGWORT" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Diese sdk-Erweiterung in /usr einschließen" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Legt fest, wo sdk gespeichert wird (Standard ist »usr«)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "sdk/var reinitialisieren" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Angeforderte Erweiterung »%s« ist nur teilweise installiert" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Angeforderte Erweiterung »%s« ist nicht installiert" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "ORDNER ANWENDUNGSNAME SDK LAUFZEIT [ZWEIG] - Einen Erstellungsordner " "initialisieren" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "LAUFZEIT muss angegeben werden" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "»%s« ist kein gültiger Anwendungsname: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Erstellungsordner %s ist bereits initialisiert" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Architektur, für die installiert wird" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Nach Laufzeit unter dem angegebenen Namen suchen" @@ -932,55 +826,241 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "QUELLE [NAME [ZWEIG]] - Eine Anwendung oder Laufzeit signieren" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "ORT muss angegeben werden" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Keine gpg-Schlüsselkennungen angegeben" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Diese Quelle zu einer neuen Adresse umleiten" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Ein passender Name für diese Quelle" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TITEL" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Vorgabezweig für diese Quelle" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "ZWEIG" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "SAMMLUNGSKENNUNG" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Neuen öffentlichen GPG-Vorgabeschlüssel aus DATEI importieren" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "GPG-Schlüsselkennung zum Unterschreiben der Zusammenfassung" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Differenzdateien erzeugen" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Ungenutzte Objekte abschneiden" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Nur übergeordnete Ebenen der angegebenen TIEFE für jeden Commit durchqueren " +"(Standard: -1=unendlich)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "TIEFE" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Delta wird erstellt: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Delta wird erstellt: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Erstellung des Delta %s (%.10s) fehlgeschlagen: " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Erstellung des Delta %s (%.10s-%.10s) fehlgeschlagen: " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "ORT - Metadaten der Quelle aktualisieren" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Appstream-Zweig wird aktualisiert\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Zusammenfassung wird aktualisiert\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Objekte gesamt: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Keine unerreichbaren Objekte\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u Objekte gelöscht, %s freigemacht\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" -msgstr "" +msgstr "Konfigurationsschlüssel und Werte auflisten" #: app/flatpak-builtins-config.c:42 msgid "Get configuration for KEY" -msgstr "" +msgstr "Konfiguration für SCHLÜSSEL holen" #: app/flatpak-builtins-config.c:43 msgid "Set configuration for KEY to VALUE" -msgstr "" +msgstr "Konfiguration für SCHLÜSSEL auf WERT setzen" #: app/flatpak-builtins-config.c:44 msgid "Unset configuration for KEY" -msgstr "" +msgstr "Konfiguration für SCHLÜSSEL zurücksetzen" -#: app/flatpak-builtins-config.c:95 -#, fuzzy, c-format +#: app/flatpak-builtins-config.c:96 +#, c-format msgid "Unknown configure key '%s'" -msgstr "Unbekannter Befehl »%s«" +msgstr "Unbekannter Konfigurationsschlüssel »%s«" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 -#, fuzzy +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" -msgstr "ANWENDUNG muss angegeben werden" +msgstr "Schlüssel muss angegeben werden" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" -msgstr "" +msgstr "Sie müssen sowohl Schlüssel als auch Wert angeben" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" -msgstr "" +msgstr "[SCHLÜSSEL [WERT]] - Konfiguration verwalten" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 +#, fuzzy msgid "Must specify one of --list, --get, --set or --unset" +msgstr "Sie müssen eines von --list, --get, --set oder --unset angeben" + +#: app/flatpak-builtins-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Anzuzeigende Architektur" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "ZIEL=QUELLE" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" 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-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NAME - Entfernte Quelle löschen" +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "FERNE QUELLE und REFERENZ muss angegeben werden" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Warnung: Zusätzliche Metadaten für »%s« konnten nicht aktualisiert werden: " +"%s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Warnung: Zusätzliche Metadaten für »%s« konnten nicht aktualisiert werden: " +"%s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Warnung: Zusätzliche Metadaten für »%s« konnten nicht aktualisiert werden: " +"%s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1076,6 +1156,8 @@ #: app/flatpak-builtins-enter.c:109 msgid "Not running as root, may be unable to enter namespace" msgstr "" +"Wird nicht mit Root-Rechten ausgeführt, Betreten des Namensraums könnte " +"nicht möglich sein" #: app/flatpak-builtins-enter.c:115 #, c-format @@ -1131,234 +1213,205 @@ msgid "Can't switch uid" msgstr "Benutzerkennung kann nicht gewechselt werden" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Benutzerinstallationen anzeigen" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Systemweite Installationen anzeigen" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Spezifische systemweite Installationen anzeigen" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Referenz anzeigen" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Commit anzeigen" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Ursprung anzeigen" -#: app/flatpak-builtins-info.c:58 -#, fuzzy +#: app/flatpak-builtins-info.c:61 msgid "Show size" -msgstr "Referenz anzeigen" +msgstr "Größe anzeigen" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 -#, fuzzy +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" -msgstr "Details zur entfernten Quelle anzeigen" +msgstr "Metadaten anzeigen" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Nur Laufzeitumgebungen anzeigen" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Größe anzeigen" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" -msgstr "Hilfeoptionen anzeigen" +msgstr "Erweiterungen anzeigen" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, fuzzy msgid "Query file access" msgstr "" "\n" " Dateizugriff verwalten" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "PFAD" -#: app/flatpak-builtins-info.c:62 -#, fuzzy +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" +msgstr "Erweiterungen anzeigen" + +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "NAME [ZWEIG] - Informationen über installierte Anwendung und/oder Laufzeit " "erhalten" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NAME muss angegeben werden" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" -msgstr "" +msgstr "Referenz ist im Ursprung nicht vorhanden" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" -msgstr "" +msgstr "Ref:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" -msgstr "" +msgstr "Kennung:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" -msgstr "" +msgstr "Architektur:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 -#, fuzzy +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" -msgstr "Zu verwendender Zweig" +msgstr "Zweig:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" -msgstr "" +msgstr "Ursprung:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" -msgstr "Eine Anwendung ausführen" +msgstr "Sammlungskennung" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" -msgstr "" +msgstr "Aktiver Commit:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" -msgstr "" +msgstr "Letzter Commit:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" -msgstr "" +msgstr "Commit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" -msgstr "" +msgstr "Ort:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 -#, fuzzy +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" -msgstr "Signierte Laufzeitumgebung installieren" +msgstr "Installierte Größe:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 -#, fuzzy +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" -msgstr "Zu verwendende Laufzeitumgebung" +msgstr "Laufzeitumgebung:" -#: app/flatpak-builtins-info.c:242 -msgid "Installed subdirectories:" +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" msgstr "" -#: app/flatpak-builtins-info.c:363 -#, fuzzy +#: app/flatpak-builtins-info.c:260 +msgid "Installed subdirectories:" +msgstr "Installierte Unterordner:" + +#: app/flatpak-builtins-info.c:411 msgid "Extension:" -msgstr "Hilfeoptionen anzeigen" +msgstr "Erweiterung:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" -msgstr "" +msgstr "Unterpfade:" -#: app/flatpak-builtins-info-remote.c:49 -msgid "Commit to show info for" -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-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: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-info-remote.c:52 -msgid "Display log" -msgstr "" +#: app/flatpak-builtins-install.c:60 +msgid "Don't install related refs" +msgstr "Zugehörige Referenzen nicht installieren" -#: 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: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 "" +msgstr "Keine statischen Deltas verwenden" #: app/flatpak-builtins-install.c:65 msgid "Assume LOCATION is a .flatpak single-file bundle" @@ -1378,7 +1431,8 @@ msgid "Only install this subpath" msgstr "Nur diesen Unterpfad installieren" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatisch alle Fragen mit ja beantworten" @@ -1387,48 +1441,26 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Name der Bündel-Datei muss angegeben werden" -#: app/flatpak-builtins-install.c:274 -#, fuzzy +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" -msgstr "Entfernter Titel nicht festgelegt" - -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" +msgstr "Entfernte Bündel werden nicht unterstützt" -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Dateiname oder URI muss angegeben werden" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Installieren: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "ORT/GEGENSTELLE [REF…] - Anwendungen oder Laufzeiten installieren" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "FERNE QUELLE und REFERENZ muss angegeben werden" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Zusätzliche Informationen anzeigen" @@ -1445,103 +1477,40 @@ msgid "Arch to show" msgstr "Anzuzeigende Architektur" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" -msgstr "" +msgstr "Alle Referenzen auflisten (einschließlich lokale und Debug-Referenzen)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" -msgstr "" +msgstr "Referenz" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" -msgstr "" +msgstr "Ursprung" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" -msgstr "" +msgstr "Aktiver Commit" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" -msgstr "" +msgstr "Letzter Commit" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 -#, fuzzy +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" -msgstr "Signierte Laufzeitumgebung installieren" +msgstr "Installierte Größe" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" -msgstr "" +msgstr "Optionen" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Installierte Anwendungen und/oder Laufzeiten auflisten" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" -msgstr "Details zur entfernten Quelle anzeigen" - -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" -msgstr "Deaktivierte entfernte Quellen anzeigen" - -#: app/flatpak-builtins-list-remotes.c:53 -msgid " - List remote repositories" -msgstr " - Entfernte Quellen auflisten" - -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" -msgstr "" - -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" -msgstr "" - -#: app/flatpak-builtins-list-remotes.c:71 -msgid "Priority" -msgstr "" - -#: app/flatpak-builtins-ls-remote.c:45 -msgid "Show arches and branches" -msgstr "Architekturen und Zweige zeigen" - -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" -msgstr "Nur Laufzeitumgebungen anzeigen" - -#: app/flatpak-builtins-ls-remote.c:47 -msgid "Show only apps" -msgstr "Nur Anwendungen anzeigen" - -#: 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:49 -msgid "Limit to this arch (* for all)" -msgstr "Auf diese Architektur begrenzen (* für alle)" - -#: 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:177 -msgid "Commit" -msgstr "" - -#: app/flatpak-builtins-ls-remote.c:179 -#, fuzzy -msgid "Download size" -msgstr "Referenz anzeigen" - -#: app/flatpak-builtins-ls-remote.c:304 -#, fuzzy -msgid "No ref information available in repository" -msgstr "DATEI - Informationen über die exportierte Datei erhalten" - #: app/flatpak-builtins-make-current.c:38 msgid "Arch to make current for" msgstr "Architektur als aktuell festlegen für" @@ -1550,7 +1519,7 @@ msgid "APP BRANCH - Make branch of application current" msgstr "ANWENDUNG ZWEIG - Zweig der Anwendung aktuell setzen" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 msgid "APP must be specified" msgstr "ANWENDUNG muss angegeben werden" @@ -1563,266 +1532,710 @@ msgid "App %s branch %s is not installed" msgstr "Anwendung %s Zweig %s ist nicht installiert" -#: app/flatpak-builtins-override.c:54 +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 #, 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" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" msgstr "" -#: app/flatpak-builtins-repo.c:51 -#, c-format -msgid "Collection ID: %s\n" +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" msgstr "" -#: app/flatpak-builtins-repo.c:54 -#, c-format -msgid "Default branch: %s\n" +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" msgstr "" -#: app/flatpak-builtins-repo.c:57 -#, c-format -msgid "Redirect URL: %s\n" +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" msgstr "" -#: app/flatpak-builtins-repo.c:60 -#, c-format -msgid "Redirect collection ID: %s\n" +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" msgstr "" -#: app/flatpak-builtins-repo.c:68 -#, c-format -msgid "GPG key hash: %s\n" +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" msgstr "" -#: app/flatpak-builtins-repo.c:77 -#, c-format -msgid "%zd branches\n" +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" msgstr "" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-permission-remove.c:91 #, fuzzy -msgid "Installed" -msgstr "installieren" +msgid "Too few arguments" +msgstr "Zu viele Argumente" -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "" +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Dieser Anwendung Berechtigungen erteilen" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 #, fuzzy -msgid "Print general information about the repository" -msgstr "DATEI - Informationen über die exportierte Datei erhalten" +msgid "Wrong number of arguments" +msgstr "Zu viele Argumente" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-permission-show.c:112 #, fuzzy -msgid "List the branches in the repository" -msgstr "Vorgabezweig für diese Quelle" +msgid "APP_ID - Show permissions for an app" +msgstr "Dieser Anwendung Berechtigungen erteilen" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" -msgstr "" +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Deaktivierte entfernte Quellen anzeigen" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-ps.c:43 #, fuzzy -msgid "LOCATION - Repository maintenance" -msgstr "ORT - Metadaten der Quelle aktualisieren" +msgid "What information to show" +msgstr "Informationen über eine Quelle ausgeben" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" msgstr "" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Ein passender Name für diese Quelle" +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Sammlungskennung" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Vorgabezweig für diese Quelle" +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Sammlungskennung" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Zu verwendende Architektur" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" msgstr "" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "GPG-Schlüsselkennung zum Unterschreiben der Zusammenfassung" +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Zweig" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Differenzdateien erzeugen" +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Architekturen und Zweige zeigen" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Ungenutzte Objekte abschneiden" +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Commit" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" -"Nur übergeordnete Ebenen der angegebenen TIEFE für jeden Commit durchqueren " -"(Standard: -1=unendlich)" +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "TIEFE" +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Laufzeitumgebung:" -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Delta wird erstellt: %s (%.10s)\n" +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Nur Laufzeitumgebungen anzeigen" -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Delta wird erstellt: %s (%.10s-%.10s)\n" +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Laufzeitumgebung:" -#: app/flatpak-builtins-repo-update.c:203 -#, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Erstellung des Delta %s (%.10s) fehlgeschlagen: %s\n" +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Nur Laufzeitumgebungen anzeigen" -#: app/flatpak-builtins-repo-update.c:206 -#, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Erstellung des Delta %s (%.10s-%.10s) fehlgeschlagen: %s\n" +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Aktiver Commit" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "ORT - Metadaten der Quelle aktualisieren" +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Nur Laufzeitumgebungen anzeigen" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Appstream-Zweig wird aktualisiert\n" +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "ANWENDUNGSKENNUNG" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Zusammenfassung wird aktualisiert\n" +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Objekte gesamt: %u\n" +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Keine unerreichbaren Objekte\n" +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" -#: app/flatpak-builtins-repo-update.c:538 +#: app/flatpak-builtins-ps.c:89 #, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u Objekte gelöscht, %s freigemacht\n" - -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" -msgstr "Auszuführender Befehl" - -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" -msgstr "Zu verwendender Zweig" +msgid "Ambiguous column: %s" +msgstr "" -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" -msgstr "Entwickler-Laufzeitumgebung verwenden" +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Unbekannter Befehl »%s«" -#: app/flatpak-builtins-run.c:56 -msgid "Runtime to use" -msgstr "Zu verwendende Laufzeitumgebung" +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" -#: app/flatpak-builtins-run.c:57 -msgid "Runtime version to use" -msgstr "Zu verwendende Laufzeit" +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Hilfeoptionen anzeigen" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-ps.c:156 #, fuzzy -msgid "Log accessibility bus calls" -msgstr "Sitzungsbus-Aufrufe protokollieren" +msgid "Instance" +msgstr "Installiert" -#: app/flatpak-builtins-run.c:61 -msgid "Enable file forwarding" +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" msgstr "" -#: app/flatpak-builtins-run.c:82 -msgid "APP [args...] - Run an app" -msgstr "ANWENDUNG [Argumente …] - Eine Anwendung ausführen" +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Zusätzliche Dateninformation" -#: app/flatpak-builtins-search.c:239 -msgid "TEXT - Search remote apps/runtimes for text" +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Nichts unternehmen, wenn die entfernte Quelle existiert" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "ORT legt eine Konfigurationsdatei fest, nicht den Quellort" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "GPG-Überprüfung deaktivieren" + +# Bedeutung aus flatpak-remote-add.xml +# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Entfernte Quelle markieren als »nicht berücksichtigen«" + +# Bedeutung aus flatpak-remote-add.xml +# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Ferne Quelle markieren als »Nicht für Abhängigkeiten verwenden«" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Priorität festlegen (Standard 1, mehr bedeutet höhere Priorität)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITÄT" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Ein passender Name für diese entfernte Quelle" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Zu verwendender Vorgabe-Zweig für diese ferne Quelle" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "GPG-Schlüssel aus DATEI importieren (- für stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Entfernte Quelle deaktivieren" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-remote-add.c:206 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Namensraum %s konnte nicht geöffnet werden: %s" + +#: app/flatpak-builtins-remote-add.c:214 #, fuzzy -msgid "TEXT must be specified" -msgstr "ENTFERNTE QUELLE muss angegeben werden" +msgid "Invalid file format" +msgstr "Ungültiges Umgebungsformat: %s" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, 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-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Ungültiger GPG-Schlüssel" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NAME ORT - Eine ferne Quelle hinzufügen" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "GPG-Überprüfung ist erforderlich, wenn Sammlungen aktiviert sind" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Entfernt gelegene Quelle %s existiert bereits" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "In der flatpakrepo-Datei ist keine Adresse angegeben" + +#: app/flatpak-builtins-remote-add.c:383 +#, c-format +msgid "Warning: Could not update extra metadata for '%s': %s\n" +msgstr "" +"Warnung: Zusätzliche Metadaten für »%s« konnten nicht aktualisiert werden: " +"%s\n" + +#: app/flatpak-builtins-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Entfernte Quelle entfernen, selbst wenn sie in Verwendung ist" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NAME - Entfernte Quelle löschen" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 #, fuzzy -msgid "Application ID" -msgstr "Eine Anwendung ausführen" +msgid "Show parent" +msgstr "Referenz anzeigen" -#: app/flatpak-builtins-search.c:306 -msgid "Version" +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" msgstr "" -#: app/flatpak-builtins-search.c:308 +#: app/flatpak-builtins-remote-info.c:213 #, fuzzy -msgid "Branch" +msgid "Download size:" +msgstr "Heruntergeladene Größe" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 +#, fuzzy +msgid " Commit:" +msgstr "Commit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Details zur entfernten Quelle anzeigen" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Deaktivierte entfernte Quellen anzeigen" + +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" +msgstr " - Entfernte Quellen auflisten" + +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" +msgstr "Name" + +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" +msgstr "Titel" + +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" +msgstr "Priorität" + +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" +msgstr "Architekturen und Zweige zeigen" + +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" +msgstr "Nur Laufzeitumgebungen anzeigen" + +#: app/flatpak-builtins-remote-ls.c:47 +msgid "Show only apps" +msgstr "Nur Anwendungen anzeigen" + +#: app/flatpak-builtins-remote-ls.c:48 +msgid "Show only those where updates are available" +msgstr "Nur Anwendungen anzeigen, die aktualisiert werden können" + +#: app/flatpak-builtins-remote-ls.c:49 +msgid "Limit to this arch (* for all)" +msgstr "Auf diese Architektur begrenzen (* für alle)" + +#: app/flatpak-builtins-remote-ls.c:101 +#, fuzzy +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr " ENTFERNTE QUELLE - Verfügbare Laufzeiten und Anwendungen anzeigen" + +#: app/flatpak-builtins-remote-ls.c:201 +msgid "Download size" +msgstr "Heruntergeladene Größe" + +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "GPG-Überprüfung aktivieren" + +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Entfernte Quelle markieren als »berücksichtigen«" + +# Bedeutung aus flatpak-remote-add.xml +# Mark the remote as not enumerated. This means the remote will not be used to list applications, for instance in graphical installation tools. +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Ferne Quelle markieren als »Verwendet für Abhängigkeiten«" + +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Eine neue Adresse festlegen" + +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Entfernte Quelle aktivieren" + +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Zusätzliche Metadaten aus der Zusammenfassungsdatei aktualisieren" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NAME - Entfernte Quelle verändern" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Entfernter NAME muss angegeben werden" + +#: app/flatpak-builtins-remote-modify.c:211 +#, c-format +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "" +"Zusätzliche Metadaten aus Zusammenfassung der entfernten Quelle für %s " +"werden aktualisiert\n" + +#: app/flatpak-builtins-remote-modify.c:214 +#, 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-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Zusätzliche Metadaten für %s konnten nicht aktualisiert werden" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Namensraum %s konnte nicht geöffnet werden: %s" + +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Installieren: %s\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "" + +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Ungültige bereitgestellte Referenz %s: " + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" +msgstr "Ungenutzte Objekte abschneiden" + +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Zugehörige Referenzen nicht installieren" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Titel: %s\n" + +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "Sammlungskennung" + +#: 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:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "Sammlungskennung" + +#: app/flatpak-builtins-repo.c:73 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:82 +#, c-format +msgid "%zd branches\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" +msgstr "Installiert" + +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "Download" + +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" +msgstr "Allgemeine Informationen über die Quelle ausgeben" + +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" +msgstr "Zweige in dieser Quelle auflisten" + +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "Metadaten für einen Zweig ausgeben" + +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "ORT - Wartung der Quelle" + +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "Auszuführender Befehl" + +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" msgstr "Zu verwendender Zweig" -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "Entwickler-Laufzeitumgebung verwenden" + +#: app/flatpak-builtins-run.c:62 +msgid "Runtime to use" +msgstr "Zu verwendende Laufzeitumgebung" + +#: app/flatpak-builtins-run.c:63 +msgid "Runtime version to use" +msgstr "Zu verwendende Laufzeit" + +#: app/flatpak-builtins-run.c:66 +msgid "Log accessibility bus calls" +msgstr "Hilfstechnologie-Bus-Aufrufe protokollieren" + +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Hilfstechnologie-Bus-Aufrufe protokollieren" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Keine statischen Deltas verwenden" + +#: app/flatpak-builtins-run.c:69 +msgid "Enable file forwarding" +msgstr "Dateiweiterleitung aktivieren" + +#: app/flatpak-builtins-run.c:70 +#, fuzzy +msgid "Run specified commit" +msgstr "Aktiver Commit" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Signierte Laufzeitumgebung aktualisieren" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 +msgid "APP [args...] - Run an app" +msgstr "ANWENDUNG [Argumente …] - Eine Anwendung ausführen" + +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Architektur, für die installiert wird" + +#: app/flatpak-builtins-search.c:254 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:263 +msgid "TEXT must be specified" +msgstr "TEXT muss angegeben werden" + +#: app/flatpak-builtins-search.c:316 +#, fuzzy +msgid "Application ID" +msgstr "Sammlungskennung" + +#: app/flatpak-builtins-search.c:317 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "Keine entfernte Quelle %s" -#: app/flatpak-builtins-search.c:311 -#, fuzzy +#: app/flatpak-builtins-search.c:322 msgid "Description" -msgstr "Vollständige Beschreibung" +msgstr "Beschreibung" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "Kein Treffer für %s" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Zu installierende Architektur" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Referenz in lokaler Quelle behalten" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Zugehörige Referenzen nicht deinstallieren" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Dateien entfernen, selbst wenn sie in Verwendung sind" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Anwendung deinstallieren" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Laufzeitumgebung deinstallieren" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REF… - Eine Anwendung deinstallieren" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Es muss zumindest eine REFERENZ angegeben werden" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Installieren: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Zu installierende Architektur" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1858,45 +2271,278 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REF…] - Anwendungen oder Laufzeitumgebungen aktualisieren" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" -msgstr "Nach %s suchen\n" +msgstr "Keine Aktualisierungen.\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, 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 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Appstream für ferne Quelle %s wird aktualisiert\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Appstream für ferne Quelle %s wird aktualisiert\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" +msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" +"Erforderliche Laufzeit für %s (%s) ist nicht installiert. Suche läuft …\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Was wollen Sie installieren (0 zum Abbrechen)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Erforderliche Laufzeit für %s (%s) ist nicht installiert. Suche läuft …\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Was wollen Sie installieren (0 zum Abbrechen)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "%s wird als neue ferne Quelle »%s« eingerichtet" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"Die entfernte Quelle »%s« in %s enthält zusätzliche Anwendungen.\n" +"Wollen Sie weitere Anwendungen von dort installieren?" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Diese Anwendung ist abhängig von Laufzeiten von:\n" +" %s\n" +"Richten Sie diese als neue entfernte Quelle »%s« ein" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "installieren" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "update" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "Bündel installieren" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "installieren" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Installieren: %s von %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Installieren: %s von %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualisieren: %s von %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Aktualisieren: %s von %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Installieren: %s von Bündel %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Installieren: %s von Bündel %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Installieren: %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Installieren: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Keine Aktualisierungen.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Jetzt bei %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Warnung: %s %s fehlgeschlagen: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Der Anwendung Schreib-Berechtigungen erteilen" + +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +" Dateizugriff verwalten" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +" Dateizugriff verwalten" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Systembus-Aufrufe protokollieren" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Systembus-Aufrufe protokollieren" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Installieren: %s von %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Installieren: %s\n" + +#: app/flatpak-cli-transaction.c:623 #, fuzzy, c-format -msgid "Error updating: %s\n" -msgstr "Zusammenfassung wird aktualisiert\n" +msgid "Updating in %s:\n" +msgstr "Aktualisieren: %s von %s\n" -#: app/flatpak-builtins-utils.c:526 -#, fuzzy, c-format -msgid "Remote \"%s\" not found" -msgstr "Daten wurden nicht gefunden" +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, c-format +msgid "Skipping: %s\n" +msgstr "" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1915,33 +2561,41 @@ msgid "Uninstall an installed application or runtime" msgstr "Eine installierte Anwendung oder Laufzeitumgebung deinstallieren" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Installierte Anwendungen und/oder Laufzeitumgebungen auflisten" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Informationen zu installierter Anwendung oder Laufzeit anzeigen" -#: app/flatpak-main.c:68 -#, fuzzy +#: app/flatpak-main.c:70 msgid "Configure flatpak" -msgstr "Ferne Quelle einrichten" +msgstr "Flatpak einrichten" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 #, fuzzy +msgid "Repair flatpak installation" +msgstr "Benutzerinstallationen anzeigen" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +#, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Eine Anwendung oder Laufzeitumgebung signieren" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1949,24 +2603,31 @@ "\n" " Anwendungen ausführen" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Eine Anwendung ausführen" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Berechtigungen für eine Anwendung ersetzen" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Die als Standard auszuführende Version angeben" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "In den Namensraum einer laufenden Anwendung wechseln" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Anwendungen ausführen" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1974,836 +2635,1249 @@ "\n" " Dateizugriff verwalten" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Einer Anwendung den Zugriff auf eine bestimmte Datei gewähren" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Den Zugriff auf eine bestimmte Datei widerrufen" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Informationen zu einer bestimmten Datei anzeigen" -#: app/flatpak-main.c:86 -msgid "List exported files" -msgstr "Exportierte Dateien auflisten" +#: app/flatpak-main.c:91 +msgid "List exported files" +msgstr "Exportierte Dateien auflisten" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Schreib-Berechtigungen der Anwendung widerrufen" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Der Anwendung Lese-Berechtigungen erteilen" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Der Anwendung Lese-Berechtigungen erteilen" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Der Anwendung Lese-Berechtigungen erteilen" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 +msgid "" +"\n" +" Manage remote repositories" +msgstr "" +"\n" +" Entfernte Quellen verwalten" + +#: app/flatpak-main.c:102 +msgid "List all configured remotes" +msgstr "Alle konfigurierten entfernten Quellen auflisten" + +#: app/flatpak-main.c:103 +msgid "Add a new remote repository (by URL)" +msgstr "Eine neue entfernte Quelle hinzufügen (mittels Adresse)" + +#: app/flatpak-main.c:104 +msgid "Modify properties of a configured remote" +msgstr "Eigenschaften einer konfigurierten entfernten Quelle verändern" + +#: app/flatpak-main.c:105 +msgid "Delete a configured remote" +msgstr "Eine konfigurierte entfernte Quelle löschen" + +#: app/flatpak-main.c:107 +msgid "List contents of a configured remote" +msgstr "Inhalt einer konfigurierten entfernten Quelle auflisten" + +#: app/flatpak-main.c:108 +#, 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:111 +msgid "" +"\n" +" Build applications" +msgstr "" +"\n" +" Anwendungen erstellen" + +#: app/flatpak-main.c:112 +msgid "Initialize a directory for building" +msgstr "Einen Ordner für die Erstellung initialisieren" + +#: app/flatpak-main.c:113 +msgid "Run a build command inside the build dir" +msgstr "Einen Erstellungsbefehl innerhalb des Erstellungsordners ausführen" + +#: app/flatpak-main.c:114 +msgid "Finish a build dir for export" +msgstr "Einen Erstellungsordner für den Export finalisieren" + +#: app/flatpak-main.c:115 +msgid "Export a build dir to a repository" +msgstr "Erstellungsordner in eine Quelle exportieren" + +#: app/flatpak-main.c:116 +#, 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:117 +msgid "Import a bundle file" +msgstr "Eine Bündel-Datei importieren" + +#: app/flatpak-main.c:118 +msgid "Sign an application or runtime" +msgstr "Eine Anwendung oder Laufzeitumgebung signieren" + +#: app/flatpak-main.c:119 +msgid "Update the summary file in a repository" +msgstr "Zusammenfassungsdatei in einer Quelle aktualisieren" + +#: app/flatpak-main.c:120 +msgid "Create new commit based on existing ref" +msgstr "Neuen Commit basierend auf existierendem Ref erstellen" + +#: app/flatpak-main.c:121 +msgid "Print information about a repo" +msgstr "Informationen über eine Quelle ausgeben" + +#: app/flatpak-main.c:138 +msgid "Print debug information during command processing, -vv for more detail" +msgstr "" +"Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben, -vv " +"für mehr Details" + +#: app/flatpak-main.c:139 +msgid "Print OSTree debug information during command processing" +msgstr "" +"OSTree-Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben" + +#: app/flatpak-main.c:140 +msgid "Show help options" +msgstr "Hilfeoptionen anzeigen" + +#: app/flatpak-main.c:145 +msgid "Print version information and exit" +msgstr "Versionsinformationen ausgeben und beenden" + +#: app/flatpak-main.c:146 +msgid "Print default arch and exit" +msgstr "Standard-Architektur ausgeben und beenden" + +#: app/flatpak-main.c:147 +msgid "Print supported arches and exit" +msgstr "Unterstützte Architekturen ausgeben und beenden" + +#: app/flatpak-main.c:148 +msgid "Print active gl drivers and exit" +msgstr "Aktiven GL-Treiber ausgeben und beenden" + +#: app/flatpak-main.c:153 +msgid "Work on user installations" +msgstr "Benutzerinstallationen bearbeiten" + +#: app/flatpak-main.c:154 +msgid "Work on system-wide installations (default)" +msgstr "Systemweite Installationen bearbeiten (Standard)" + +#: app/flatpak-main.c:155 +#, fuzzy +msgid "Work on specific system-wide installation(s)" +msgstr "Auf einer spezifischen systemweiten Installation arbeiten" + +#: app/flatpak-main.c:181 +msgid "Builtin Commands:" +msgstr "Eingebaute Befehle:" + +#: app/flatpak-main.c:361 +msgid "" +"The --installation option was used multiple times for a command that works " +"on one installation" +msgstr "" + +#: app/flatpak-main.c:480 +#, c-format +msgid "Unknown command '%s'" +msgstr "Unbekannter Befehl »%s«" + +#: app/flatpak-main.c:488 +msgid "No command specified" +msgstr "Kein Befehl angegeben" + +#: app/flatpak-main.c:608 +msgid "error:" +msgstr "Fehler:" + +#: common/flatpak-context.c:178 +#, c-format +msgid "Unknown share type %s, valid types are: %s" +msgstr "Unbekannter Freigabetyp %s, zulässige Typen sind: %s" + +#: common/flatpak-context.c:213 +#, c-format +msgid "Unknown policy type %s, valid types are: %s" +msgstr "Unbekannter Regeltyp %s, zulässige Typen sind: %s" + +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" +msgstr "Ungültiger Dbus-Name %s\n" + +#: common/flatpak-context.c:264 +#, c-format +msgid "Unknown socket type %s, valid types are: %s" +msgstr "Unbekannter Socket-Typ %s, zulässige Typen sind: %s" + +#: common/flatpak-context.c:293 +#, c-format +msgid "Unknown device type %s, valid types are: %s" +msgstr "Unbekannter Gerätetyp %s, zulässige Typen sind: %s" + +#: common/flatpak-context.c:321 +#, c-format +msgid "Unknown feature type %s, valid types are: %s" +msgstr "Unbekannter Funktionstyp %s, zulässige Typen sind: %s" + +#: common/flatpak-context.c:762 +#, c-format +msgid "" +"Unknown filesystem location %s, valid locations are: host, home, xdg-" +"*[/...], ~/dir, /dir" +msgstr "" +"Unbekannter Dateisystem-Ort %s, zulässige Orte sind: host, home, xdg-" +"*[/...], ~/Ordner, /Ordner" + +#: common/flatpak-context.c:1034 +#, c-format +msgid "Invalid env format %s" +msgstr "Ungültiges Umgebungsformat: %s" + +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 +msgid "Share with host" +msgstr "Mit Rechner teilen" + +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 +msgid "SHARE" +msgstr "FREIGABE" + +#: common/flatpak-context.c:1199 +msgid "Unshare with host" +msgstr "Freigabe für Rechner aufheben" + +#: common/flatpak-context.c:1200 +msgid "Expose socket to app" +msgstr "Socket für die Anwendung sichtbar machen" + +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 +msgid "SOCKET" +msgstr "SOCKET" + +#: common/flatpak-context.c:1201 +msgid "Don't expose socket to app" +msgstr "Socket vor der Anwendung verbergen" + +#: common/flatpak-context.c:1202 +msgid "Expose device to app" +msgstr "Gerät für die Anwendung sichtbar machen" + +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 +msgid "DEVICE" +msgstr "GERÄT" + +#: common/flatpak-context.c:1203 +msgid "Don't expose device to app" +msgstr "Gerät vor der Anwendung verbergen" + +#: common/flatpak-context.c:1204 +msgid "Allow feature" +msgstr "Funktion erlauben" + +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 +msgid "FEATURE" +msgstr "FUNKTION" + +#: common/flatpak-context.c:1205 +msgid "Don't allow feature" +msgstr "Funktion nicht erlauben" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 -msgid "" -"\n" -" Manage remote repositories" +#: common/flatpak-context.c:1206 +msgid "Expose filesystem to app (:ro for read-only)" msgstr "" -"\n" -" Entfernte Quellen verwalten" - -#: app/flatpak-main.c:90 -msgid "List all configured remotes" -msgstr "Alle konfigurierten entfernten Quellen auflisten" +"Das Dateisystem für die Anwendung sichtbar machen (:ro für schreibgeschützt)" -#: app/flatpak-main.c:91 -msgid "Add a new remote repository (by URL)" -msgstr "Eine neue entfernte Quelle hinzufügen (mittels Adresse)" +#: common/flatpak-context.c:1206 +msgid "FILESYSTEM[:ro]" +msgstr "DATEISYSTEM[:ro]" -#: app/flatpak-main.c:92 -msgid "Modify properties of a configured remote" -msgstr "Eigenschaften einer konfigurierten entfernten Quelle verändern" +#: common/flatpak-context.c:1207 +msgid "Don't expose filesystem to app" +msgstr "Das Dateisystem vor der Anwendung verbergen" -#: app/flatpak-main.c:93 -msgid "Delete a configured remote" -msgstr "Eine konfigurierte entfernte Quelle löschen" +#: common/flatpak-context.c:1207 +msgid "FILESYSTEM" +msgstr "DATEISYSTEM" -#: app/flatpak-main.c:95 -msgid "List contents of a configured remote" -msgstr "Inhalt einer konfigurierten entfernten Quelle auflisten" +#: common/flatpak-context.c:1208 +msgid "Set environment variable" +msgstr "Umgebungsvariable festlegen" -#: app/flatpak-main.c:96 -#, fuzzy -msgid "Show information about a remote app or runtime" -msgstr "Informationen zu installierter Anwendung oder Laufzeit anzeigen" +#: common/flatpak-context.c:1208 +msgid "VAR=VALUE" +msgstr "VAR=WERT" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:99 -msgid "" -"\n" -" Build applications" +#: common/flatpak-context.c:1209 +msgid "Allow app to own name on the session bus" msgstr "" -"\n" -" Anwendungen erstellen" +"Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: app/flatpak-main.c:100 -msgid "Initialize a directory for building" -msgstr "Einen Ordner für die Erstellung initialisieren" +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 +msgid "DBUS_NAME" +msgstr "DBUS_NAME" -#: app/flatpak-main.c:101 -msgid "Run a build command inside the build dir" -msgstr "Einen Erstellungsbefehl innerhalb des Erstellungsordners ausführen" +#: common/flatpak-context.c:1210 +msgid "Allow app to talk to name on the session bus" +msgstr "Der Anwendung erlauben, mit Namen auf dem Sitzungsbus zu kommunizieren" -#: app/flatpak-main.c:102 -msgid "Finish a build dir for export" -msgstr "Einen Erstellungsordner für den Export finalisieren" +#: common/flatpak-context.c:1211 +msgid "Allow app to own name on the system bus" +msgstr "" +"Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: app/flatpak-main.c:103 -msgid "Export a build dir to a repository" -msgstr "Erstellungsordner in eine Quelle exportieren" +#: common/flatpak-context.c:1212 +msgid "Allow app to talk to name on the system bus" +msgstr "Der Anwendung erlauben, mit Namen auf dem Systembus zu kommunizieren" -#: 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" +#: common/flatpak-context.c:1213 +msgid "Add generic policy option" +msgstr "Allgemeine Richtlinien-Einstellungen hinzufügen" -#: app/flatpak-main.c:105 -msgid "Import a bundle file" -msgstr "Eine Bündel-Datei importieren" +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 +msgid "SUBSYSTEM.KEY=VALUE" +msgstr "SUBSYSTEM.SCHLÜSSEL=WERT" -#: app/flatpak-main.c:106 -msgid "Sign an application or runtime" -msgstr "Eine Anwendung oder Laufzeitumgebung signieren" +#: common/flatpak-context.c:1214 +msgid "Remove generic policy option" +msgstr "Allgemeine Richtlinien-Einstellungen entfernen" -#: app/flatpak-main.c:107 -msgid "Update the summary file in a repository" -msgstr "Zusammenfassungsdatei in einer Quelle aktualisieren" +#: common/flatpak-context.c:1215 +msgid "Persist home directory" +msgstr "Basisordner beständig machen" -#: app/flatpak-main.c:108 -msgid "Create new commit based on existing ref" -msgstr "Neuen Commit basierend auf existierendem Ref erstellen" +#: common/flatpak-context.c:1215 +msgid "FILENAME" +msgstr "DATEINAME" -#: app/flatpak-main.c:109 -#, fuzzy -msgid "Print information about a repo" -msgstr "DATEI - Informationen über die exportierte Datei erhalten" +#. This is not needed/used anymore, so hidden, but we accept it for backwards compat +#: common/flatpak-context.c:1217 +msgid "Don't require a running session (no cgroups creation)" +msgstr "" +"Laufende Sitzung als nicht erforderlich festlegen (keine Erstellung von " +"cgroups)" -#: app/flatpak-main.c:126 -#, fuzzy -msgid "Print debug information during command processing, -vv for more detail" -msgstr "Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben" +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Während des Holens von %s von der entfernten Quelle %s: " -#: app/flatpak-main.c:127 -msgid "Print OSTree debug information during command processing" +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" msgstr "" -"OSTree-Fehlerdiagnoseinformationen während der Befehlsverarbeitung ausgeben" +"Zusätzliche Metadaten aus Zusammenfassung der entfernten Quelle für %s " +"werden aktualisiert\n" -#: app/flatpak-main.c:128 -msgid "Show help options" -msgstr "Hilfeoptionen anzeigen" +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" -#: app/flatpak-main.c:133 -msgid "Print version information and exit" -msgstr "Versionsinformationen ausgeben und beenden" +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" -#: app/flatpak-main.c:134 -msgid "Print default arch and exit" -msgstr "Standard-Architektur ausgeben und beenden" +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Kein Flatpak-Zwischenspeicher in Zusammenfassung entfernter Quelle" -#: app/flatpak-main.c:135 -msgid "Print supported arches and exit" -msgstr "Unterstützte Architekturen ausgeben und beenden" +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "" +"Kein Eintrag für %s in Zusammenfassung des entfernten Flatpak-" +"Zwischenspeichers" -#: app/flatpak-main.c:136 -msgid "Print active gl drivers and exit" -msgstr "Aktiven GL-Treiber ausgeben und beenden" +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "" +"Kein Eintrag für %s in Zusammenfassung des entfernten Flatpak-" +"Zwischenspeichers" -#: app/flatpak-main.c:141 -msgid "Work on user installations" -msgstr "Benutzerinstallationen bearbeiten" +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "" +"Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: app/flatpak-main.c:142 -msgid "Work on system-wide installations (default)" -msgstr "Systemweite Installationen bearbeiten (Standard)" +#: common/flatpak-dir.c:1602 +#, c-format +msgid "No overrides found for %s" +msgstr "Keine Ersetzungen für %s gefunden" -#: app/flatpak-main.c:143 -#, fuzzy -msgid "Work on specific system-wide installation(s)" -msgstr "Auf einer spezifischen systemweiten Installation arbeiten" +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s ist nicht installiert" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s ist nicht installiert" + +#: common/flatpak-dir.c:2321 +#, c-format +msgid "While opening repository %s: " +msgstr "Während des Öffnens der Quelle %s: " -#: app/flatpak-main.c:143 +#: common/flatpak-dir.c:2581 #, fuzzy -msgid "NAME" -msgstr "DATEINAME" +msgid "No appstream commit to deploy" +msgstr "Bereitzustellender Commit" -#: app/flatpak-main.c:169 -msgid "Builtin Commands:" -msgstr "Eingebaute Befehle:" +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 +msgid "Can't create deploy directory" +msgstr "Bereitstellungsordner konnte nicht erstellt werden" -#: app/flatpak-main.c:370 -msgid "" -"The --installation option was used multiple times for a command that works " -"on one installation" -msgstr "" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" -#: app/flatpak-main.c:489 -#, c-format -msgid "Unknown command '%s'" -msgstr "Unbekannter Befehl »%s«" +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" -#: app/flatpak-main.c:497 -msgid "No command specified" -msgstr "Kein Befehl angegeben" +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" -#: app/flatpak-main.c:615 -msgid "error:" -msgstr "Fehler:" +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" -#: app/flatpak-transaction.c:313 +#: common/flatpak-dir.c:3959 #, fuzzy, c-format -msgid "Found in remote %s\n" -msgstr "In verschiedenen fernen Quellen gefunden:\n" +msgid "Invalid checksum for extra data uri %s" +msgstr "Ungültige Prüfsumme für Extradaten %s" -#: app/flatpak-transaction.c:317 +#: common/flatpak-dir.c:3964 #, c-format -msgid "Found in remote %s, do you want to install it?" -msgstr "" +msgid "Empty name for extra data uri %s" +msgstr "Leerer Name für die Adresse %s der Extradaten" -#: app/flatpak-transaction.c:322 -msgid "Found in several remotes:\n" -msgstr "In verschiedenen fernen Quellen gefunden:\n" +#: common/flatpak-dir.c:3971 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Nicht unterstützte Adresse %s der Extradaten" -#: app/flatpak-transaction.c:327 -msgid "Which do you want to install (0 to abort)?" -msgstr "Was wollen Sie installieren (0 zum Abbrechen)?" +#: common/flatpak-dir.c:3985 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Zusätzliche lokale Daten %s konnten nicht gelesen werden: %s" -#: app/flatpak-transaction.c:417 +#: common/flatpak-dir.c:3988 #, 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" +msgid "Wrong size for extra-data %s" +msgstr "Falsche Größe für Extradaten %s" -#: app/flatpak-transaction.c:423 +#: common/flatpak-dir.c:4003 #, 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" +msgid "While downloading %s: " +msgstr "Während des Herunterladens von %s: " -#: 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 +#: common/flatpak-dir.c:4010 #, c-format -msgid "%s not installed" -msgstr "%s ist nicht installiert" +msgid "Wrong size for extra data %s" +msgstr "Falsche Größe für Extradaten %s" -#: app/flatpak-transaction.c:512 +#: common/flatpak-dir.c:4021 #, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Entfernte Quelle %s ist deaktiviert. Aktualisierung %s wird ignoriert" +msgid "Invalid checksum for extra data %s" +msgstr "Ungültige Prüfsumme für Extradaten %s" -#: app/flatpak-transaction.c:525 -#, fuzzy, c-format -msgid "%s already installed, skipping\n" -msgstr "%s ist bereits installiert" +#: common/flatpak-dir.c:4080 +msgid "Remote OCI index has no registry uri" +msgstr "" -#: app/flatpak-transaction.c:531 -#, fuzzy, c-format -msgid "%s is already installed from other remote (%s)" +#: common/flatpak-dir.c:4181 +#, c-format +msgid "%s commit %s already installed" msgstr "%s-Commit %s wurde bereits installiert" -#: app/flatpak-transaction.c:543 -#, c-format -msgid "Warning: Can't find dependencies: %s\n" +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" msgstr "" -#: app/flatpak-transaction.c:570 +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 +#, 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:4697 +#, fuzzy +msgid "No summary found" +msgstr "Kein Treffer für %s" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Invalid require-flatpak argument %s\n" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" msgstr "" -#: app/flatpak-transaction.c:576 +#: common/flatpak-dir.c:4717 #, c-format -msgid "%s needs a later flatpak version (%s)" -msgstr "%s verlangt eine neuere Version von flatpak (%s)" +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" -#: 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" +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" -#: app/flatpak-transaction.c:744 -msgid "install" -msgstr "installieren" +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" -#: app/flatpak-transaction.c:746 -#, fuzzy, c-format -msgid "Installing for user: %s from %s\n" -msgstr "Installieren: %s von %s\n" +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" -#: app/flatpak-transaction.c:748 +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 #, c-format -msgid "Installing: %s from %s\n" -msgstr "Installieren: %s von %s\n" +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: app/flatpak-transaction.c:765 -msgid "update" -msgstr "update" +#: common/flatpak-dir.c:5448 +msgid "Not enough memory" +msgstr "Nicht genug Speicher" -#: app/flatpak-transaction.c:774 -#, fuzzy, c-format -msgid "Updating for user: %s from %s\n" -msgstr "Aktualisieren: %s von %s\n" +#: common/flatpak-dir.c:5467 +msgid "Failed to read from exported file" +msgstr "Lesen aus der exportierten Datei fehlgeschlagen" -#: app/flatpak-transaction.c:776 -#, c-format -msgid "Updating: %s from %s\n" -msgstr "Aktualisieren: %s von %s\n" +#: common/flatpak-dir.c:5661 +msgid "Error reading mimetype xml file" +msgstr "Fehler beim Lesen der MIME-Typen-XML-Datei" -#: app/flatpak-transaction.c:796 +#: common/flatpak-dir.c:5666 +msgid "Invalid mimetype xml file" +msgstr "Ungültige MIME-Typen-XML-Datei" + +#: common/flatpak-dir.c:5755 #, c-format -msgid "Now at %s.\n" -msgstr "Jetzt bei %s.\n" +msgid "D-Bus service file '%s' has wrong name" +msgstr "" -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Keine Aktualisierungen.\n" +#: common/flatpak-dir.c:6290 +msgid "While getting detached metadata: " +msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "Bündel installieren" +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " -#: 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" +#: common/flatpak-dir.c:6308 +msgid "While creating extradir: " +msgstr "Beim Anlegen von extradir: " -#: app/flatpak-transaction.c:824 -#, c-format -msgid "Installing: %s from bundle %s\n" -msgstr "Installieren: %s von Bündel %s\n" +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Ungültige Prüfsumme für zusätzliche Daten" -#: app/flatpak-transaction.c:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Warnung: %s %s fehlgeschlagen: %s\n" +#: common/flatpak-dir.c:6358 +msgid "Wrong size for extra data" +msgstr "Falsche Größe für zusätzliche Daten" -#: app/flatpak-transaction.c:841 +#: common/flatpak-dir.c:6371 #, c-format -msgid "Error: Failed to %s %s: %s\n" -msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" +msgid "While writing extra data file '%s': " +msgstr "Fehler beim Schreiben der zusätzlichen Datendatei: »%s«: " -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" -msgstr "Ein oder mehrere Vorgänge sind fehlgeschlagen" +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " -#: common/flatpak-context.c:175 +#: common/flatpak-dir.c:6557 #, c-format -msgid "Unknown share type %s, valid types are: %s" -msgstr "Unbekannter Freigabetyp %s, zulässige Typen sind: %s" +msgid "apply_extra script failed, exit status %d" +msgstr "Skript apply_extra ist fehlgeschlagen, Exit-Status %d" -#: common/flatpak-context.c:210 +#: common/flatpak-dir.c:6641 #, c-format -msgid "Unknown policy type %s, valid types are: %s" -msgstr "Unbekannter Regeltyp %s, zulässige Typen sind: %s" +msgid "While trying to resolve ref %s: " +msgstr "Während des Auflösens der Referenz %s: " -#: common/flatpak-context.c:248 +#: common/flatpak-dir.c:6656 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Ungültiger Dbus-Name %s\n" +msgid "%s is not available" +msgstr "%s ist nicht verfügbar" -#: common/flatpak-context.c:261 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format -msgid "Unknown socket type %s, valid types are: %s" -msgstr "Unbekannter Socket-Typ %s, zulässige Typen sind: %s" +msgid "%s branch %s already installed" +msgstr "%s Zweig %s wurde bereits installiert" -#: common/flatpak-context.c:290 +#: common/flatpak-dir.c:6689 #, c-format -msgid "Unknown device type %s, valid types are: %s" -msgstr "Unbekannter Gerätetyp %s, zulässige Typen sind: %s" +msgid "Failed to read commit %s: " +msgstr "Commit %s konnte nicht gelesen werden: " -#: common/flatpak-context.c:318 +#: common/flatpak-dir.c:6709 #, c-format -msgid "Unknown feature type %s, valid types are: %s" -msgstr "Unbekannter Funktionstyp %s, zulässige Typen sind: %s" +msgid "While trying to checkout %s into %s: " +msgstr "Während des Versuchs, eine Arbeitskopie von %s nach %s zu erstellen: " -#: common/flatpak-context.c:691 -#, fuzzy, c-format -msgid "" -"Unknown filesystem location %s, valid locations are: host, home, xdg-" -"*[/...], ~/dir, /dir" +#: common/flatpak-dir.c:6734 +msgid "While trying to checkout metadata subpath: " msgstr "" -"Unbekannter Dateisystem-Ort %s, zulässige Typen sind: host, home, xdg-" -"*[/...], ~/Ordner, /Ordner" - -#: common/flatpak-context.c:963 -#, c-format -msgid "Invalid env format %s" -msgstr "Ungültiges Umgebungsformat: %s" +"Während des Versuchs, eine Arbeitskopie des Metadaten-Unterordners zu " +"erstellen: " -#: common/flatpak-context.c:1103 -msgid "Share with host" -msgstr "Mit Rechner teilen" +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Während des Versuchs, eine Arbeitskopie von %s nach %s zu erstellen: " -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 -msgid "SHARE" -msgstr "FREIGABE" +#: common/flatpak-dir.c:6775 +msgid "While trying to remove existing extra dir: " +msgstr "Während des Versuchs, den bestehenden Extraordner zu entfernen: " -#: common/flatpak-context.c:1104 -msgid "Unshare with host" -msgstr "Freigabe für Rechner aufheben" +#: common/flatpak-dir.c:6786 +msgid "While trying to apply extra data: " +msgstr "Während des Versuchs, zusätzliche Daten anzuwenden: " -#: common/flatpak-context.c:1105 -msgid "Expose socket to app" -msgstr "Socket für die Anwendung sichtbar machen" +#: common/flatpak-dir.c:6813 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Ungültige bereitgestellte Referenz %s: " -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 -msgid "SOCKET" -msgstr "SOCKET" +#: common/flatpak-dir.c:6820 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Ungültige Commit-Referenz %s: " -#: common/flatpak-context.c:1106 -msgid "Don't expose socket to app" -msgstr "Socket vor der Anwendung verbergen" +#: common/flatpak-dir.c:6828 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "Bereitgestellte Referenz des Typs %s entspricht nicht dem Commit (%s)" -#: common/flatpak-context.c:1107 -msgid "Expose device to app" -msgstr "Gerät für die Anwendung sichtbar machen" +#: common/flatpak-dir.c:6836 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "Bereitgestellte Referenz namens %s entspricht nicht dem Commit (%s)" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 -msgid "DEVICE" -msgstr "GERÄT" +#: common/flatpak-dir.c:6844 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "" +"Bereitgestellte Referenz der Architektur %s entspricht nicht dem Commit (%s)" -#: common/flatpak-context.c:1108 -msgid "Don't expose device to app" -msgstr "Gerät vor der Anwendung verbergen" +#: common/flatpak-dir.c:6850 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "" +"Bereitgestellte Referenz des Zweigs %s entspricht nicht dem Commit (%s)" -#: common/flatpak-context.c:1109 -msgid "Allow feature" -msgstr "Funktion erlauben" +#: common/flatpak-dir.c:6856 +#, c-format +msgid "Deployed ref %s does not match commit (%s)" +msgstr "Bereitgestellte Referenz %s entspricht nicht dem Commit (%s)" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 -msgid "FEATURE" -msgstr "FUNKTION" +#: common/flatpak-dir.c:6889 +msgid "Deployed metadata does not match commit" +msgstr "Bereitgestellte Metadaten entsprechen nicht dem Commit" -#: common/flatpak-context.c:1110 -msgid "Don't allow feature" -msgstr "Funktion nicht erlauben" +#: common/flatpak-dir.c:7794 +#, c-format +msgid "This version of %s is already installed" +msgstr "Diese Version von %s ist bereits installiert" -#: common/flatpak-context.c:1111 -msgid "Expose filesystem to app (:ro for read-only)" +#: common/flatpak-dir.c:7801 +msgid "Can't change remote during bundle install" msgstr "" -"Das Dateisystem für die Anwendung sichtbar machen (:ro für schreibgeschützt)" -#: common/flatpak-context.c:1111 -msgid "FILESYSTEM[:ro]" -msgstr "DATEISYSTEM[:ro]" +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s Zweig %s wurde bereits installiert" -#: common/flatpak-context.c:1112 -msgid "Don't expose filesystem to app" -msgstr "Das Dateisystem vor der Anwendung verbergen" +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" -#: common/flatpak-context.c:1112 -msgid "FILESYSTEM" -msgstr "DATEISYSTEM" +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" -#: common/flatpak-context.c:1113 -msgid "Set environment variable" -msgstr "Umgebungsvariable festlegen" +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s Zweig %s ist nicht installiert" -#: common/flatpak-context.c:1113 -msgid "VAR=VALUE" -msgstr "VAR=WERT" +#: common/flatpak-dir.c:8552 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s Zweig %s ist nicht installiert" -#: common/flatpak-context.c:1114 -msgid "Allow app to own name on the session bus" +#: common/flatpak-dir.c:8893 +#, c-format +msgid "Pruning repo failed: %s" msgstr "" -"Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: 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-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" -#: common/flatpak-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-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Kein Flatpak-Zwischenspeicher in Zusammenfassung entfernter Quelle" -#: common/flatpak-context.c:1116 -msgid "Allow app to own name on the system bus" +#: common/flatpak-dir.c:9716 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -"Der Anwendung erlauben, einen Namen auf dem Sitzungsbus zu beanspruchen" -#: 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-dir.c:9737 +#, c-format +msgid "Nothing matches %s" +msgstr "Kein Treffer für %s" -#: common/flatpak-context.c:1118 -msgid "Add generic policy option" -msgstr "Allgemeine Richtlinien-Einstellungen hinzufügen" +#: common/flatpak-dir.c:9837 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Referenz %s%s%s%s%s kann nicht gefunden werden" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 -msgid "SUBSYSTEM.KEY=VALUE" -msgstr "SUBSYSTEM.SCHLÜSSEL=WERT" +#: common/flatpak-dir.c:9884 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Fehler bei der Suche nach dem entfernten %s: %s" -#: common/flatpak-context.c:1119 -msgid "Remove generic policy option" -msgstr "Allgemeine Richtlinien-Einstellungen entfernen" +#: common/flatpak-dir.c:9969 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Fehler beim Suchen der lokalen Quelle: %s" -#: common/flatpak-context.c:1120 -msgid "Persist home directory" -msgstr "Basisordner beständig machen" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" +msgstr "%s %s ist nicht installiert" -#: common/flatpak-context.c:1120 -msgid "FILENAME" -msgstr "DATEINAME" +#: common/flatpak-dir.c:10284 +#, c-format +msgid "Could not find installation %s" +msgstr "Installation %s konnte nicht gefunden werden" -#. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 -msgid "Don't require a running session (no cgroups creation)" +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Ungültiger GPG-Schlüssel" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" msgstr "" -"Laufende Sitzung als nicht erforderlich festlegen (keine Erstellung von " -"cgroups)" -#: common/flatpak-dir.c:1044 -#, c-format -msgid "No overrides found for %s" -msgstr "Keine Ersetzungen für %s gefunden" +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Ungültiges Umgebungsformat: %s" -#: common/flatpak-dir.c:1674 -#, c-format -msgid "While opening repository %s: " -msgstr "Während des Öffnens der Quelle %s: " +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Ungültiges Umgebungsformat: %s" -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 -msgid "Can't create deploy directory" -msgstr "Bereitstellungsordner konnte nicht erstellt werden" +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Ungültiges Umgebungsformat: %s" -#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#: common/flatpak-dir.c:10871 #, c-format -msgid "Failed to find latest revision for ref %s from remote %s: %s\n" -msgstr "" +msgid "Runtime %s, branch %s is already installed" +msgstr "Laufzeitumgebung %s, Zweig %s ist bereits installiert" -#: common/flatpak-dir.c:2761 +#: common/flatpak-dir.c:10872 #, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Ungültiges sha256 für die Adresse %s der Extradaten" +msgid "App %s, branch %s is already installed" +msgstr "Anwendung %s, Zweig %s ist bereits installiert" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:11155 #, c-format -msgid "Empty name for extra data uri %s" -msgstr "Leerer Name für die Adresse %s der Extradaten" +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "%s konnte nicht in entfernter Quelle %s gefunden werden" + +#: common/flatpak-dir.c:11255 #, c-format -msgid "Unsupported extra data uri %s" -msgstr "Nicht unterstützte Adresse %s der Extradaten" +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Metadaten für einen Zweig ausgeben" -#: common/flatpak-dir.c:2787 +#: common/flatpak-installation.c:751 #, fuzzy, c-format -msgid "Failed to load local extra-data %s: %s" -msgstr "Commit %s konnte nicht gelesen werden: " +msgid "Ref %s not installed" +msgstr "%s ist nicht installiert" -#: common/flatpak-dir.c:2790 +#: common/flatpak-installation.c:793 #, fuzzy, c-format -msgid "Wrong size for extra-data %s" -msgstr "Falsche Größe für Extradaten %s" +msgid "App %s not installed" +msgstr "%s ist nicht installiert" -#: common/flatpak-dir.c:2805 -#, c-format -msgid "While downloading %s: " -msgstr "Während des Herunterladens von %s: " +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Angeforderte Erweiterung »%s« ist nur teilweise installiert" -#: common/flatpak-dir.c:2812 +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Wrong size for extra data %s" -msgstr "Falsche Größe für Extradaten %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-dir.c:2823 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Ungültige Prüfsumme für Extradaten %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" + +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Fehler bei der Suche nach dem entfernten %s: %s" + +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Keine entfernte Quelle %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-remote.c:826 #, fuzzy -msgid "Remote OCI index has no registry uri" -msgstr "NAME [ORT] - eine ferne Quelle hinzufügen" +msgid "No url specified" +msgstr "Kein Befehl angegeben" -#: common/flatpak-dir.c:3100 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s-Commit %s wurde bereits installiert" +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" +msgstr "Öffnen der Informationsdatei der Anwendung fehlgeschlagen: %s" + +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "»Sync-Pipe« konnte nicht erstellt werden" + +#: common/flatpak-run.c:824 +msgid "Failed to sync with dbus proxy" +msgstr "Abgleich mit Dbus-Proxy ist fehlgeschlagen" + +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Temporäre Datei konnte nicht geöffnet werden: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" -#: 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-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "»Sync-Pipe« konnte nicht erstellt werden" -#: 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-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Öffnen der temporären flatpak-Informationsdatei fehlgeschlagen: %s" -#: common/flatpak-dir.c:4331 -msgid "Not enough memory" -msgstr "Nicht genug Speicher" +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Öffnen der temporären flatpak-Informationsdatei fehlgeschlagen: %s" -#: common/flatpak-dir.c:4350 -msgid "Failed to read from exported file" -msgstr "Lesen aus der exportierten Datei fehlgeschlagen" +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Variable anhand angegebener Laufzeit initialisieren" -#: common/flatpak-dir.c:4541 -msgid "Error reading mimetype xml file" +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" msgstr "" -#: common/flatpak-dir.c:4546 -msgid "Invalid mimetype xml file" +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" msgstr "" -#: common/flatpak-dir.c:5089 -msgid "While getting detached metadata: " -msgstr "Während des Versuchs, abgekoppelte Metadaten zu holen: " +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" -#: common/flatpak-dir.c:5107 -msgid "While creating extradir: " -msgstr "Beim Anlegen von extradir: " +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Lesen aus der exportierten Datei fehlgeschlagen" -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" -msgstr "Ungültige sha256 für zusätzliche Daten" +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Ungültige Prozesskennung %s" -#: common/flatpak-dir.c:5157 -msgid "Wrong size for extra data" -msgstr "Falsche Größe für zusätzliche Daten" +#: common/flatpak-run.c:2828 +#, c-format +msgid "ldconfig failed, exit status %d" +msgstr "ldconfig ist fehlgeschlagen, Exit-Status %d" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" -msgstr "Ungültige Prüfsumme für zusätzliche Daten" +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Namensraum %s konnte nicht geöffnet werden: %s" -#: 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-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Zu viele Argumente" -#: common/flatpak-dir.c:5340 +#: common/flatpak-transaction.c:1347 #, fuzzy, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "Skript apply_extra ist fehlgeschlagen" +msgid "Warning: Problem looking for related refs: %s" +msgstr "Warnung: Problem bei der Suche nach zugehörigen Referenzen: %s\n" -#: 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-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Anwendung %s Zweig %s ist nicht installiert" -#: common/flatpak-dir.c:5434 -#, c-format -msgid "%s is not available" -msgstr "%s ist nicht verfügbar" +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Anwendung %s Zweig %s ist nicht installiert" -#: 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 +#: common/flatpak-transaction.c:1571 #, c-format -msgid "%s branch %s already installed" -msgstr "%s Zweig %s wurde bereits installiert" +msgid "Remote %s disabled, ignoring %s update" +msgstr "Entfernte Quelle %s ist deaktiviert. Aktualisierung %s wird ignoriert" -#: common/flatpak-dir.c:5468 -#, c-format -msgid "Failed to read commit %s: " -msgstr "Commit %s konnte nicht gelesen werden: " +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s-Commit %s wurde bereits installiert" -#: 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-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s-Commit %s wurde bereits installiert" -#: 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-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Ungültige Commit-Referenz %s: " -#: 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-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" -#: common/flatpak-dir.c:5565 -msgid "While trying to apply extra data: " -msgstr "Während des Versuchs, zusätzliche Daten anzuwenden: " +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" -#: common/flatpak-dir.c:5592 +#: common/flatpak-transaction.c:2035 #, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Ungültige Prozesskennung %s" +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "" +"Warnung: Zusätzliche Metadaten für »%s« konnten nicht aktualisiert werden: " +"%s\n" -#: common/flatpak-dir.c:5599 +#: common/flatpak-transaction.c:2345 #, fuzzy, c-format -msgid "Invalid commit ref %s: " +msgid "Invalid .flatpakrepo: %s" msgstr "Ungültige Prozesskennung %s" -#: common/flatpak-dir.c:5607 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" msgstr "" -#: common/flatpak-dir.c:5615 +#: common/flatpak-transaction.c:2680 #, c-format -msgid "Deployed ref %s name does not match commit (%s)" +msgid "Skipping %s due to previous error" msgstr "" -#: common/flatpak-dir.c:5623 -#, c-format -msgid "Deployed ref %s arch does not match commit (%s)" +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" msgstr "" -#: common/flatpak-dir.c:5629 -#, c-format -msgid "Deployed ref %s branch does not match commit (%s)" +#: common/flatpak-utils.c:638 +#, fuzzy, c-format +msgid "Migrating %s to %s\n" +msgstr "Aktualisieren: %s von %s\n" + +#: common/flatpak-utils.c:644 +#, fuzzy, c-format +msgid "Error during migration: %s\n" +msgstr "Fehler bei der Suche nach dem entfernten %s: %s" + +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" msgstr "" -#: common/flatpak-dir.c:5635 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" msgstr "" -#: common/flatpak-dir.c:5654 -msgid "Deployed metadata does not match commit" +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-utils.c:779 #, c-format -msgid "This version of %s is already installed" -msgstr "Diese Version von %s ist bereits installiert" +msgid "Name can't start with %c" +msgstr "" -#: common/flatpak-dir.c:6540 -msgid "Can't change remote during bundle install" +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-utils.c:805 #, c-format -msgid "%s branch %s is not installed" -msgstr "%s Zweig %s ist nicht installiert" +msgid "Name segment can't start with %c" +msgstr "" -#: common/flatpak-dir.c:7304 +#: common/flatpak-utils.c:817 #, c-format -msgid "%s branch %s not installed" -msgstr "%s Zweig %s ist nicht installiert" +msgid "Name can't contain %c" +msgstr "" -#: common/flatpak-dir.c:7628 -#, fuzzy, c-format -msgid "Pruning repo failed: %s" -msgstr "Zugehörige werden installiert: %s\n" +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-utils.c:1026 #, c-format -msgid "Multiple branches available for %s, you must specify one of: " +msgid "Branch can't start with %c" msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-utils.c:1036 #, c-format -msgid "Nothing matches %s" -msgstr "Kein Treffer für %s" +msgid "Branch can't contain %c" +msgstr "" -#: common/flatpak-dir.c:8258 +#: common/flatpak-utils.c:1087 #, 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" +msgid "Wrong number of components in %s" +msgstr "Zu viele Argumente" -#: common/flatpak-dir.c:8300 +#: common/flatpak-utils.c:1093 #, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Fehler: %s %s ist fehlgeschlagen: %s\n" +msgid "%s is not application or runtime" +msgstr "Eine Anwendung oder Laufzeitumgebung signieren" -#: common/flatpak-dir.c:8345 +#: common/flatpak-utils.c:1099 #, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Referenz in lokaler Quelle behalten" +msgid "Invalid name %s: %s" +msgstr "Ungültiger Dbus-Name %s\n" -#: common/flatpak-dir.c:8471 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s ist nicht installiert" +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Ungültige Prozesskennung %s" -#: common/flatpak-dir.c:8638 -#, c-format -msgid "Could not find installation %s" -msgstr "Installation %s konnte nicht gefunden werden" +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "»%s« ist kein gültiger Zweig-Name: %s" -#: 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-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Ungültige Prozesskennung %s" -#: 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-utils.c:2738 +msgid "No extra data sources" +msgstr "Keine zusätzlichen Datenquellen" -#: common/flatpak-dir.c:9717 -msgid "Remote title not set" -msgstr "Entfernter Titel nicht gesetzt" +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" -msgstr "Vorgabe-Zweig für ferne Quelle nicht definiert" +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Fehler bei der Suche nach dem entfernten %s: %s" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "" +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Fehler bei der Suche nach dem entfernten %s: %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-utils.c:3917 #, c-format -msgid "No entry for %s in remote summary flatpak cache " +msgid "%s is end-of-life, ignoring\n" 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: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-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Fehler beim Aktualisieren der Metadaten für »%s«: %s\n" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "»Sync-Pipe« konnte nicht erstellt werden" +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Ungültige Prüfsumme für zusätzliche Daten" -#: common/flatpak-run.c:1910 +#: common/flatpak-utils.c:4836 #, c-format -msgid "Failed to open app info file: %s" -msgstr "Öffnen der Informationsdatei der Anwendung fehlgeschlagen: %s" - -#: common/flatpak-run.c:1940 -msgid "Failed to sync with dbus proxy" -msgstr "Abgleich mit Dbus-Proxy ist fehlgeschlagen" +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" -#: common/flatpak-run.c:2700 -#, fuzzy, c-format -msgid "ldconfig failed, exit status %d" -msgstr "Skript apply_extra ist fehlgeschlagen" +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" -#: common/flatpak-utils.c:624 -#, fuzzy, c-format -msgid "Migrating %s to %s\n" -msgstr "Aktualisieren: %s von %s\n" +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" -#: 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:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" -#: common/flatpak-utils.c:2988 -msgid "No extra data sources" -msgstr "Keine zusätzlichen Datenquellen" +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" -msgstr "Referenz anzeigen" +msgstr "Während des Herunterladens von %s: " -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" -msgstr "Referenz anzeigen" +msgstr "Keine zusätzlichen Datenquellen" -#: common/flatpak-utils.c:6625 -#, fuzzy, c-format +#: common/flatpak-utils.c:5698 +#, c-format msgid "Downloading files: %d/%d %s" -msgstr "Referenz anzeigen" +msgstr "" + +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s verlangt eine neuere Version von flatpak (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" #. SECURITY: #. - Normal users do not need authentication to install signed applications @@ -2859,27 +3933,25 @@ #. - Normal users do not need authentication to update metadata #. from signed repositories. #: system-helper/org.freedesktop.Flatpak.policy.in:91 -#, fuzzy msgid "Update remote metadata" -msgstr "ORT - Metadaten der Quelle aktualisieren" +msgstr "Entfernte Metadaten aktualisieren" #: system-helper/org.freedesktop.Flatpak.policy.in:92 -#, fuzzy msgid "Authentication is required to update remote info" -msgstr "Legitimierung wird benötigt, um Software zu aktualisieren" +msgstr "" +"Legitimierung wird benötigt, um Info zu entfernter Quelle zu aktualisieren" #. SECURITY: #. - 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 "Zusammenfassungsdatei in einer Quelle aktualisieren" +msgstr "Systemquelle aktualisieren" #: system-helper/org.freedesktop.Flatpak.policy.in:107 -#, fuzzy msgid "Authentication is required to update the system repository" -msgstr "Legitimierung wird benötigt, um Software zu aktualisieren" +msgstr "" +"Legitimierung wird benötigt, um den System-Softwarebestand zu aktualisieren" #: system-helper/org.freedesktop.Flatpak.policy.in:117 msgid "Install bundle" @@ -2926,121 +3998,51 @@ 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" - -#~ msgid "Failed to unlink temporary file" -#~ msgstr "Verbindung zur temporären Datei konnte nicht gelöst werden" - -#~ msgid "Failed to write to temporary file" -#~ msgstr "In temporäre Datei konnte nicht geschrieben werden" - -#, fuzzy -#~ msgid "Installing %s" -#~ msgstr "Installieren: %s\n" - #, fuzzy -#~ msgid "Post-Install %s" -#~ msgstr "Installieren: %s\n" - -#, fuzzy -#~ msgid "OCI repo Filename or uri must be specified" -#~ msgstr "Name der Bündel-Datei muss angegeben werden" - -#~ msgid "'%s' is not a valid runtime name: %s" -#~ msgstr "»%s« ist kein gültiger Laufzeitname: %s" - -#~ msgid "'%s' is not a valid sdk name: %s" -#~ msgstr "»%s« ist kein gültiger sdk-Name: %s" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "Sammlungskennung" -#~ msgid "Data not found for ref %s" -#~ msgstr "Daten für Referenz %s nicht gefunden" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Ungültiges sha256 für die Adresse %s der Extradaten" -#~ msgid "Install from local bundle file" -#~ msgstr "Aus einer lokalen Bündel-Datei installieren" +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Ungültige sha256 für zusätzliche Daten" -#, fuzzy -#~ msgid "Load options from file or uri" -#~ msgstr "Einstellungen aus Datei laden" +#~ msgid "Add OCI registry" +#~ msgstr "OCI-Registrierung hinzufügen" -#, fuzzy -#~ msgid "Invalid ref, no digest" -#~ msgstr "Ungültiges Umgebungsformat: %s" +#~ msgid "No ref information available in repository" +#~ msgstr "Keine Referenz-Informationen im Softwarebestand verfügbar" #, fuzzy -#~ msgid "No manfest found for arch %s, os %s" -#~ msgstr "Daten für Referenz %s nicht gefunden" +#~| msgid "Show system-wide installations" +#~ msgid "Search only system-wide installations" +#~ msgstr "Systemweite Installationen anzeigen" #, fuzzy -#~ msgid "Remote extra metadata not available; server has no summary file" -#~ msgstr "" -#~ "Entfernter Titel nicht verfügbar; Server hat keine Zusammenfassungsdatei" - -#~ msgid "Data not available; server has no summary file" -#~ msgstr "Daten sind nicht verfügbar, der Server hat keine Summary-Datei" +#~| msgid "Found in several remotes:\n" +#~ msgid "Found in remote %s\n" +#~ msgstr "In verschiedenen fernen Quellen gefunden:\n" -#~ msgid "This version of ostree is to old to support OCI exports" -#~ msgstr "Diese Version von ostree ist zu alt, um OCI-Exporte zu unterstützen" - -#~ msgid "This version of flatpak is not compiled with libarchive support" -#~ msgstr "" -#~ "Diese Version von flatpak ist nicht mit libarchive-Unterstützung " -#~ "kompiliert" +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "In entfernter Quelle %s gefunden, wollen Sie es installieren?" -#~ msgid "While pulling %s from remote %s, metadata: " -#~ msgstr "Während des Holens von %s von der entfernten Quelle %s, Metadaten: " +#~ msgid "Found in several remotes:\n" +#~ msgstr "In verschiedenen fernen Quellen gefunden:\n" -#~ msgid "While pulling %s from remote %s, subpath %s: " +#~ msgid "The required runtime %s was not found in a configured remote.\n" #~ msgstr "" -#~ "Während des Holens von %s von der entfernten Quelle %s: Unterordner %s: " +#~ "Die erforderliche Laufzeit %s wurde in keiner konfigurierten entfernten " +#~ "Quelle gefunden.\n" -#~ msgid "The Flatpak Project" -#~ msgstr "Das Flatpak-Projekt" +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s ist bereits installiert, wird übersprungen\n" -#~ msgid "auth_admin" -#~ msgstr "auth_admin" +#~ msgid "One or more operations failed" +#~ msgstr "Ein oder mehrere Vorgänge sind fehlgeschlagen" -#~ msgid "yes" -#~ msgstr "ja" - -#~ msgid "REPOSITORY and NAME must be specified" -#~ msgstr "QUELLE und NAME müssen angegeben werden" - -#~ msgid "Uninstalling related: %s\n" -#~ msgstr "Zugehörige werden deinstalliert: %s\n" - -#~ msgid "Warning: Failed to uninstall related ref: %s\n" -#~ msgstr "Warnung: Deinstallation zugehöriger Referenz fehlgeschlagen: %s\n" - -#~ msgid "Updating application %s, branch %s\n" -#~ msgstr "Anwendung %s, Zweig %s wird aktualisiert\n" - -#~ msgid "Updating runtime %s, branch %s\n" -#~ msgstr "Laufzeitumgebung %s, Zweig %s wird aktualisiert\n" - -#~ msgid "LOCATION ID [BRANCH] - Create a repository from a build directory" -#~ msgstr "ORT KENNUNG [ZWEIG] - Quelle aus Erstellungsordner erzeugen" - -#~ msgid "" -#~ "Warning: Can't find appstream-builder, unable to update appstream branch\n" -#~ msgstr "" -#~ "Warnung: Appstream-Builder nicht gefunden, eine Aktualisierung des " -#~ "Appstream-Zweiges ist nicht möglich\n" +#~ msgid "Remote title not set" +#~ msgstr "Entfernter Titel nicht gesetzt" -#~ msgid "Generating from-parent delta for %s (%s)\n" -#~ msgstr "»Von-Vorläufer«-Delta wird erstellt für %s (%s)\n" +#~ msgid "Remote default-branch not set" +#~ msgstr "Vorgabe-Zweig für ferne Quelle nicht definiert" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/es.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/es.gmo differ diff -Nru flatpak-0.11.3/po/es.po flatpak-1.0.7/po/es.po --- flatpak-0.11.3/po/es.po 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/es.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-09-12 17:20+0200\n" "Last-Translator: Aitor González Fernández \n" "Language-Team: Spanish \n" @@ -18,217 +18,6 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.8.7.1\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "No hacer nada si el repositorio remoto ya existe" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" -"LOCATION establece un archivo de configuración, lo la localización de un " -"repositorio" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Habilitar la verificación GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Establecer el remoto como enumerado" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Establecer el remoto como usado por las dependencias" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Establecer una nueva url" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Habilitar el repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Actualizar los metadatos extra desde el archivo de resumen" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Desactivar la verificación GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Establecer el remoto como no enumerado" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Establecer el remoto como no usado por las dependencias" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Establecer prioridad (1 por defecto, mayor prioridad cuanto más alto)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORIDAD" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Un buen nombre para usar en este repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TÍTULO" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Rama por defecto para usar en este repositorio remoto" - -#: 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 -msgid "BRANCH" -msgstr "RAMA" - -#: 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 "ID de colección" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "ID-COLECCIÓN" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Desactivar el repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Añadir registro OCI" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "El repositorio remoto %s ya existe" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NOMBRE - Modificar un repositorio remoto" - -#: 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: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: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: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:56 msgid "Export runtime instead of app" msgstr "Exportar el runtime en lugar de la aplicación" @@ -238,12 +27,13 @@ msgstr "Arquitectura para empaquetar" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITECTURA" @@ -251,6 +41,14 @@ msgid "Url for repo" msgstr "Url del repositorio" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url del archivo flatpakrepo del runtime" @@ -259,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "ARCHIVO" + #: 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" @@ -268,29 +74,32 @@ msgstr "ID de la clave GPG para firmar la imagen OCI con" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "" "Directorio de origen de los archivos GPG para usar cuando se busquen " "repositorios de claves" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "DIRECTORIO_DE_INICIO" @@ -298,12 +107,12 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "COMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -311,25 +120,46 @@ "LOCALIZACIÓN NOMBRE_ARCHIVO NOMBRE [RAMA] - Crear un paquete único desde un " "repositorio local" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Se deben especificar LOCALIZACIÓN, NOMBRE_ARCHIVO y NOMBRE" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Demasiados argumentos" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' no es un repositorio válido" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, 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:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' no es un nombre válido para una rama: %s" @@ -355,7 +185,7 @@ msgstr "Iniciar la compilación en este directorio" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "DIR" @@ -363,11 +193,11 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Usar un archivo alternativo para los metadatos" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Matar el proceso cuando el proceso padre muere" @@ -375,377 +205,432 @@ msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Llamadas al bus de registro de sistema" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRECTORIO [COMANDO [argumentos...]] - Compilar en directorio" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "Se debe especificar el DIRECTORIO" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "metadatos inválidos, sin aplicación o runtime" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, 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:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "No se pudo iniciar la aplicación" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Dirección del repositorio de código fuente" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "SRC-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Referencia del repositorio de código fuente" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "SRC-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Resumen en una linea" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "RESUMEN" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Descripción completa" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "CUERPO" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Actualizar la rama de appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "No actualizar el resumen" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 de la clave GPG con la que firmar el commit" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#, fuzzy +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Sobrescribir la marca de tiempo del commit" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +#, fuzzy +msgid "TIMESTAMP" +msgstr "ISO-8601-TIMESTAMP" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "Se debe especificar REPO-DEST" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitectura en la que exportar (debe ser compatible con el anfitrión)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Runtime del commit (/usr), no /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Usar un directorio alternativo para estos archivos" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "SUBDIR" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Archivos a excluir" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "PATRÓN" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Archivos excluidos a incluir" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Sobrescribir la marca de tiempo del commit" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "ID de colección" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Tipo de enlace %s inválido, solo se soportan http/https" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" "No se puede encontrar el nombre base en %s, especifica un nombre " "explicitamente" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "No se permiten barras en el nombre de los datos adicionales" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Formato inválido de la suma de verificación sha256: '%s'" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Los datos adicionales no pueden tener tamaño 0" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" "LOCALIZACIÓN DIRECTORIO [RAMA] - Crea un repositorio desde un directorio de " "compilación" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "Se debe especificar LOCALIZACION y DIRECTORIO" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, 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-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "No se ha especificado un nombre en los metadatos" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, fuzzy, c-format msgid "Commit: %s\n" msgstr "Commit:" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, fuzzy, c-format msgid "Metadata Total: %u\n" msgstr "Metadatos:" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, fuzzy, c-format msgid "Metadata Written: %u\n" msgstr "Metadatos:" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "COMANDO" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Versión de Flatpak requerida" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAJOR.MINOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "No procesar los exports" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Información de datos adicionales" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Añadir información del punto de extensión" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NOMBRE=VARIABLE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:53 -msgid "Set extension priority (only for extensions)" -msgstr "" +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Añadir información del punto de extensión" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NOMBRE" + +#: app/flatpak-builtins-build-finish.c:57 +msgid "Set extension priority (only for extensions)" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Cambiar el SDK usado por la aplicación" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Cambiar el runtime usado por la aplicación" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "RUNTIME" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Establecer la opción de metadatos genéricos" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CLAVE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Revocar permiso de escritura de la aplicación" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, non-allowed export filename\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, fuzzy, c-format msgid "Exporting %s\n" msgstr "Actualizando %s" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Demasiados elementos en el argumento --extra-data %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -754,7 +639,8 @@ "Demasiados elementos en el argumento --metadata %s, el formato debe ser " "GRUPO=CLAVE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -763,21 +649,21 @@ "Demasiados argumentos en el parámetro --extension %s, el formato debe ser " "NOMBRE=VARIABLE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "DIRECTORIO - Finalizar un directorio de compilación" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "El directorio de compilación %s no está inicializado" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "El directorio de compilación %s ya está inicializado" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Por favor, revisa los archivos exportados y los metadatos\n" @@ -793,141 +679,150 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importar la imagen OCI en lugar del paquete flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "La referencia '%s' no se encuentra en el registro" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, fuzzy, c-format msgid "Importing %s (%s)\n" msgstr "" "Actualizando: %s desde\n" " %s\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "LOCALIZACIÓN NOMBRE_ARCHIVO - Importa un paquete al repositorio local" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Arquitectura a usar" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Inicializar variable desde el runtime nombrado" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Inicializar aplicaciones desde la aplicación nombrada" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APLICACION" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Especifica una versión para --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSIÓN" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Incluir esta extensión base" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "EXTENSIÓN" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "EXTENSIÓN" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Inicializar /usr con una copia con permisos de escritura del SDK" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Especificar el tipo de compilación (aplicación, runtime, extensión)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TIPO" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Añadir una etiqueta" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ETIQUETA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Incluir la extensión de este SDK en /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Donde almacenar el SDK (Por defecto en 'usr')" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Re-inicializar el sdk/variable" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "La extensión %s requerida solo está instalada parcialmente" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "La extensión %s requerida no está instalada" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "DIRECTORIO NOMBRE_APLICACIÓN SDK RUNTIME [RAMA] - Inicializa un directorio " "de compilación" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "Se debe especificar un RUNTIME" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' no es un nombre de aplicación valido: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format 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-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Arquitectura en la que instalar" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Buscar un runtime con el nombre especifico" @@ -935,10 +830,124 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "LOCALIZACIÓN [ID [RAMA]] - Firma una aplicación o runtime" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "Se debe especificar la LOCALIZACIÓN" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "No se han especificado los ids de las claves GPG" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Redirige este repositorio a una nueva URL" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Un buen nombre para usar en este repositorio" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TÍTULO" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Rama por defecto a usar en este repositorio" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "RAMA" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ID-COLECCIÓN" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" +"Desplegar de forma permanente el identificador de colección en las " +"configuraciones remotas del cliente" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importar una nueva clave pública GPG por defecto desde ARCHIVO" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "Identificador de la clave GPG con la que firmar el resumen" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Generando archivos de diferencias" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Eliminando objetos sin uso" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Solo recorrer PROFUNDIDAD padres para cada commit (por defecto: -1=infinitos)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "PROFUNDIDAD" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Generando archivos de diferencias: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Generando archivos de diferencias: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "" +"Ha ocurrido un error al generar los archivos de diferencias %s (%.10s) " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "" +"Ha ocurrido un error al generar los archivos de diferencias %s (%.10s-" +"%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "LOCALIZACIÓN - Actualizar los metadatos del repositorio" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Actualizando rama de appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Actualizando resumen\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Objetos totales: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "No hay objetos inaccesibles\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u objetos borrados, se han liberado %s\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -955,35 +964,108 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, fuzzy, c-format msgid "Unknown configure key '%s'" msgstr "Comando desconocido '%s'" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 #, fuzzy msgid "You must specify key" msgstr "Se debe especificar APLICACIÓN" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NOMBRE - Borra un repositorio remoto" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Arquitectura a mostrar" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "DEST=ORIG" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "Se debe especificar REMOTO y REFERENCIA" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Aviso: No se pueden actualizar los metadatos adicionales para '%s': %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Aviso: No se pueden actualizar los metadatos adicionales para '%s': %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Aviso: No se pueden actualizar los metadatos adicionales para '%s': %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Actualizando appstream para el repositorio remoto %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1137,207 +1219,186 @@ msgid "Can't switch uid" msgstr "No se puede cambiar el UID" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Mostrar instalaciones del usuario" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Mostrar instalaciones del sistema" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Mostrar instalaciones especificas del sistema" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Mostrar referencia" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Mostrar commit" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Mostrar origen" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Mostrar tamaño" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Mostrar metadatos" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Mostrar solo tiempos de ejecución" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Mostrar tamaño" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Mostrar extensiones" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, 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-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "RUTA" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Mostrar extensiones" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Mostrar las opciones de ayuda" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "NOMBRE [RAMA] - Obtiene información a cerca de una aplicación y/o runtime " "instalado" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "Se debe especificar el NOMBRE" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "referencia no presente en el origen" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Referencia:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Arquitectura:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Rama:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Origen:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "ID de colección" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Commit activo:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Ultimo commit:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Commit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "id-alternativo:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Localización:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Tamaño de la instalación:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Subdirectorios de la instalación:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Extensión:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Subdirectorios:" -#: 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 "Buscar una aplicación con el nombre especifico" - -#: 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" @@ -1378,7 +1439,8 @@ msgid "Only install this subpath" msgstr "Solo instalar este subdirectorio" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Responder si automáticamente a todas las preguntas" @@ -1387,55 +1449,28 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Esta aplicación depende de los tiempos de ejecución de:\n" -" %s\n" -"Configura esto como un nuevo repositorio remoto '%s'" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Se debe especificar el nombre de archivo del paquete" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Los paquetes remotos no están soportados" -#: app/flatpak-builtins-install.c:338 -#, fuzzy, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"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:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Se debe especificar el nombre de archivo o el uri" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Instalando: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "LOCALIZACION/REMOTO [REFERENCIA ...] - Instala aplicaciones o tiempos de " "ejecución" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "Se debe especificar REMOTO y REFERENCIA" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostrar información adicional" @@ -1452,380 +1487,767 @@ msgid "Arch to show" msgstr "Arquitectura a mostrar" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Mostrar todas las referencias (incluyendo locales/depuración)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Referencia" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Origen" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Commit activo" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Último commit" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Tamaño de la instalación" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Opciones" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 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:40 +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Arquitectura para construir el actual" + +#: 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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Se debe especificar APLICACIÓN" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "Se debe especificar RAMA" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +#, fuzzy +msgid "[APP] - Override settings [for application]" +msgstr "APLICACIÓN - Sobrescribe la configuración de la aplicación" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Revocar permiso de escritura de la aplicación" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Demasiados argumentos" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Añadir permisos a esta aplicación" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Demasiados argumentos" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Añadir permisos a esta aplicación" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Mostrar repositorios remotos desactivados" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Imprimir información acerca de un repositorio" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "ID de colección" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "ID de colección" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Arquitectura a usar" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +#, fuzzy +msgid "Branch" +msgstr "Rama:" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Mostrar arquitecturas y ramas" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Commit" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Mostrar las opciones de ayuda" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Runtime:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Mostrar solo tiempos de ejecución" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Runtime:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Mostrar solo tiempos de ejecución" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Commit activo" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Mostrar solo tiempos de ejecución" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "ID_APLICACIÓN" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Comando desconocido '%s'" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Mostrar las opciones de ayuda" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Instalada" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Información de datos adicionales" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "No hacer nada si el repositorio remoto ya existe" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "" +"LOCATION establece un archivo de configuración, lo la localización de un " +"repositorio" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Desactivar la verificación GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Establecer el remoto como no enumerado" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Establecer el remoto como no usado por las dependencias" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Establecer prioridad (1 por defecto, mayor prioridad cuanto más alto)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORIDAD" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Un buen nombre para usar en este repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Rama por defecto para usar en este repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importar la clave GPG desde un ARCHIVO (- para stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Desactivar el repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:206 +#, 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-remote-add.c:214 +#, fuzzy +msgid "Invalid file format" +msgstr "Formato de entorno inválido %s" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, 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-remote-add.c:264 common/flatpak-dir.c:10703 +#, fuzzy +msgid "Invalid gpg key" +msgstr "PID %s inválido" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NOMBRE LOCALIZACIÓN - Añadir un repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:319 +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-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "El repositorio remoto %s ya existe" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "No se ha especificado una url en el archivo flatpakrepo" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Borrar remoto incluso si está en uso" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NOMBRE - Borra un repositorio remoto" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 +#, fuzzy +msgid "Show parent" +msgstr "Mostrar referencia" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:213 +#, fuzzy +msgid "Download size:" +msgstr "Tamaño de la descarga" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 +#, fuzzy +msgid " Commit:" +msgstr "Commit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 msgid "Show remote details" msgstr "Mostrar detalles del repositorio remoto" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Mostrar repositorios remotos desactivados" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Mostrar lista de repositorios remotos" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "Nombre" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Prioridad" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Mostrar arquitecturas y ramas" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Mostrar solo tiempos de ejecución" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Mostrar solo aplicaciones" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Mostrar solo elementos si hay actualizaciones disponibles" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Limitar a esta arquitectura (* para mostrar todas)" -#: app/flatpak-builtins-ls-remote.c:96 +#: app/flatpak-builtins-remote-ls.c:101 #, fuzzy -msgid " [REMOTE] - Show available runtimes and applications" +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr "REMOTO - Mostrar tiempos de ejecución y aplicaciones disponibles" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Commit" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Tamaño de la descarga" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "Información de referencia no disponible en el repositorio" - -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Arquitectura para construir el actual" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Habilitar la verificación GPG" -#: 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-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Establecer el remoto como enumerado" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Establecer el remoto como usado por las dependencias" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Se debe especificar RAMA" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Establecer una nueva url" -#: 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-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Habilitar el repositorio remoto" -#: 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-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Actualizar los metadatos extra desde el archivo de resumen" -#: app/flatpak-builtins-repo.c:48 -#, fuzzy, c-format -msgid "Title: %s\n" -msgstr "Título" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NOMBRE - Modificar un repositorio remoto" -#: app/flatpak-builtins-repo.c:51 -#, fuzzy, c-format -msgid "Collection ID: %s\n" -msgstr "ID de colección" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Se debe especificar el NOMBRE del repositorio remoto" -#: app/flatpak-builtins-repo.c:54 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Default branch: %s\n" +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-repo.c:57 +#: app/flatpak-builtins-remote-modify.c:214 #, c-format -msgid "Redirect URL: %s\n" -msgstr "" +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Error al actualizar los metados adicionales para '%s': %s\n" -#: app/flatpak-builtins-repo.c:60 -#, fuzzy, c-format -msgid "Redirect collection ID: %s\n" -msgstr "ID de colección" +#: app/flatpak-builtins-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "No se han podido actualizar los metadatos adicionales para %s" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "GPG key hash: %s\n" +msgid "Object missing: %s.%s\n" msgstr "" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "%zd branches\n" +msgid "%s, deleting object\n" msgstr "" -#: app/flatpak-builtins-repo.c:99 -msgid "Installed" -msgstr "Instalada" - -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "Descarga" - -#: app/flatpak-builtins-repo.c:151 -msgid "Print general information about the repository" -msgstr "Imprime información general acerca del repositorio" - -#: app/flatpak-builtins-repo.c:152 -msgid "List the branches in the repository" -msgstr "Mostrar una lista de las ramas en el repositorio" +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "No se puede abrir el espacio de nombres %s: %s" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" -msgstr "Imprime los metadatos de una rama" +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Actualizando appstream para el repositorio remoto %s\n" -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" -msgstr "LOCALIZACIÓN - Mantenimiento del repositorio" +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Instalando: %s\n" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Redirige este repositorio a una nueva URL" +#: app/flatpak-builtins-repair.c:288 +#, fuzzy +msgid "- Repair a flatpak installation" +msgstr "Mostrar instalaciones del usuario" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Un buen nombre para usar en este repositorio" +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "PID %s inválido" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Rama por defecto a usar en este repositorio" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -"Desplegar de forma permanente el identificador de colección en las " -"configuraciones remotas del cliente" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importar una nueva clave pública GPG por defecto desde ARCHIVO" +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" +msgstr "Eliminando objetos sin uso" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "Identificador de la clave GPG con la que firmar el resumen" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "No instalar referencias relacionadas" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Generando archivos de diferencias" +#: app/flatpak-builtins-repo.c:48 +#, fuzzy, c-format +msgid "Title: %s\n" +msgstr "Título" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Eliminando objetos sin uso" +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "ID de colección" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" msgstr "" -"Solo recorrer PROFUNDIDAD padres para cada commit (por defecto: -1=infinitos)" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "PROFUNDIDAD" - -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Generando archivos de diferencias: %s (%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Generando archivos de diferencias: %s (%.10s-%.10s)\n" +#: app/flatpak-builtins-repo.c:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "ID de colección" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:73 #, c-format -msgid "Failed to generate delta %s (%.10s): " +msgid "GPG key hash: %s\n" msgstr "" -"Ha ocurrido un error al generar los archivos de diferencias %s (%.10s) " -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-repo.c:82 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " +msgid "%zd branches\n" msgstr "" -"Ha ocurrido un error al generar los archivos de diferencias %s (%.10s-" -"%.10s): " -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "LOCALIZACIÓN - Actualizar los metadatos del repositorio" +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" +msgstr "Instalada" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Actualizando rama de appstream\n" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "Descarga" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Actualizando resumen\n" +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" +msgstr "Imprime información general acerca del repositorio" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Objetos totales: %u\n" +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" +msgstr "Mostrar una lista de las ramas en el repositorio" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "No hay objetos inaccesibles\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "Imprime los metadatos de una rama" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u objetos borrados, se han liberado %s\n" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "LOCALIZACIÓN - Mantenimiento del repositorio" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Comando a ejecutar" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Rama a usar" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Usar tiempo de ejecución de desarrollo" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Tiempo de ejecución a usar" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Versión de tiempo de ejecución a usar" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Llamadas al bus de registro de accesibilidad" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Llamadas al bus de registro de accesibilidad" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "No usar deltas estáticos" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Habilitar el reenvío de archivos" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +#, fuzzy +msgid "Run specified commit" +msgstr "Commit activo" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Actualizar tiempo de ejecución firmado" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "APLICACION [argumentos...] - Ejecuta una aplicación" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Arquitectura en la que instalar" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-search.c:263 #, fuzzy msgid "TEXT must be specified" msgstr "Se debe especificar REMOTO" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 #, fuzzy msgid "Application ID" msgstr "ID de colección" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "" -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Rama:" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "Sin remoto %s" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 #, fuzzy msgid "Description" msgstr "Descripción completa" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "Ninguna coincidencia %s" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Arquitectura a desinstalar" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Mantener referencia en el repositorio local" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "No desinstalar referencias relacionadas" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Borrar archivos aún si se encuentra en ejecución" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Desinstalar aplicación" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Desinstalar tiempo de ejecución" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REFERENCIA ... - Desinstala una aplicación" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Se debe especificar al menos una REFERENCIA" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Instalando: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Arquitectura a desinstalar" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1859,46 +2281,289 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REFERENCIA ...] - Actualiza aplicaciones y tiempos de ejecución" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" msgstr "Sin actualizaciones.\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, fuzzy msgid "Which do you want to use (0 to abort)?" msgstr "¿Cual quieres instalar (0 para abortar)?" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Actualizando appstream para el repositorio remoto %s\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Actualizando appstream para el repositorio remoto %s\n" -#: app/flatpak-builtins-utils.c:493 -#, fuzzy, c-format -msgid "Error updating: %s\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" msgstr "Actualizando %s" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-utils.c:553 #, c-format msgid "Remote \"%s\" not found" msgstr "" +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" +"Se requiere un tiempo de ejecución para %s (%s) que no está instalado, " +"buscando...\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "¿Cual quieres instalar (0 para abortar)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Se requiere un tiempo de ejecución para %s (%s) que no está instalado, " +"buscando...\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "¿Cual quieres instalar (0 para abortar)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Configurando %s como un nuevo repositorio remoto '%s'" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"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-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Esta aplicación depende de los tiempos de ejecución de:\n" +" %s\n" +"Configura esto como un nuevo repositorio remoto '%s'" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "instalar" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "actualizar" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "instalar paquete" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "instalar" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando: %s desde el paquete %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Instalando: %s desde el paquete %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Instalando: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Sin actualizaciones.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Ahora a las %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Aviso: Fallo al %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Error: Fallo al %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Error: Fallo al %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +" Administrar el acceso a archivos" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +" Administrar el acceso a archivos" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Llamadas al bus de registro de sistema" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Llamadas al bus de registro de sistema" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Instalando: %s\n" + +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "" +"Actualizando: %s desde\n" +" %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, fuzzy, c-format +msgid "Skipping: %s\n" +msgstr "Actualizando %s" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" + #. translators: please keep the leading space #: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" @@ -1916,34 +2581,43 @@ msgid "Uninstall an installed application or runtime" msgstr "Desinstalar una aplicación o tiempo de ejecución instalado" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Mostrar lista de aplicaciones y/o tiempos de ejecución instalados" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 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 +#: app/flatpak-main.c:70 #, fuzzy msgid "Configure flatpak" msgstr "Configurar Repositorio Remoto" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 #, fuzzy +msgid "Repair flatpak installation" +msgstr "Mostrar instalaciones del usuario" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +#, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Firmar una aplicación o runtime" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1951,24 +2625,31 @@ "\n" " Aplicaciones en ejecución" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Ejecutar una aplicación" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Sobrescribir permisos para una aplicación" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Especificar la versión por defecto a ejecutar" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Introduce el espacio de nombres de una aplicación en ejecución" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Aplicaciones en ejecución" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1976,24 +2657,52 @@ "\n" " Administrar el acceso a archivos" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 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:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Revocar acceso a un archivo específico" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Mostrar información sobre un archivo específico" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Mostrar una lista de los archivos exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Revocar permiso de escritura de la aplicación" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Mostrar extensiones" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Mostrar extensiones" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -2001,35 +2710,35 @@ "\n" " Administrar repositorios remotos" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Obtener lista de todos los repositorios remotos configurados" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Añadir un nuevo repositorio (por URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modificar las propiedades de un repositorio remoto configurado" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Borrar un repositorio remoto configurado" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "" "Obtener una lista de los contenidos de un repositorio remoto configurado" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 #, 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2037,296 +2746,147 @@ "\n" "Compilar aplicaciones" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inicializar un directorio para compilar" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 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:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Finalizar un directorio de compilación para exportar" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exportar un directorio de compilación a un repositorio" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, 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:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importar un archivo de paquete" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Firmar una aplicación o runtime" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Actualizar el archivo de resumen en un repositorio" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Crear un nuevo commit basado un en una referencia existente" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Imprimir información acerca de un repositorio" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 #, 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:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Mostrar las opciones de ayuda" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Imprimir la información de la versión y salir" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Imprimir la arquitectura por defecto y salir" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Imprimir las arquitecturas soportadas y salir" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Imprimir los drivers gl activos y salir" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "" "Trabajar con instalaciones de\n" " usuario" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Trabajar con ins" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 #, fuzzy msgid "Work on specific system-wide installation(s)" msgstr "Trabajar con instalaciones especificas del sistema" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NOMBRE" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Comandos Incorporados:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Comando desconocido '%s'" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Comando no especificado" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "error:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Encontrado en varios repositorios remotos:\n" - -#: 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: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: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: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: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:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s ya está instalado, ignorando\n" - -#: 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: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: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:765 -msgid "update" -msgstr "actualizar" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Ahora a las %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Sin actualizaciones.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "instalar paquete" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Aviso: Fallo al %s %s: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "Han fallado una o más operaciones" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, 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-context.c:210 +#: common/flatpak-context.c:213 #, 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-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Nombre dbus inválido: %s\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, 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-context.c:290 +#: common/flatpak-context.c:293 #, 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-context.c:318 +#: common/flatpak-context.c:321 #, 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-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2335,485 +2895,1008 @@ "Ruta desconocida en el sistema de archivos %s, algunas rutas válidas son: " "host, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Formato de entorno inválido %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Compartir con el huesped" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "COMPARTIR" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Dejar de compartir con el huesped" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Exponer socket a la aplicación" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOCKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "No exponer socket a la aplicación" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Exponer dispositivo a la aplicación" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "No exponer dispositivo a la aplicación" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Permitir característica" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "CARACTERÍSTICA" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "No permitir característica" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 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-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_ARCHIVOS[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "No exponer los archivos del sistema a la aplicación" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SISTEMA_ARCHIVOS" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Establecer variable de entorno" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VARIABLE=VALOR" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 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-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NOMBRE_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 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-context.c:1116 +#: common/flatpak-context.c:1211 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-context.c:1117 +#: common/flatpak-context.c:1212 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-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Añadir opción de póliza genérica" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CLAVE=VALOR" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Eliminar opción de póliza genérica" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Directorio de inicio con persistencia" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NOMBRE_ARCHIVO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 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-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Mientras se está cargando %s desde el repositorio remoto %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "" +"Actualizando los metadatos adicionales desde el resumen remoto para %s\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "No se puede encontrar %s en el repositorio remoto %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "No se puede encontrar %s en el repositorio remoto %s" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "No hay un caché de flatpak en el repositorio remoto" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Ninguna entrada para %s en el caché de flatpak del repositorio remoto " + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Ninguna entrada para %s en el caché de flatpak del repositorio remoto " + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Permitir que la aplicación tenga nombre propio en el bus de sistema" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "No se han encontrado anulaciones para %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s no está instalado" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s no instalado" + +#: common/flatpak-dir.c:2321 #, 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 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Commit a desplegar" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "No se puede encontrar %s en el repositorio remoto %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "No se puede encontrar %s en el repositorio remoto %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" -#: common/flatpak-dir.c:2761 -#, c-format -msgid "Invalid sha256 for extra data uri %s" +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" -"Suma de verificación sha256 inválida para los datos adicionales de la uri %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Suma de verificación inválida en los datos adicionales %s" + +#: common/flatpak-dir.c:3964 #, 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 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Uri de datos adicionales no soportada %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Tamaño incorrecto en los datos adicionales %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Mientras se descargan %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Tamaño incorrecto en los datos adicionales %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, 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 +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" msgstr "" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, 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 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, 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 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Ninguna coincidencia %s" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "No se puede encontrar %s en el repositorio remoto %s" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "No hay suficiente memoria" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Fallo al leer desde un archivo exportado" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Error al leer un archivo de tipo mime XML" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Archivo de tipo mime XML inválido" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Al obtener metadatos individuales: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Al obtener metadatos individuales: " + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Firma de verificación incorrecta para los datos adicionales" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Al escribir el archivo de datos adicionales '%s': " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Al obtener metadatos individuales: " + +#: common/flatpak-dir.c:6557 #, 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 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Mientras se intentan resolver las referencias %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s rama %s ya se encuentra instalada" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Error al leer el commit %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Al intentar revisar el subdirectorio de metadatos: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Al intentar revisar %s en %s: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Al intentar eliminar el directorio extra existente:" -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Al intentar aplicar datos adicionales: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, fuzzy, c-format msgid "Invalid deployed ref %s: " msgstr "PID %s inválido" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, fuzzy, c-format msgid "Invalid commit ref %s: " msgstr "PID %s inválido" -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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 +#: common/flatpak-dir.c:6836 #, 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 +#: common/flatpak-dir.c:6844 #, 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 +#: common/flatpak-dir.c:6850 #, 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 +#: common/flatpak-dir.c:6856 #, 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 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Los metadatos no coinciden con el commit" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 +#, c-format +msgid "This version of %s is already installed" +msgstr "Esta versión de %s ya está instalada" + +#: common/flatpak-dir.c:7801 +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:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s rama %s ya se encuentra instalada" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 #, 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" +msgid "Can't remove %s, it is needed for: %s" msgstr "" -"No se puede cambiar el repositorio remoto durante la instalación de un " -"paquete" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s rama %s no está instalada" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s rama %s no instalada" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "No hay un caché de flatpak en el repositorio remoto" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Ninguna coincidencia %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, fuzzy, c-format msgid "Error searching remote %s: %s" msgstr "Error: Fallo al %s %s: %s\n" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, 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" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "%s %s no instalado" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "No se pudo encontrar la instalación %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "PID %s inválido" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Formato de entorno inválido %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Formato de entorno inválido %s" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Formato de entorno inválido %s" + +#: common/flatpak-dir.c:10871 #, 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 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: 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:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "No se puede encontrar %s en el repositorio remoto %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, 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 " +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Imprime los metadatos de una rama" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s no está instalado" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s no está instalado" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "La extensión %s requerida solo está instalada parcialmente" -#: common/flatpak-run.c:1456 +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Fallo al abrir un archivo temporal de flatpak-info: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Fallo al abrir un archivo temporal: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Ha sido imposible crear una tubería sincronizada" +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Error: Fallo al %s %s: %s\n" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Sin remoto %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Comando no especificado" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "Fallo al abrir el archivo de información de una aplicación: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Ha sido imposible crear una tubería sincronizada" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Fallo al sincronizar con el proxy de dbus" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Fallo al abrir un archivo temporal: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Ha sido imposible crear una tubería sincronizada" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Fallo al abrir un archivo temporal de flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Fallo al abrir un archivo temporal de flatpak-info: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Inicializar aplicaciones desde la aplicación nombrada" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Fallo al escribir un archivo temporal" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Error: Fallo al %s %s: %s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Fallo al leer desde un archivo exportado" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "PID %s inválido" + +#: common/flatpak-run.c:2828 #, 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:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "No se puede abrir el espacio de nombres %s: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Demasiados argumentos" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Aviso: Problema al buscar referencias relacionadas: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "La aplicación %s rama %s no está instalada" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "La aplicación %s rama %s no está instalada" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "" +"El repositorio remoto %s está deshabilitado, ignorando la actualización %s" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s commit %s ya está instalado" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s commit %s ya está instalado" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "PID %s inválido" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Error al actualizar los metados adicionales para '%s': %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "" +"Aviso: No se pueden actualizar los metadatos adicionales para '%s': %s\n" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "PID %s inválido" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, fuzzy, c-format msgid "Migrating %s to %s\n" msgstr "" "Actualizando: %s desde\n" " %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, fuzzy, c-format msgid "Error during migration: %s\n" msgstr "Error: Fallo al %s %s: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Demasiados argumentos" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Firmar una aplicación o runtime" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Nombre dbus inválido: %s\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "PID %s inválido" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "'%s' no es un nombre válido para una rama: %s" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "PID %s inválido" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Sin orígenes de datos adicionales" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Error: Fallo al %s %s: %s\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Error: Fallo al %s %s: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Actualizando appstream para el repositorio remoto %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Firma de verificación incorrecta para los datos adicionales" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" msgstr "Descargando %s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" msgstr "Descargando %s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, fuzzy, c-format msgid "Downloading files: %d/%d %s" msgstr "Descargando %s" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s necesita una versión de flatpak superior (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2937,12 +4020,53 @@ msgid "Update appstream" msgstr "Actualizar appstream" -#~ msgid "No remote %s" -#~ msgstr "Sin remoto %s" +#, fuzzy +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "ID de colección" + +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "" +#~ "Suma de verificación sha256 inválida para los datos adicionales de la uri " +#~ "%s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Suma de verificación sha256 inválida para los datos adicionales" + +#~ msgid "Add OCI registry" +#~ msgstr "Añadir registro OCI" + +#~ msgid "Installing: %s\n" +#~ msgstr "Instalando: %s\n" #, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Mostrar instalaciones del usuario" +#~ msgid "Found in remote %s\n" +#~ msgstr "Encontrado en varios repositorios remotos:\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "%s encontrado en repositorio remoto, quieres instalarlo?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Encontrado en varios repositorios remotos:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s ya está instalado, ignorando\n" + +#~ msgid "One or more operations failed" +#~ msgstr "Han fallado una o más operaciones" + +#~ msgid "No ref information available in repository" +#~ msgstr "Información de referencia no disponible en el repositorio" + +#~ msgid "Remote title not set" +#~ msgstr "Titulo de repositorio remoto no establecido" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Rama por defecto del repositorio remoto no establecida" #, fuzzy #~ msgid "Search only system-wide installations" @@ -2958,9 +4082,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Fallo al desvincular un archivo temporal" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Fallo al escribir un archivo temporal" - #~ msgid "Installing %s" #~ msgstr "Instalando %s" diff -Nru flatpak-0.11.3/po/flatpak.pot flatpak-1.0.7/po/flatpak.pot --- flatpak-0.11.3/po/flatpak.pot 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/flatpak.pot 2019-02-11 12:42:42.000000000 +0000 @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: flatpak 0.11.3\n" +"Project-Id-Version: flatpak 1.0.7\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,210 +17,6 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:78 -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 -msgid "BRANCH" -msgstr "" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:82 -msgid "Import GPG key from FILE (- for stdin)" -msgstr "" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "" - -#: 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 -msgid "Invalid file format" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:249 -#, c-format -msgid "Invalid version %s, only 1 supported" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:293 -msgid "Invalid gpg key" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:320 -msgid "NAME LOCATION - Add a remote repository" -msgstr "" - -#: 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: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: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: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: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:344 -#: app/flatpak-builtins-build-export.c:692 -#, c-format -msgid "‘%s’ is not a valid collection ID: %s" -msgstr "" - -#: 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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:371 -msgid "No url specified in flatpakrepo file" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:415 -#, c-format -msgid "Warning: Could not update extra metadata for '%s': %s\n" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:464 -msgid "NAME - Modify a remote repository" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:474 -msgid "Remote NAME must be specified" -msgstr "" - -#: 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:488 -#, c-format -msgid "Error updating extra metadata for '%s': %s\n" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:489 -#, c-format -msgid "Could not update extra metadata for %s" -msgstr "" - #: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" msgstr "" @@ -230,12 +26,13 @@ msgstr "" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "" @@ -243,6 +40,14 @@ msgid "Url for repo" msgstr "" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "" @@ -251,6 +56,14 @@ msgid "Add GPG key from FILE (- for stdin)" msgstr "" +#: app/flatpak-builtins-build-bundle.c:60 app/flatpak-builtins-build.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "" @@ -260,26 +73,29 @@ msgstr "" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "" @@ -287,36 +103,57 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "" @@ -342,7 +179,7 @@ msgstr "" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "" @@ -350,11 +187,11 @@ msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "" @@ -362,393 +199,445 @@ msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" -#: app/flatpak-builtins-build.c:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:239 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 msgid "Either --src-repo or --src-ref must be specified." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" msgstr "" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:370 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 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-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +msgid "Don't inherit permissions from runtime" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, non-allowed export filename\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " "GROUP=KEY[=VALUE]]" msgstr "" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " "NAME=VAR[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "" @@ -764,136 +653,144 @@ msgid "Import oci image instead of flatpak bundle" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 msgid "LOCATION and FILENAME must be specified" msgstr "" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "" @@ -901,10 +798,118 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -921,33 +926,100 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, c-format msgid "Unknown configure key '%s'" msgstr "" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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" +#: app/flatpak-builtins-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" msgstr "" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" +#: app/flatpak-builtins-create-usb.c:44 +msgid "Arch to copy" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:45 +msgid "DEST" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +msgid "MOUNT-PATH and REF must be specified" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:698 +#, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" msgstr "" #: app/flatpak-builtins-document-export.c:54 @@ -1096,195 +1168,173 @@ msgid "Can't switch uid" msgstr "" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" msgstr "" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 msgid "Query file access" msgstr "" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +msgid "Show location" +msgstr "" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" +msgstr "" + +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" msgstr "" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" msgstr "" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 -msgid "Runtime:" -msgstr "" - -#: app/flatpak-builtins-info.c:242 -msgid "Installed subdirectories:" -msgstr "" - -#: app/flatpak-builtins-info.c:363 -msgid "Extension:" -msgstr "" - -#: app/flatpak-builtins-info.c:374 -msgid "Subpaths:" -msgstr "" - -#: 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 "" - -#: 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" +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" 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:" +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" msgstr "" -#: app/flatpak-builtins-info-remote.c:223 -msgid "History:\n" +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 +msgid "Runtime:" msgstr "" -#: app/flatpak-builtins-info-remote.c:244 -msgid " Subject:" +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" msgstr "" -#: app/flatpak-builtins-info-remote.c:245 -msgid " Date:" +#: app/flatpak-builtins-info.c:260 +msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info-remote.c:246 -msgid " Commit:" +#: app/flatpak-builtins-info.c:411 +msgid "Extension:" msgstr "" -#: app/flatpak-builtins-info-remote.c:292 -#, c-format -msgid "Warning: Commit %s has no flatpak metadata\n" +#: app/flatpak-builtins-info.c:422 +msgid "Subpaths:" msgstr "" #: app/flatpak-builtins-install.c:58 @@ -1323,7 +1373,8 @@ msgid "Only install this subpath" msgstr "" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "" @@ -1331,45 +1382,24 @@ msgid "Uninstall first if already installed" msgstr "" -#: app/flatpak-builtins-install.c:212 -#, c-format -msgid "" -"This application depends on runtimes from:\n" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" +#: app/flatpak-builtins-install.c:249 +msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" -#: app/flatpak-builtins-install.c:474 -msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" msgstr "" #: app/flatpak-builtins-list.c:43 @@ -1388,1312 +1418,2275 @@ msgid "Arch to show" msgstr "" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr "" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" msgstr "" -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" +#: app/flatpak-builtins-make-current.c:58 +msgid "APP BRANCH - Make branch of application current" msgstr "" -#: app/flatpak-builtins-list-remotes.c:53 -msgid " - List remote repositories" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" msgstr "" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" msgstr "" -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" +#: app/flatpak-builtins-make-current.c:97 +#, c-format +msgid "App %s branch %s is not installed" msgstr "" -#: app/flatpak-builtins-list-remotes.c:71 -msgid "Priority" +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" msgstr "" -#: app/flatpak-builtins-ls-remote.c:45 -msgid "Show arches and branches" +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" msgstr "" -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" msgstr "" -#: app/flatpak-builtins-ls-remote.c:47 -msgid "Show only apps" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" msgstr "" -#: app/flatpak-builtins-ls-remote.c:48 -msgid "Show only those where updates are available" +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" msgstr "" -#: app/flatpak-builtins-ls-remote.c:49 -msgid "Limit to this arch (* for all)" +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" msgstr "" -#: app/flatpak-builtins-ls-remote.c:96 -msgid " [REMOTE] - Show available runtimes and applications" +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" msgstr "" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" msgstr "" -#: app/flatpak-builtins-ls-remote.c:179 -msgid "Download size" +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" msgstr "" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" msgstr "" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" msgstr "" -#: app/flatpak-builtins-make-current.c:58 -msgid "APP BRANCH - Make branch of application current" +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" msgstr "" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 -msgid "APP must be specified" +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" msgstr "" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" msgstr "" -#: app/flatpak-builtins-make-current.c:97 -#, c-format -msgid "App %s branch %s is not installed" +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" msgstr "" -#: app/flatpak-builtins-override.c:54 -msgid "[APP] - Override settings [for application]" +#: app/flatpak-builtins-ps.c:43 +msgid "What information to show" msgstr "" -#: app/flatpak-builtins-repo.c:48 -#, c-format -msgid "Title: %s\n" +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" msgstr "" -#: app/flatpak-builtins-repo.c:51 -#, c-format -msgid "Collection ID: %s\n" +#: app/flatpak-builtins-ps.c:53 +msgid "Application" msgstr "" -#: app/flatpak-builtins-repo.c:54 -#, c-format -msgid "Default branch: %s\n" +#: app/flatpak-builtins-ps.c:53 +msgid "Show the application ID" msgstr "" -#: app/flatpak-builtins-repo.c:57 -#, c-format -msgid "Redirect URL: %s\n" +#: app/flatpak-builtins-ps.c:54 +msgid "Architecture" msgstr "" -#: app/flatpak-builtins-repo.c:60 -#, c-format -msgid "Redirect collection ID: %s\n" +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 +msgid "Show the application branch" +msgstr "" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:56 +msgid "Show the application commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:57 +msgid "Runtime" +msgstr "" + +#: app/flatpak-builtins-ps.c:57 +msgid "Show the runtime ID" +msgstr "" + +#: app/flatpak-builtins-ps.c:58 +msgid "Runtime Branch" +msgstr "" + +#: app/flatpak-builtins-ps.c:58 +msgid "Show the runtime branch" +msgstr "" + +#: app/flatpak-builtins-ps.c:59 +msgid "Runtime Commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:59 +msgid "Show the runtime commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" msgstr "" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-ps.c:89 #, c-format -msgid "GPG key hash: %s\n" +msgid "Ambiguous column: %s" msgstr "" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-ps.c:98 #, c-format -msgid "%zd branches\n" +msgid "Unknown column: %s" msgstr "" -#: app/flatpak-builtins-repo.c:99 -msgid "Installed" +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" msgstr "" -#: app/flatpak-builtins-repo.c:100 -msgid "Download" +#: app/flatpak-builtins-ps.c:119 +msgid "Show all columns" msgstr "" -#: app/flatpak-builtins-repo.c:151 -msgid "Print general information about the repository" +#: app/flatpak-builtins-ps.c:156 +msgid "Instance" msgstr "" -#: app/flatpak-builtins-repo.c:152 -msgid "List the branches in the repository" +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" msgstr "" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" +#: app/flatpak-builtins-ps.c:264 +msgid "Extra arguments given" msgstr "" -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" msgstr "" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" msgstr "" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" msgstr "" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" msgstr "" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" msgstr "" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" msgstr "" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" msgstr "" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" msgstr "" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" msgstr "" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" msgstr "" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" msgstr "" -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 #, c-format -msgid "Generating delta: %s (%.10s)\n" +msgid "Can't load uri %s: %s\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-remote-add.c:206 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" +msgid "Can't load file %s: %s\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:203 -#, c-format -msgid "Failed to generate delta %s (%.10s): " +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" msgstr "" -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " +msgid "Invalid version %s, only 1 supported" msgstr "" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" msgstr "" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" msgstr "" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" msgstr "" -#: app/flatpak-builtins-repo-update.c:534 +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 #, c-format -msgid "Total objects: %u\n" +msgid "Remote %s already exists" msgstr "" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" msgstr "" -#: app/flatpak-builtins-repo-update.c:538 +#: app/flatpak-builtins-remote-add.c:383 #, c-format -msgid "Deleted %u objects, %s freed\n" +msgid "Warning: Could not update extra metadata for '%s': %s\n" msgstr "" -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" +#: app/flatpak-builtins-remote-delete.c:38 +msgid "Remove remote even if in use" msgstr "" -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" msgstr "" -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" msgstr "" -#: app/flatpak-builtins-run.c:56 -msgid "Runtime to use" +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" msgstr "" -#: app/flatpak-builtins-run.c:57 -msgid "Runtime version to use" +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" msgstr "" -#: app/flatpak-builtins-run.c:60 -msgid "Log accessibility bus calls" +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" msgstr "" -#: app/flatpak-builtins-run.c:61 -msgid "Enable file forwarding" +#: app/flatpak-builtins-remote-info.c:213 +msgid "Download size:" msgstr "" -#: app/flatpak-builtins-run.c:82 -msgid "APP [args...] - Run an app" +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" msgstr "" -#: app/flatpak-builtins-search.c:239 -msgid "TEXT - Search remote apps/runtimes for text" +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" msgstr "" -#: app/flatpak-builtins-search.c:249 -msgid "TEXT must be specified" +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" msgstr "" -#: app/flatpak-builtins-search.c:305 -msgid "Application ID" +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" msgstr "" -#: app/flatpak-builtins-search.c:306 -msgid "Version" +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" msgstr "" -#: app/flatpak-builtins-search.c:310 -msgid "Remotes" +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" msgstr "" -#: app/flatpak-builtins-search.c:311 -msgid "Description" +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" msgstr "" -#: app/flatpak-builtins-search.c:320 -msgid "No matches found" +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" msgstr "" -#: app/flatpak-builtins-uninstall.c:44 -msgid "Arch to uninstall" +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" msgstr "" -#: app/flatpak-builtins-uninstall.c:45 -msgid "Keep ref in local repository" +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" msgstr "" -#: app/flatpak-builtins-uninstall.c:46 -msgid "Don't uninstall related refs" +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" msgstr "" -#: app/flatpak-builtins-uninstall.c:47 -msgid "Remove files even if running" +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" msgstr "" -#: app/flatpak-builtins-uninstall.c:70 -msgid "REF... - Uninstall an application" +#: app/flatpak-builtins-remote-ls.c:47 +msgid "Show only apps" msgstr "" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-remote-ls.c:48 +msgid "Show only those where updates are available" msgstr "" -#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 -#, c-format -msgid "Warning: Problem looking for related refs: %s\n" +#: app/flatpak-builtins-remote-ls.c:49 +msgid "Limit to this arch (* for all)" msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, c-format -msgid "Uninstalling: %s\n" +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr "" -#: app/flatpak-builtins-update.c:53 -msgid "Arch to update for" +#: app/flatpak-builtins-remote-ls.c:201 +msgid "Download size" msgstr "" -#: app/flatpak-builtins-update.c:54 -msgid "Commit to deploy" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" msgstr "" -#: app/flatpak-builtins-update.c:55 -msgid "Remove old files even if running" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" msgstr "" -#: app/flatpak-builtins-update.c:56 -msgid "Don't pull, only update from local cache" +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" msgstr "" -#: app/flatpak-builtins-update.c:58 -msgid "Don't update related refs" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" msgstr "" -#: app/flatpak-builtins-update.c:63 -msgid "Update appstream for remote" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" msgstr "" -#: app/flatpak-builtins-update.c:64 -msgid "Only update this subpath" +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" msgstr "" -#: app/flatpak-builtins-update.c:83 -msgid "[REF...] - Update applications or runtimes" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" msgstr "" -#: app/flatpak-builtins-update.c:119 -msgid "Looking for updates...\n" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" msgstr "" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Remote ‘%s’ found in multiple installations:\n" +msgid "Updating extra metadata from remote summary for %s\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 -msgid "Which do you want to use (0 to abort)?" +#: app/flatpak-builtins-remote-modify.c:214 +#, c-format +msgid "Error updating extra metadata for '%s': %s\n" msgstr "" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-remote-modify.c:215 #, c-format -msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgid "Could not update extra metadata for %s" msgstr "" -#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Object missing: %s.%s\n" msgstr "" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "Updating appstream data for remote %s\n" +msgid "%s, deleting object\n" msgstr "" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-builtins-repair.c:134 #, c-format -msgid "Error updating: %s\n" +msgid "Can't load object %s: %s\n" msgstr "" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-repair.c:253 #, c-format -msgid "Remote \"%s\" not found" +msgid "Problems loading data for %s: %s\n" msgstr "" -#. translators: please keep the leading space -#: app/flatpak-main.c:62 -msgid " Manage installed apps and runtimes" +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" msgstr "" -#: app/flatpak-main.c:63 -msgid "Install an application or runtime" +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" msgstr "" -#: app/flatpak-main.c:64 -msgid "Update an installed application or runtime" +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" msgstr "" -#: app/flatpak-main.c:65 -msgid "Uninstall an installed application or runtime" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" msgstr "" -#: app/flatpak-main.c:66 -msgid "List installed apps and/or runtimes" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -#: app/flatpak-main.c:67 -msgid "Show info for installed app or runtime" +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" msgstr "" -#: app/flatpak-main.c:68 -msgid "Configure flatpak" +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" msgstr "" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:71 -msgid "" -"\n" -" Finding applications and runtimes" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" msgstr "" -#: app/flatpak-main.c:72 -msgid "Search for remote apps/runtimes" +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" msgstr "" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 -msgid "" -"\n" -" Running applications" +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" msgstr "" -#: app/flatpak-main.c:76 -msgid "Run an application" +#: app/flatpak-builtins-repo.c:57 +#, c-format +msgid "Redirect URL: %s\n" msgstr "" -#: app/flatpak-main.c:77 -msgid "Override permissions for an application" +#: app/flatpak-builtins-repo.c:65 +#, c-format +msgid "Deploy collection ID: %s\n" msgstr "" -#: app/flatpak-main.c:78 -msgid "Specify default version to run" +#: app/flatpak-builtins-repo.c:73 +#, c-format +msgid "GPG key hash: %s\n" msgstr "" -#: app/flatpak-main.c:79 -msgid "Enter the namespace of a running application" +#: app/flatpak-builtins-repo.c:82 +#, c-format +msgid "%zd branches\n" msgstr "" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 -msgid "" -"\n" -" Manage file access" +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" msgstr "" -#: app/flatpak-main.c:83 -msgid "Grant an application access to a specific file" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" msgstr "" -#: app/flatpak-main.c:84 -msgid "Revoke access to a specific file" +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" msgstr "" -#: app/flatpak-main.c:85 -msgid "Show information about a specific file" +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" msgstr "" -#: app/flatpak-main.c:86 -msgid "List exported files" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" msgstr "" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 -msgid "" -"\n" -" Manage remote repositories" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" msgstr "" -#: app/flatpak-main.c:90 -msgid "List all configured remotes" +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "" + +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" +msgstr "" + +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "" + +#: app/flatpak-builtins-run.c:62 +msgid "Runtime to use" +msgstr "" + +#: app/flatpak-builtins-run.c:63 +msgid "Runtime version to use" +msgstr "" + +#: app/flatpak-builtins-run.c:66 +msgid "Log accessibility bus calls" +msgstr "" + +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "" + +#: app/flatpak-builtins-run.c:69 +msgid "Enable file forwarding" +msgstr "" + +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 +msgid "APP [args...] - Run an app" +msgstr "" + +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "" + +#: app/flatpak-builtins-search.c:254 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "" + +#: app/flatpak-builtins-search.c:263 +msgid "TEXT must be specified" +msgstr "" + +#: app/flatpak-builtins-search.c:316 +msgid "Application ID" +msgstr "" + +#: app/flatpak-builtins-search.c:317 +msgid "Version" +msgstr "" + +#: app/flatpak-builtins-search.c:321 +msgid "Remotes" +msgstr "" + +#: app/flatpak-builtins-search.c:322 +msgid "Description" +msgstr "" + +#: app/flatpak-builtins-search.c:331 +msgid "No matches found" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:50 +msgid "Arch to uninstall" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:51 +msgid "Keep ref in local repository" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:52 +msgid "Don't uninstall related refs" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:53 +msgid "Remove files even if running" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:155 +msgid "REF... - Uninstall an application" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:164 +msgid "Must specify at least one REF, --unused or --all" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "" + +#: app/flatpak-builtins-update.c:53 +msgid "Arch to update for" +msgstr "" + +#: app/flatpak-builtins-update.c:54 +msgid "Commit to deploy" +msgstr "" + +#: app/flatpak-builtins-update.c:55 +msgid "Remove old files even if running" +msgstr "" + +#: app/flatpak-builtins-update.c:56 +msgid "Don't pull, only update from local cache" +msgstr "" + +#: app/flatpak-builtins-update.c:58 +msgid "Don't update related refs" +msgstr "" + +#: app/flatpak-builtins-update.c:63 +msgid "Update appstream for remote" +msgstr "" + +#: app/flatpak-builtins-update.c:64 +msgid "Only update this subpath" +msgstr "" + +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "" + +#: app/flatpak-builtins-update.c:128 +msgid "Looking for updates...\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:367 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "" + +#: app/flatpak-builtins-utils.c:374 +msgid "Which do you want to use (0 to abort)?" +msgstr "" + +#: app/flatpak-builtins-utils.c:376 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" + +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 +#, c-format +msgid "Updating appstream data for user remote %s" +msgstr "" + +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 +#, c-format +msgid "Updating appstream data for remote %s" +msgstr "" + +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "" + +#: app/flatpak-cli-transaction.c:86 +#, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "" + +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" + +#: app/flatpak-cli-transaction.c:123 +#, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "" + +#: app/flatpak-cli-transaction.c:147 +msgid "uninstall" +msgstr "" + +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "" + +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "" + +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +msgid "system dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, c-format +msgid "Uninstalling from %s:\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:586 +#, c-format +msgid "Installing in %s:\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:623 +#, c-format +msgid "Updating in %s:\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, c-format +msgid "Skipping: %s\n" +msgstr "" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" + +#. translators: please keep the leading space +#: app/flatpak-main.c:62 +msgid " Manage installed apps and runtimes" +msgstr "" + +#: app/flatpak-main.c:63 +msgid "Install an application or runtime" +msgstr "" + +#: app/flatpak-main.c:64 +msgid "Update an installed application or runtime" +msgstr "" + +#: app/flatpak-main.c:65 +msgid "Uninstall an installed application or runtime" +msgstr "" + +#: app/flatpak-main.c:68 +msgid "List installed apps and/or runtimes" +msgstr "" + +#: app/flatpak-main.c:69 +msgid "Show info for installed app or runtime" +msgstr "" + +#: app/flatpak-main.c:70 +msgid "Configure flatpak" +msgstr "" + +#: app/flatpak-main.c:71 +msgid "Repair flatpak installation" +msgstr "" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +msgid "" +"\n" +" Finding applications and runtimes" +msgstr "" + +#: app/flatpak-main.c:76 +msgid "Search for remote apps/runtimes" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:79 +msgid "" +"\n" +" Running applications" +msgstr "" + +#: app/flatpak-main.c:80 +msgid "Run an application" +msgstr "" + +#: app/flatpak-main.c:81 +msgid "Override permissions for an application" +msgstr "" + +#: app/flatpak-main.c:82 +msgid "Specify default version to run" +msgstr "" + +#: app/flatpak-main.c:83 +msgid "Enter the namespace of a running application" +msgstr "" + +#: app/flatpak-main.c:84 +msgid "Enumerate running applications" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:87 +msgid "" +"\n" +" Manage file access" +msgstr "" + +#: app/flatpak-main.c:88 +msgid "Grant an application access to a specific file" +msgstr "" + +#: app/flatpak-main.c:89 +msgid "Revoke access to a specific file" +msgstr "" + +#: app/flatpak-main.c:90 +msgid "Show information about a specific file" msgstr "" #: app/flatpak-main.c:91 +msgid "List exported files" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 +msgid "" +"\n" +" Manage remote repositories" +msgstr "" + +#: app/flatpak-main.c:102 +msgid "List all configured remotes" +msgstr "" + +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "" -#: app/flatpak-main.c:92 -msgid "Modify properties of a configured remote" +#: app/flatpak-main.c:104 +msgid "Modify properties of a configured remote" +msgstr "" + +#: app/flatpak-main.c:105 +msgid "Delete a configured remote" +msgstr "" + +#: app/flatpak-main.c:107 +msgid "List contents of a configured remote" +msgstr "" + +#: app/flatpak-main.c:108 +msgid "Show information about a remote app or runtime" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:111 +msgid "" +"\n" +" Build applications" +msgstr "" + +#: app/flatpak-main.c:112 +msgid "Initialize a directory for building" +msgstr "" + +#: app/flatpak-main.c:113 +msgid "Run a build command inside the build dir" +msgstr "" + +#: app/flatpak-main.c:114 +msgid "Finish a build dir for export" +msgstr "" + +#: app/flatpak-main.c:115 +msgid "Export a build dir to a repository" +msgstr "" + +#: app/flatpak-main.c:116 +msgid "Create a bundle file from a ref in a local repository" +msgstr "" + +#: app/flatpak-main.c:117 +msgid "Import a bundle file" +msgstr "" + +#: app/flatpak-main.c:118 +msgid "Sign an application or runtime" +msgstr "" + +#: app/flatpak-main.c:119 +msgid "Update the summary file in a repository" +msgstr "" + +#: app/flatpak-main.c:120 +msgid "Create new commit based on existing ref" +msgstr "" + +#: app/flatpak-main.c:121 +msgid "Print information about a repo" +msgstr "" + +#: app/flatpak-main.c:138 +msgid "Print debug information during command processing, -vv for more detail" msgstr "" -#: app/flatpak-main.c:93 -msgid "Delete a configured remote" +#: app/flatpak-main.c:139 +msgid "Print OSTree debug information during command processing" msgstr "" -#: app/flatpak-main.c:95 -msgid "List contents of a configured remote" +#: app/flatpak-main.c:140 +msgid "Show help options" msgstr "" -#: app/flatpak-main.c:96 -msgid "Show information about a remote app or runtime" +#: app/flatpak-main.c:145 +msgid "Print version information and exit" msgstr "" -#. translators: please keep the leading newline and space -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:146 +msgid "Print default arch and exit" +msgstr "" + +#: app/flatpak-main.c:147 +msgid "Print supported arches and exit" +msgstr "" + +#: app/flatpak-main.c:148 +msgid "Print active gl drivers and exit" +msgstr "" + +#: app/flatpak-main.c:153 +msgid "Work on user installations" +msgstr "" + +#: app/flatpak-main.c:154 +msgid "Work on system-wide installations (default)" +msgstr "" + +#: app/flatpak-main.c:155 +msgid "Work on specific system-wide installation(s)" +msgstr "" + +#: app/flatpak-main.c:181 +msgid "Builtin Commands:" +msgstr "" + +#: app/flatpak-main.c:361 msgid "" -"\n" -" Build applications" +"The --installation option was used multiple times for a command that works " +"on one installation" msgstr "" -#: app/flatpak-main.c:100 -msgid "Initialize a directory for building" +#: app/flatpak-main.c:480 +#, c-format +msgid "Unknown command '%s'" msgstr "" -#: app/flatpak-main.c:101 -msgid "Run a build command inside the build dir" +#: app/flatpak-main.c:488 +msgid "No command specified" msgstr "" -#: app/flatpak-main.c:102 -msgid "Finish a build dir for export" +#: app/flatpak-main.c:608 +msgid "error:" msgstr "" -#: app/flatpak-main.c:103 -msgid "Export a build dir to a repository" +#: common/flatpak-context.c:178 +#, c-format +msgid "Unknown share type %s, valid types are: %s" msgstr "" -#: app/flatpak-main.c:104 -msgid "Create a bundle file from a ref in a local repository" +#: common/flatpak-context.c:213 +#, c-format +msgid "Unknown policy type %s, valid types are: %s" msgstr "" -#: app/flatpak-main.c:105 -msgid "Import a bundle file" +#: common/flatpak-context.c:251 +#, c-format +msgid "Invalid dbus name %s" msgstr "" -#: app/flatpak-main.c:106 -msgid "Sign an application or runtime" +#: common/flatpak-context.c:264 +#, c-format +msgid "Unknown socket type %s, valid types are: %s" msgstr "" -#: app/flatpak-main.c:107 -msgid "Update the summary file in a repository" +#: common/flatpak-context.c:293 +#, c-format +msgid "Unknown device type %s, valid types are: %s" msgstr "" -#: app/flatpak-main.c:108 -msgid "Create new commit based on existing ref" +#: common/flatpak-context.c:321 +#, c-format +msgid "Unknown feature type %s, valid types are: %s" msgstr "" -#: app/flatpak-main.c:109 -msgid "Print information about a repo" +#: common/flatpak-context.c:762 +#, c-format +msgid "" +"Unknown filesystem location %s, valid locations are: host, home, xdg-" +"*[/...], ~/dir, /dir" msgstr "" -#: app/flatpak-main.c:126 -msgid "Print debug information during command processing, -vv for more detail" +#: common/flatpak-context.c:1034 +#, c-format +msgid "Invalid env format %s" msgstr "" -#: app/flatpak-main.c:127 -msgid "Print OSTree debug information during command processing" +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" msgstr "" -#: app/flatpak-main.c:128 -msgid "Show help options" +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 +msgid "Share with host" +msgstr "" + +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 +msgid "SHARE" +msgstr "" + +#: common/flatpak-context.c:1199 +msgid "Unshare with host" +msgstr "" + +#: common/flatpak-context.c:1200 +msgid "Expose socket to app" +msgstr "" + +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 +msgid "SOCKET" +msgstr "" + +#: common/flatpak-context.c:1201 +msgid "Don't expose socket to app" +msgstr "" + +#: common/flatpak-context.c:1202 +msgid "Expose device to app" +msgstr "" + +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 +msgid "DEVICE" +msgstr "" + +#: common/flatpak-context.c:1203 +msgid "Don't expose device to app" +msgstr "" + +#: common/flatpak-context.c:1204 +msgid "Allow feature" +msgstr "" + +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 +msgid "FEATURE" +msgstr "" + +#: common/flatpak-context.c:1205 +msgid "Don't allow feature" +msgstr "" + +#: common/flatpak-context.c:1206 +msgid "Expose filesystem to app (:ro for read-only)" +msgstr "" + +#: common/flatpak-context.c:1206 +msgid "FILESYSTEM[:ro]" +msgstr "" + +#: common/flatpak-context.c:1207 +msgid "Don't expose filesystem to app" +msgstr "" + +#: common/flatpak-context.c:1207 +msgid "FILESYSTEM" +msgstr "" + +#: common/flatpak-context.c:1208 +msgid "Set environment variable" +msgstr "" + +#: common/flatpak-context.c:1208 +msgid "VAR=VALUE" +msgstr "" + +#: common/flatpak-context.c:1209 +msgid "Allow app to own name on the session bus" +msgstr "" + +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 +msgid "DBUS_NAME" +msgstr "" + +#: common/flatpak-context.c:1210 +msgid "Allow app to talk to name on the session bus" +msgstr "" + +#: common/flatpak-context.c:1211 +msgid "Allow app to own name on the system bus" +msgstr "" + +#: common/flatpak-context.c:1212 +msgid "Allow app to talk to name on the system bus" +msgstr "" + +#: common/flatpak-context.c:1213 +msgid "Add generic policy option" +msgstr "" + +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 +msgid "SUBSYSTEM.KEY=VALUE" +msgstr "" + +#: common/flatpak-context.c:1214 +msgid "Remove generic policy option" +msgstr "" + +#: common/flatpak-context.c:1215 +msgid "Persist home directory" +msgstr "" + +#: common/flatpak-context.c:1215 +msgid "FILENAME" +msgstr "" + +#. This is not needed/used anymore, so hidden, but we accept it for backwards compat +#: common/flatpak-context.c:1217 +msgid "Don't require a running session (no cgroups creation)" +msgstr "" + +#: common/flatpak-dir.c:240 +#, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "" + +#: common/flatpak-dir.c:260 +#, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "" + +#: common/flatpak-dir.c:284 +#, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "" + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "" + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "" + +#: common/flatpak-dir.c:1602 +#, c-format +msgid "No overrides found for %s" +msgstr "" + +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "" + +#: common/flatpak-dir.c:2321 +#, c-format +msgid "While opening repository %s: " +msgstr "" + +#: common/flatpak-dir.c:2581 +msgid "No appstream commit to deploy" +msgstr "" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 +msgid "Can't create deploy directory" +msgstr "" + +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:3964 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:3971 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "" + +#: common/flatpak-dir.c:3985 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "" + +#: common/flatpak-dir.c:3988 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "" + +#: common/flatpak-dir.c:4003 +#, c-format +msgid "While downloading %s: " +msgstr "" + +#: common/flatpak-dir.c:4010 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "" + +#: common/flatpak-dir.c:4021 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "" + +#: common/flatpak-dir.c:4080 +msgid "Remote OCI index has no registry uri" +msgstr "" + +#: common/flatpak-dir.c:4181 +#, c-format +msgid "%s commit %s already installed" msgstr "" -#: app/flatpak-main.c:133 -msgid "Print version information and exit" +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" msgstr "" -#: app/flatpak-main.c:134 -msgid "Print default arch and exit" +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 +#, c-format +msgid "While pulling %s from remote %s: " msgstr "" -#: app/flatpak-main.c:135 -msgid "Print supported arches and exit" +#: common/flatpak-dir.c:4697 +msgid "No summary found" msgstr "" -#: app/flatpak-main.c:136 -msgid "Print active gl drivers and exit" +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" msgstr "" -#: app/flatpak-main.c:141 -msgid "Work on user installations" +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" msgstr "" -#: app/flatpak-main.c:142 -msgid "Work on system-wide installations (default)" +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" msgstr "" -#: app/flatpak-main.c:143 -msgid "Work on specific system-wide installation(s)" +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" msgstr "" -#: app/flatpak-main.c:143 -msgid "NAME" +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" msgstr "" -#: app/flatpak-main.c:169 -msgid "Builtin Commands:" +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" msgstr "" -#: app/flatpak-main.c:370 +#: common/flatpak-dir.c:4801 +#, c-format msgid "" -"The --installation option was used multiple times for a command that works " -"on one installation" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" msgstr "" -#: app/flatpak-main.c:489 -#, c-format -msgid "Unknown command '%s'" +#: common/flatpak-dir.c:5448 +msgid "Not enough memory" msgstr "" -#: app/flatpak-main.c:497 -msgid "No command specified" +#: common/flatpak-dir.c:5467 +msgid "Failed to read from exported file" msgstr "" -#: app/flatpak-main.c:615 -msgid "error:" +#: common/flatpak-dir.c:5661 +msgid "Error reading mimetype xml file" msgstr "" -#: app/flatpak-transaction.c:313 -#, c-format -msgid "Found in remote %s\n" +#: common/flatpak-dir.c:5666 +msgid "Invalid mimetype xml file" msgstr "" -#: app/flatpak-transaction.c:317 +#: common/flatpak-dir.c:5755 #, c-format -msgid "Found in remote %s, do you want to install it?" +msgid "D-Bus service file '%s' has wrong name" msgstr "" -#: app/flatpak-transaction.c:322 -msgid "Found in several remotes:\n" +#: common/flatpak-dir.c:6290 +msgid "While getting detached metadata: " msgstr "" -#: app/flatpak-transaction.c:327 -msgid "Which do you want to install (0 to abort)?" +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +msgid "Extra data missing in detached metadata" msgstr "" -#: app/flatpak-transaction.c:417 -#, c-format -msgid "Required runtime for %s (%s) is not installed, searching...\n" +#: common/flatpak-dir.c:6308 +msgid "While creating extradir: " msgstr "" -#: app/flatpak-transaction.c:423 -#, c-format -msgid "The required runtime %s was not found in a configured remote.\n" +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "" + +#: common/flatpak-dir.c:6358 +msgid "Wrong size for extra data" msgstr "" -#: 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 +#: common/flatpak-dir.c:6371 #, c-format -msgid "%s not installed" +msgid "While writing extra data file '%s': " msgstr "" -#: app/flatpak-transaction.c:512 +#: common/flatpak-dir.c:6378 #, c-format -msgid "Remote %s disabled, ignoring %s update" +msgid "Extra data %s missing in detached metadata" msgstr "" -#: app/flatpak-transaction.c:525 +#: common/flatpak-dir.c:6557 #, c-format -msgid "%s already installed, skipping\n" +msgid "apply_extra script failed, exit status %d" msgstr "" -#: app/flatpak-transaction.c:531 +#: common/flatpak-dir.c:6641 #, c-format -msgid "%s is already installed from other remote (%s)" +msgid "While trying to resolve ref %s: " msgstr "" -#: app/flatpak-transaction.c:543 +#: common/flatpak-dir.c:6656 #, c-format -msgid "Warning: Can't find dependencies: %s\n" +msgid "%s is not available" msgstr "" -#: app/flatpak-transaction.c:570 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format -msgid "Invalid require-flatpak argument %s\n" +msgid "%s branch %s already installed" msgstr "" -#: app/flatpak-transaction.c:576 +#: common/flatpak-dir.c:6689 #, c-format -msgid "%s needs a later flatpak version (%s)" +msgid "Failed to read commit %s: " msgstr "" -#: app/flatpak-transaction.c:688 +#: common/flatpak-dir.c:6709 #, c-format -msgid "Error updating remote metadata for '%s': %s\n" +msgid "While trying to checkout %s into %s: " msgstr "" -#: app/flatpak-transaction.c:744 -msgid "install" +#: common/flatpak-dir.c:6734 +msgid "While trying to checkout metadata subpath: " msgstr "" -#: app/flatpak-transaction.c:746 +#: common/flatpak-dir.c:6765 #, c-format -msgid "Installing for user: %s from %s\n" +msgid "While trying to checkout subpath ‘%s’: " msgstr "" -#: app/flatpak-transaction.c:748 -#, c-format -msgid "Installing: %s from %s\n" +#: common/flatpak-dir.c:6775 +msgid "While trying to remove existing extra dir: " msgstr "" -#: app/flatpak-transaction.c:765 -msgid "update" +#: common/flatpak-dir.c:6786 +msgid "While trying to apply extra data: " msgstr "" -#: app/flatpak-transaction.c:774 +#: common/flatpak-dir.c:6813 #, c-format -msgid "Updating for user: %s from %s\n" +msgid "Invalid deployed ref %s: " msgstr "" -#: app/flatpak-transaction.c:776 +#: common/flatpak-dir.c:6820 #, c-format -msgid "Updating: %s from %s\n" +msgid "Invalid commit ref %s: " msgstr "" -#: app/flatpak-transaction.c:796 +#: common/flatpak-dir.c:6828 #, c-format -msgid "Now at %s.\n" +msgid "Deployed ref %s kind does not match commit (%s)" msgstr "" -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" +#: common/flatpak-dir.c:6836 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" msgstr "" -#: app/flatpak-transaction.c:820 -msgid "install bundle" +#: common/flatpak-dir.c:6844 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" msgstr "" -#: app/flatpak-transaction.c:822 +#: common/flatpak-dir.c:6850 #, c-format -msgid "Installing for user: %s from bundle %s\n" +msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: app/flatpak-transaction.c:824 +#: common/flatpak-dir.c:6856 #, c-format -msgid "Installing: %s from bundle %s\n" +msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: app/flatpak-transaction.c:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" +#: common/flatpak-dir.c:6889 +msgid "Deployed metadata does not match commit" msgstr "" -#: app/flatpak-transaction.c:841 +#: common/flatpak-dir.c:7794 #, c-format -msgid "Error: Failed to %s %s: %s\n" +msgid "This version of %s is already installed" msgstr "" -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" +#: common/flatpak-dir.c:7801 +msgid "Can't change remote during bundle install" msgstr "" -#: common/flatpak-context.c:175 +#: common/flatpak-dir.c:7968 #, c-format -msgid "Unknown share type %s, valid types are: %s" +msgid "%s branch already installed" msgstr "" -#: common/flatpak-context.c:210 -#, c-format -msgid "Unknown policy type %s, valid types are: %s" +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" msgstr "" -#: common/flatpak-context.c:248 +#: common/flatpak-dir.c:8264 #, c-format -msgid "Invalid dbus name %s\n" +msgid "Can't remove %s, it is needed for: %s" msgstr "" -#: common/flatpak-context.c:261 +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format -msgid "Unknown socket type %s, valid types are: %s" +msgid "%s branch %s is not installed" msgstr "" -#: common/flatpak-context.c:290 +#: common/flatpak-dir.c:8552 #, c-format -msgid "Unknown device type %s, valid types are: %s" +msgid "%s branch %s not installed" msgstr "" -#: common/flatpak-context.c:318 +#: common/flatpak-dir.c:8893 #, c-format -msgid "Unknown feature type %s, valid types are: %s" +msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-context.c:691 +#: common/flatpak-dir.c:9219 #, c-format msgid "" -"Unknown filesystem location %s, valid locations are: host, home, xdg-" -"*[/...], ~/dir, /dir" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." msgstr "" -#: common/flatpak-context.c:963 +#: common/flatpak-dir.c:9520 #, c-format -msgid "Invalid env format %s" +msgid "No summary or Flatpak cache available for remote %s" msgstr "" -#: common/flatpak-context.c:1103 -msgid "Share with host" +#: common/flatpak-dir.c:9716 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 -msgid "SHARE" +#: common/flatpak-dir.c:9737 +#, c-format +msgid "Nothing matches %s" msgstr "" -#: common/flatpak-context.c:1104 -msgid "Unshare with host" +#: common/flatpak-dir.c:9837 +#, c-format +msgid "Can't find ref %s%s%s%s%s" msgstr "" -#: common/flatpak-context.c:1105 -msgid "Expose socket to app" +#: common/flatpak-dir.c:9884 +#, c-format +msgid "Error searching remote %s: %s" msgstr "" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 -msgid "SOCKET" +#: common/flatpak-dir.c:9969 +#, c-format +msgid "Error searching local repository: %s" msgstr "" -#: common/flatpak-context.c:1106 -msgid "Don't expose socket to app" +#: common/flatpak-dir.c:10114 +#, c-format +msgid "%s/%s/%s not installed" msgstr "" -#: common/flatpak-context.c:1107 -msgid "Expose device to app" +#: common/flatpak-dir.c:10284 +#, c-format +msgid "Could not find installation %s" msgstr "" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 -msgid "DEVICE" +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +msgid "Invalid .flatpakref" msgstr "" -#: common/flatpak-context.c:1108 -msgid "Don't expose device to app" +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" msgstr "" -#: common/flatpak-context.c:1109 -msgid "Allow feature" +#: common/flatpak-dir.c:10771 +#, c-format +msgid "Invalid file format, no %s group" msgstr "" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 -msgid "FEATURE" +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, c-format +msgid "Invalid file format, no %s specified" msgstr "" -#: common/flatpak-context.c:1110 -msgid "Don't allow feature" +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +msgid "Invalid file format, gpg key invalid" msgstr "" -#: common/flatpak-context.c:1111 -msgid "Expose filesystem to app (:ro for read-only)" +#: common/flatpak-dir.c:10871 +#, c-format +msgid "Runtime %s, branch %s is already installed" msgstr "" -#: common/flatpak-context.c:1111 -msgid "FILESYSTEM[:ro]" +#: common/flatpak-dir.c:10872 +#, c-format +msgid "App %s, branch %s is already installed" msgstr "" -#: common/flatpak-context.c:1112 -msgid "Don't expose filesystem to app" +#: common/flatpak-dir.c:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" msgstr "" -#: common/flatpak-context.c:1112 -msgid "FILESYSTEM" +#: common/flatpak-dir.c:11250 +#, c-format +msgid "Invalid character '/' in remote name: %s" msgstr "" -#: common/flatpak-context.c:1113 -msgid "Set environment variable" +#: common/flatpak-dir.c:11255 +#, c-format +msgid "No configuration for remote %s specified" msgstr "" -#: common/flatpak-context.c:1113 -msgid "VAR=VALUE" +#: common/flatpak-dir.c:11496 +msgid "No metadata branch for OCI" msgstr "" -#: common/flatpak-context.c:1114 -msgid "Allow app to own name on the session bus" +#: common/flatpak-installation.c:751 +#, c-format +msgid "Ref %s not installed" msgstr "" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 -msgid "DBUS_NAME" +#: common/flatpak-installation.c:793 +#, c-format +msgid "App %s not installed" msgstr "" -#: common/flatpak-context.c:1115 -msgid "Allow app to talk to name on the session bus" +#: common/flatpak-installation.c:1778 +#, c-format +msgid "As requested, %s was only pulled, but not installed" msgstr "" -#: common/flatpak-context.c:1116 -msgid "Allow app to own name on the system bus" +#: common/flatpak-oci-registry.c:1679 +#, c-format +msgid "No gpg key found with ID %s (homedir: %s)" msgstr "" -#: common/flatpak-context.c:1117 -msgid "Allow app to talk to name on the system bus" +#: common/flatpak-oci-registry.c:1686 +#, c-format +msgid "Unable to lookup key ID %s: %d)" msgstr "" -#: common/flatpak-context.c:1118 -msgid "Add generic policy option" +#: common/flatpak-oci-registry.c:1694 +#, c-format +msgid "Error signing commit: %d" msgstr "" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 -msgid "SUBSYSTEM.KEY=VALUE" +#: common/flatpak-remote.c:822 +#, c-format +msgid "Bad remote name: %s" msgstr "" -#: common/flatpak-context.c:1119 -msgid "Remove generic policy option" +#: common/flatpak-remote.c:826 +msgid "No url specified" msgstr "" -#: common/flatpak-context.c:1120 -msgid "Persist home directory" +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" msgstr "" -#: common/flatpak-context.c:1120 -msgid "FILENAME" +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" msgstr "" -#. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 -msgid "Don't require a running session (no cgroups creation)" +#: common/flatpak-run.c:824 +msgid "Failed to sync with dbus proxy" msgstr "" -#: common/flatpak-dir.c:1044 +#: common/flatpak-run.c:863 #, c-format -msgid "No overrides found for %s" +msgid "Failed to determine parts from ref: %s" msgstr "" -#: common/flatpak-dir.c:1674 -#, c-format -msgid "While opening repository %s: " +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" msgstr "" -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 -msgid "Can't create deploy directory" +#: common/flatpak-run.c:1726 +msgid "Unable to allocate instance id" msgstr "" -#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 #, c-format -msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgid "Failed to open flatpak-info file: %s" msgstr "" -#: common/flatpak-dir.c:2761 +#: common/flatpak-run.c:1873 #, c-format -msgid "Invalid sha256 for extra data uri %s" +msgid "Failed to open bwrapinfo.json file: %s" msgstr "" -#: common/flatpak-dir.c:2766 -#, c-format -msgid "Empty name for extra data uri %s" +#: common/flatpak-run.c:2187 +msgid "Initialize seccomp failed" msgstr "" -#: common/flatpak-dir.c:2773 -#, c-format -msgid "Unsupported extra data uri %s" +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" msgstr "" -#: common/flatpak-dir.c:2787 -#, c-format -msgid "Failed to load local extra-data %s: %s" +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" msgstr "" -#: common/flatpak-dir.c:2790 +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 #, c-format -msgid "Wrong size for extra-data %s" +msgid "Failed to block syscall %d" msgstr "" -#: common/flatpak-dir.c:2805 -#, c-format -msgid "While downloading %s: " +#: common/flatpak-run.c:2299 +msgid "Failed to export bpf" msgstr "" -#: common/flatpak-dir.c:2812 +#: common/flatpak-run.c:2355 #, c-format -msgid "Wrong size for extra data %s" +msgid "Invalid group: %d" msgstr "" -#: common/flatpak-dir.c:2823 +#: common/flatpak-run.c:2828 #, c-format -msgid "Invalid checksum for extra data %s" +msgid "ldconfig failed, exit status %d" msgstr "" -#: common/flatpak-dir.c:2882 -msgid "Remote OCI index has no registry uri" +#: common/flatpak-run.c:2835 +msgid "Can't open generated ld.so.cache" msgstr "" -#: common/flatpak-dir.c:3100 +#: common/flatpak-run.c:2947 #, c-format -msgid "%s commit %s already installed" +msgid "Wrong number of components in runtime %s" msgstr "" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-transaction.c:1347 #, c-format -msgid "While pulling %s from remote %s: " +msgid "Warning: Problem looking for related refs: %s" msgstr "" -#: common/flatpak-dir.c:3658 +#: common/flatpak-transaction.c:1417 #, c-format -msgid "Can't find %s in remote %s" -msgstr "" - -#: 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" +msgid "The application %s requires the runtime %s which was not found" msgstr "" -#: common/flatpak-dir.c:4546 -msgid "Invalid mimetype xml file" +#: common/flatpak-transaction.c:1433 +#, c-format +msgid "The application %s requires the runtime %s which is not installed" msgstr "" -#: common/flatpak-dir.c:5089 -msgid "While getting detached metadata: " +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" msgstr "" -#: common/flatpak-dir.c:5107 -msgid "While creating extradir: " +#: common/flatpak-transaction.c:1583 +#, c-format +msgid "%s is already installed" msgstr "" -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" +#: common/flatpak-transaction.c:1586 +#, c-format +msgid "%s is already installed from remote %s" msgstr "" -#: common/flatpak-dir.c:5157 -msgid "Wrong size for extra data" +#: common/flatpak-transaction.c:1699 +#, c-format +msgid "Invalid .flatpakref: %s" msgstr "" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" +#: common/flatpak-transaction.c:1787 +#, c-format +msgid "Error updating remote metadata for '%s': %s" msgstr "" -#: common/flatpak-dir.c:5170 +#: common/flatpak-transaction.c:2025 #, c-format -msgid "While writing extra data file '%s': " +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" msgstr "" -#: common/flatpak-dir.c:5340 +#: common/flatpak-transaction.c:2035 #, c-format -msgid "apply_extra script failed, exit status %d" +msgid "Warning: Can't find %s metadata for dependencies: %s" msgstr "" -#: common/flatpak-dir.c:5419 +#: common/flatpak-transaction.c:2345 #, c-format -msgid "While trying to resolve ref %s: " +msgid "Invalid .flatpakrepo: %s" msgstr "" -#: common/flatpak-dir.c:5434 -#, c-format -msgid "%s is not available" +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" msgstr "" -#: 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 +#: common/flatpak-transaction.c:2680 #, c-format -msgid "%s branch %s already installed" +msgid "Skipping %s due to previous error" msgstr "" -#: common/flatpak-dir.c:5468 -#, c-format -msgid "Failed to read commit %s: " +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" msgstr "" -#: common/flatpak-dir.c:5488 +#: common/flatpak-utils.c:638 #, c-format -msgid "While trying to checkout %s into %s: " +msgid "Migrating %s to %s\n" msgstr "" -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 -msgid "While trying to checkout metadata subpath: " +#: common/flatpak-utils.c:644 +#, c-format +msgid "Error during migration: %s\n" msgstr "" -#: common/flatpak-dir.c:5554 -msgid "While trying to remove existing extra dir: " +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" msgstr "" -#: common/flatpak-dir.c:5565 -msgid "While trying to apply extra data: " +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" msgstr "" -#: common/flatpak-dir.c:5592 -#, c-format -msgid "Invalid deployed ref %s: " +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" msgstr "" -#: common/flatpak-dir.c:5599 +#: common/flatpak-utils.c:779 #, c-format -msgid "Invalid commit ref %s: " +msgid "Name can't start with %c" msgstr "" -#: common/flatpak-dir.c:5607 -#, c-format -msgid "Deployed ref %s kind does not match commit (%s)" +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" msgstr "" -#: common/flatpak-dir.c:5615 -#, c-format -msgid "Deployed ref %s name does not match commit (%s)" +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" msgstr "" -#: common/flatpak-dir.c:5623 +#: common/flatpak-utils.c:805 #, c-format -msgid "Deployed ref %s arch does not match commit (%s)" +msgid "Name segment can't start with %c" msgstr "" -#: common/flatpak-dir.c:5629 +#: common/flatpak-utils.c:817 #, c-format -msgid "Deployed ref %s branch does not match commit (%s)" +msgid "Name can't contain %c" msgstr "" -#: common/flatpak-dir.c:5635 -#, c-format -msgid "Deployed ref %s does not match commit (%s)" +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" msgstr "" -#: common/flatpak-dir.c:5654 -msgid "Deployed metadata does not match commit" +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-utils.c:1026 #, c-format -msgid "This version of %s is already installed" +msgid "Branch can't start with %c" msgstr "" -#: common/flatpak-dir.c:6540 -msgid "Can't change remote during bundle install" +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-utils.c:1087 #, c-format -msgid "%s branch %s is not installed" +msgid "Wrong number of components in %s" msgstr "" -#: common/flatpak-dir.c:7304 +#: common/flatpak-utils.c:1093 #, c-format -msgid "%s branch %s not installed" +msgid "%s is not application or runtime" msgstr "" -#: common/flatpak-dir.c:7628 +#: common/flatpak-utils.c:1099 #, c-format -msgid "Pruning repo failed: %s" +msgid "Invalid name %s: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-utils.c:1105 #, c-format -msgid "Multiple branches available for %s, you must specify one of: " +msgid "Invalid arch %s" msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 #, c-format -msgid "Nothing matches %s" +msgid "Invalid branch %s: %s" msgstr "" -#: common/flatpak-dir.c:8258 +#: common/flatpak-utils.c:1199 #, c-format -msgid "Can't find ref %s%s%s%s%s" +msgid "Invalid id %s: %s" msgstr "" -#: common/flatpak-dir.c:8300 -#, c-format -msgid "Error searching remote %s: %s" +#: common/flatpak-utils.c:2738 +msgid "No extra data sources" msgstr "" -#: common/flatpak-dir.c:8345 +#: common/flatpak-utils.c:3712 #, c-format -msgid "Error searching local repository: %s" +msgid "Extracting icons for component %s\n" msgstr "" -#: common/flatpak-dir.c:8471 +#: common/flatpak-utils.c:3716 #, c-format -msgid "%s %s not installed" +msgid "Error copying 64x64 icon: %s\n" msgstr "" -#: common/flatpak-dir.c:8638 +#: common/flatpak-utils.c:3721 #, c-format -msgid "Could not find installation %s" +msgid "Error copying 128x128 icon: %s\n" msgstr "" -#: common/flatpak-dir.c:9236 +#: common/flatpak-utils.c:3917 #, c-format -msgid "Runtime %s, branch %s is already installed" +msgid "%s is end-of-life, ignoring\n" msgstr "" -#: common/flatpak-dir.c:9237 +#: common/flatpak-utils.c:3926 #, c-format -msgid "App %s, branch %s is already installed" +msgid "No appstream data for %s: %s\n" msgstr "" -#: common/flatpak-dir.c:9717 -msgid "Remote title not set" +#: common/flatpak-utils.c:4744 +msgid "Invalid bundle, no ref in metadata" msgstr "" -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" msgstr "" -#: common/flatpak-dir.c:10342 +#: common/flatpak-utils.c:5062 #, c-format -msgid "No entry for %s in remote summary flatpak cache " +msgid "No ref specified for OCI image %s" msgstr "" -#: common/flatpak-run.c:1456 +#: common/flatpak-utils.c:5068 #, c-format -msgid "Failed to open flatpak-info temp file: %s" +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-utils.c:5137 #, c-format -msgid "Failed to open temp file: %s" -msgstr "" - -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" +msgid "Wrong layer checksum, expected %s, was %s" msgstr "" -#: common/flatpak-run.c:1910 +#: common/flatpak-utils.c:5648 #, c-format -msgid "Failed to open app info file: %s" -msgstr "" - -#: common/flatpak-run.c:1940 -msgid "Failed to sync with dbus proxy" +msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-run.c:2700 +#: common/flatpak-utils.c:5672 #, c-format -msgid "ldconfig failed, exit status %d" +msgid "Downloading: %s/%s" msgstr "" -#: common/flatpak-utils.c:624 +#: common/flatpak-utils.c:5693 #, c-format -msgid "Migrating %s to %s\n" +msgid "Downloading extra data: %s/%s" msgstr "" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:5698 #, c-format -msgid "Error during migration: %s\n" +msgid "Downloading files: %d/%d %s" msgstr "" -#: common/flatpak-utils.c:2988 -msgid "No extra data sources" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" msgstr "" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:5789 #, c-format -msgid "Downloading metadata: %u/(estimating) %s" +msgid "%s needs a later flatpak version (%s)" msgstr "" -#: common/flatpak-utils.c:6600 -#, c-format -msgid "Downloading: %s/%s" +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" msgstr "" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5861 #, c-format -msgid "Downloading extra data: %s/%s" +msgid "“%s” is not an unsigned number" msgstr "" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5871 #, c-format -msgid "Downloading files: %d/%d %s" +msgid "Number “%s” is out of bounds [%s, %s]" msgstr "" #. SECURITY: Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/gl.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/gl.gmo differ diff -Nru flatpak-0.11.3/po/gl.po flatpak-1.0.7/po/gl.po --- flatpak-0.11.3/po/gl.po 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/gl.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-09-26 17:32+0200\n" "Last-Translator: Fran Dieguez \n" "Language-Team: Galician \n" @@ -18,217 +18,6 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.7\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Non facer nada se o fornecedor remoto existe" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" -"LOCATION especifica o ficheiro de configuracion, non unha localización de " -"repositorio" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Activar comprobación GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Marcar o remoto como enumerado" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Estabelecer o remoto como usado polas dependencias" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Estabelecer unha nova url" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Activar o repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Actualizar os metadatos adicionais desde o ficheiro de resumo" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Desactivar a comprobación GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Marcar o reomoto como non enumerado" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Estabelecer o remoto como non usado para as dependencias" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" -"Estabelecer prioridade (1 por omisión, máis prioridade canto máis alto)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORIDADE" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Un nome bonito para usar neste repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TÍTULO" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Rama por omisión que usar neste repositorio remoto" - -#: 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 -msgid "BRANCH" -msgstr "RAMA" - -#: 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 "ID de colección" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "ID-COLECTIÓN" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Desactivar o repositorio remoto" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Engadir rexistro OCI" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "O repositorio remoto %s xa existe" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NOME - Modificar un repositorio remoto" - -#: 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: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: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: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:56 msgid "Export runtime instead of app" msgstr "Exportar o runtime no lugar do aplicativo" @@ -238,12 +27,13 @@ msgstr "Arquitectura para empaquetar" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITECTURA" @@ -251,6 +41,14 @@ msgid "Url for repo" msgstr "Url para o repo" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url para o ficheiro flatpakrepo do runtime" @@ -259,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "FICHEIRO" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Exportar imaxe oci no lugar dun paquete flatpak" @@ -268,27 +74,30 @@ msgstr "ID de chave GPG coa que asinar a imaxe OCI" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "ID-CHAVE" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "DIRECTORIO_DE_INICIO" @@ -296,12 +105,12 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "REMISIÓN" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -309,25 +118,46 @@ "LOCALIZACION NOMEFICHEIRO NOME [RAME] - Crear un paquete de ficheiro único " "desde un repositorio local" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Debe especificar a LOCALIZACION, NOMEFICHEIRO e o NOME" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Demasiados argumento" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "«%s» non é un repositorio válido" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "«%s» non é un nome válido: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "«%s» non é un nome válido para unha rama: %s" @@ -353,7 +183,7 @@ msgstr "Iniciar a compilación neste cartafol" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "DIR" @@ -361,11 +191,11 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Usar o ficheiro alternativo para os metadatos" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Matar os procesos cando o proceso pai morre" @@ -373,375 +203,430 @@ msgid "Export application homedir directory to build" msgstr "Exportar cartafol homedir do aplicativo para construír" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Rexistrar chamadas ao bus de sistema" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRECTORIO [ORDE [argumentos...]] - Construír no directorio" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "Debe especificar o DIRECTORIO" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "metadatos non válidos, sen aplicativo ou runtime" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, 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:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Non foi posíbel iniciar o aplicativo" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Directorio do repositorio de orixe" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "SRC-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Referencia do repositorio orixe" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "SRC-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Suxeito nunha liña" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "RESUMO" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Descrición completa" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "CORPO" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Actualizar a rama de appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Non actualizar o resumo" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 da chave GPG coa que asinar a remisión" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#, fuzzy +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Sobrescribir a marca de tempo da remisión" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +#, fuzzy +msgid "TIMESTAMP" +msgstr "ISO-8601-TIMESTAMP" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "Debe especificar o DST-REPO" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitectura á que exportar (debe ser compatíbel co anfitrión)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Runtime de remisión (/usr), non /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Usar un directorio alternativo para os ficheiros" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "SUBDIR" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Ficheiros a excluír" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "PATRON" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Ficheiros excluídos a incluír" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Sobrescribir a marca de tempo da remisión" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "ID de colección" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Tipo de uri non válido %s, só se admite http/https" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" "Non é posíbel atopar o nome base en %s, especifique un nome de forma " "explícita" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Non se permiten as barras no nome de datos adicionais" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Formato non válido para a suma de verificación sha256: «%s»" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Tamaños de datos adicionais de cero non admitidos" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" "LOCALIZACION DIRECTORIO [RAMA] - Crea un repositorio desde o directorio de " "construción" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "Debe especificar a LOCALIZACION OU DIRECTORIO" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, 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-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Non se especificou un nome nos metadatos" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, fuzzy, c-format msgid "Commit: %s\n" msgstr "Remisión:" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "ORDE" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Versión de Flatpak a requirir" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAIOR.MENOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Non procesar exportados" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Información de datos adicionais" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Engadir información de punto de extensión" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NOME=VARIABEL[=VALOR]" -#: app/flatpak-builtins-build-finish.c:53 -msgid "Set extension priority (only for extensions)" -msgstr "" +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Engadir información de punto de extensión" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NOME" + +#: app/flatpak-builtins-build-finish.c:57 +msgid "Set extension priority (only for extensions)" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Cambiar o sdk usado para o aplicativo" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Cambiar o «runtime» usado polo aplicativo" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "RUNTIME" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Estabelecer opción de metadatos xenérica" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CHAVE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Revogarlle os permisos de escritura ao aplicativo" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, non-allowed export filename\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Demasiados poucos elementos no argumento --extra-data %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -750,7 +635,8 @@ "Demasiados poucos elementos no argumento --metadata %s, o formato debería " "ser GRUPO=CHAVE[=VALOR]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -759,21 +645,21 @@ "Demasiados poucos elementos no argumento --extension %s, o formato debería " "ser NOME=VAR[=VALOR]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "DIRECTORIO - Finalizar un cartafol de construción" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Directorio de construción %s non inicializado" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Directorio de construción %s xa finalizado" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Por favor revise os ficheiros exportados e o metadato\n" @@ -789,142 +675,151 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importar imaxe oci no lugar de paquete flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Referencia «%s» non atopada no rexistro" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, fuzzy, c-format msgid "Importing %s (%s)\n" msgstr "Actualizando: %s desde %s\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "LOCALIZACION NOMEFICHEIRO - Importar un ficheiro empaquetado no repositorio " "local" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Arquitectura a usar" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Inicializar a variable desde o runtime nomeado" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Inicializar aplicativos desde o aplicativo nomeado" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APP" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Especique a versión para --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSION" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Incluír esta extensión base" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "EXTENSION" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "EXTENSION" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Incializar /usr con unha copia con permisos de escritura do sdk" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Especifique o tipo de construción (aplicativo, runtime, extensión)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TIPO" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Engadir unha etiqueta" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ETIQUETA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Incluír esta extensión de sdk en /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Onde almacenar o sdk (por omisión en «usr»)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Reinicializar o sdk/var" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "A extensión %s solicitada só está instalada parcialmente" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "A extensión %s solicitada non está instalada" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "DIRECTORIO NOMEAPP SDK RUNTIME [RAMA] - Inicializar un directorio para " "construír" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "Debe especificar un RUNTIME" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "«%s» non é un nome de aplicativo válido: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Directorio de construción %s xa inicializado" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Arquitectura para a que instalar" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Buscar un aplicativo cun nome específico" @@ -932,10 +827,122 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "LOCALIZACION [ID [RAMA]] - Asina un aplicativo ou runtime" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "Debe especificar a LOCALIZACION" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Non se especificou ningún id de chave de gpg" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Redireccionar este repositorio a unha URL nova" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Un nome bonito a usar para este repositorio" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TÍTULO" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Rama por omisión a usar para este repositorio" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "RAMA" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ID-COLECTIÓN" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" +"ID da colección a desplegar de forma permanente ás configuracións do remoto " +"cliente" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importa nova chave pública GPG por omisión desde o FICHEIRO" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "ID da chave GPG coa que asinar a descrición" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Xerar ficheiros delta" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Limpar obxectos non usados" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"So atravesar os pais de PROFUNDIDADE para cada remisión (por omisión: " +"-1=infinito)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "PROFUNDIDADE" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Xerando delta: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Xerando delta: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Produciuse un fallo ao xerar o delta %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Produciuse un fallo ao xerar o delta %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "LOCALIZACION - Actualizar os metadatos do repositorio" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Actualizando a rama de appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Actualizando resumo\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Total de obxectos: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Non hai obxectos alcanzábeis\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u obxectos eliminados, %s liberados\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -952,35 +959,108 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, 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 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 #, fuzzy msgid "You must specify key" msgstr "Debe especificar o APP" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NOME - Eliminar un repositorio remoto" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Arquitectura a mostrar" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "DEST=ORIX" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "Debe especificar REMOTO e REF" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Aviso: Non se puideron actualizar os metadatos adicionais para «%s»: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Aviso: Non se puideron actualizar os metadatos adicionais para «%s»: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Aviso: Non se puideron actualizar os metadatos adicionais para «%s»: %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Actualizando appstream para o remoto %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1132,206 +1212,185 @@ msgid "Can't switch uid" msgstr "Non é posíbel trocar o UID" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Mostrar instalacións do usuario" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Mostrar instalacións do sistema" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Mostrar instalacións específicas do sistema" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Mostrar referencia" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Mostrar remisión" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Mostrar orixe" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Mostrar tamaño" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Mostrar metadatos" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Mostrar só os runtimes" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Mostrar tamaño" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Mostrar extensións" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, 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-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "RUTA" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Mostrar extensións" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Mostrar as opcións de axuda" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "NOME [RAMA] - Obtén información sobre o aplicativo e/ou runtime instalado" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "Debe especificar o NOME" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "referencia non presente no orixe" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Referencia:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Arquitectura:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Rama:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Orixe:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "ID de colección" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Remisión activa:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Última remisión:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Remisión:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Localización:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Tamaño da instalación:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Subdirectorios da instalación:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Extensión:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Subdirectorios:" -#: 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 "Buscar un aplicativo dun nome específico" - -#: 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" @@ -1369,7 +1428,8 @@ msgid "Only install this subpath" msgstr "Só instalar esta subruta" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Responder si automaticamente para todas as preguntas" @@ -1378,52 +1438,26 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Este aplicativo depende dos runtimes de:\n" -" %s\n" -"Configure esta como o novo remoto «%s»" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Debe especificar o nome de ficheiro do paquete" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Non se admiten os paquetes remotos" -#: app/flatpak-builtins-install.c:338 -#, fuzzy, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"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:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Debe especificar o nome de ficheiro ou uri" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Instalando: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOCALIZACION/REMOTO [REF...] - Instalar aplicativos ou runtimes" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "Debe especificar REMOTO e REF" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostrar información adicional" @@ -1440,378 +1474,767 @@ msgid "Arch to show" msgstr "Arquitectura a mostrar" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.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:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Referencia" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Orixe" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Remisión activa" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Última remisión" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Tamaño instalado" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Opcións" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Lista os aplicativos instalados e/ou runtimes" -#: app/flatpak-builtins-list-remotes.c:40 +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Arquitectura que facer a actual" + +#: 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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Debe especificar o APP" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "Debe especificar a RAMA" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +#, fuzzy +msgid "[APP] - Override settings [for application]" +msgstr "APP - Sobrescribir as configuracións do aplicativo" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Revogarlle os permisos de escritura ao aplicativo" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Demasiados argumento" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Engadir permisos para este aplicativo" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Demasiados argumento" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Engadir permisos para este aplicativo" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Mostrar remotos desactivados" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Imprimir información sobre un repositorio" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "ID de colección" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "ID de colección" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Arquitectura a usar" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +#, fuzzy +msgid "Branch" +msgstr "Rama:" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Mostrar arquitecturas e ramas" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Remisión" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Mostrar as opcións de axuda" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Runtime:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Mostrar só os runtimes" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Runtime:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Mostrar só os runtimes" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Remisión activa" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Mostrar só os runtimes" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "APPID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Orde descoñecida «%s»" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Mostrar as opcións de axuda" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Instalado" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Información de datos adicionais" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Non facer nada se o fornecedor remoto existe" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "" +"LOCATION especifica o ficheiro de configuracion, non unha localización de " +"repositorio" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Desactivar a comprobación GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Marcar o reomoto como non enumerado" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Estabelecer o remoto como non usado para as dependencias" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "" +"Estabelecer prioridade (1 por omisión, máis prioridade canto máis alto)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORIDADE" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Un nome bonito para usar neste repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Rama por omisión que usar neste repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importar a chave GPG desde o FICHEIRO (- para stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Desactivar o repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:206 +#, 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-remote-add.c:214 +#, fuzzy +msgid "Invalid file format" +msgstr "Formato de env %s non válido" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, 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-remote-add.c:264 common/flatpak-dir.c:10703 +#, fuzzy +msgid "Invalid gpg key" +msgstr "PID %s non válido" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NOME LOCALIZACION - Engade un novo repositorio remoto" + +#: app/flatpak-builtins-remote-add.c:319 +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-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "O repositorio remoto %s xa existe" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Non se especificou unha url no ficheiro flatpakrepo" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Eliminar remoto incluso se está en uso" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NOME - Eliminar un repositorio remoto" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 +#, fuzzy +msgid "Show parent" +msgstr "Mostrar referencia" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:213 +#, fuzzy +msgid "Download size:" +msgstr "Tamaño de descarga" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 +#, fuzzy +msgid " Commit:" +msgstr "Remisión:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 msgid "Show remote details" msgstr "Mostrar información do remoto" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Mostrar remotos desactivados" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Lista os repositorios remotos" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "Nome" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Prioridade" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Mostrar arquitecturas e ramas" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Mostrar só os runtimes" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Mostrar só os aplicativos" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.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:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Limitar a esta arquitectura (* para todas)" -#: app/flatpak-builtins-ls-remote.c:96 +#: app/flatpak-builtins-remote-ls.c:101 #, fuzzy -msgid " [REMOTE] - Show available runtimes and applications" +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr " REMOTO - Mostrar os runtimes e aplicativos dispoñíbeis" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Remisión" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Tamaño de descarga" -#: 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" - -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Arquitectura que facer a actual" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Activar comprobación GPG" -#: 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-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Marcar o remoto como enumerado" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Estabelecer o remoto como usado polas dependencias" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Debe especificar a RAMA" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Estabelecer unha nova url" -#: 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-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Activar o repositorio remoto" -#: app/flatpak-builtins-override.c:54 -#, fuzzy -msgid "[APP] - Override settings [for application]" -msgstr "APP - Sobrescribir as configuracións do aplicativo" +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Actualizar os metadatos adicionais desde o ficheiro de resumo" -#: app/flatpak-builtins-repo.c:48 -#, fuzzy, c-format -msgid "Title: %s\n" -msgstr "Título" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NOME - Modificar un repositorio remoto" -#: app/flatpak-builtins-repo.c:51 -#, fuzzy, c-format -msgid "Collection ID: %s\n" -msgstr "ID de colección" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Debe especifciar o NOME do repositorio remoto" -#: app/flatpak-builtins-repo.c:54 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Default branch: %s\n" -msgstr "" +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-repo.c:57 +#: app/flatpak-builtins-remote-modify.c:214 #, c-format -msgid "Redirect URL: %s\n" +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-repo.c:60 -#, fuzzy, c-format -msgid "Redirect collection ID: %s\n" -msgstr "ID de colección" +#: app/flatpak-builtins-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Non se puido actualizar os metadatos adicionais para %s" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "GPG key hash: %s\n" +msgid "Object missing: %s.%s\n" msgstr "" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "%zd branches\n" +msgid "%s, deleting object\n" msgstr "" -#: app/flatpak-builtins-repo.c:99 -msgid "Installed" -msgstr "Instalado" - -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "Descargar" - -#: app/flatpak-builtins-repo.c:151 -msgid "Print general information about the repository" -msgstr "Imprimir a información xeral sobre o repositorio" - -#: app/flatpak-builtins-repo.c:152 -msgid "List the branches in the repository" -msgstr "Mostra as ramas no repositorio" +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Non é posíbel abrir o espazo de nomes %s: %s" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" -msgstr "Imprime os metadatos para unha rama" +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Actualizando appstream para o remoto %s\n" -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" -msgstr "LOCALIZACION - Mantemento do repositorio" +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Instalando: %s\n" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Redireccionar este repositorio a unha URL nova" +#: app/flatpak-builtins-repair.c:288 +#, fuzzy +msgid "- Repair a flatpak installation" +msgstr "Mostrar instalacións do usuario" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Un nome bonito a usar para este repositorio" +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Referencia %s despregada non válida: " -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Rama por omisión a usar para este repositorio" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -"ID da colección a desplegar de forma permanente ás configuracións do remoto " -"cliente" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importa nova chave pública GPG por omisión desde o FICHEIRO" +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" +msgstr "Limpar obxectos non usados" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "ID da chave GPG coa que asinar a descrición" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Non instalar referencias relacionadas" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Xerar ficheiros delta" +#: app/flatpak-builtins-repo.c:48 +#, fuzzy, c-format +msgid "Title: %s\n" +msgstr "Título" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Limpar obxectos non usados" +#: app/flatpak-builtins-repo.c:51 +#, fuzzy, c-format +msgid "Collection ID: %s\n" +msgstr "ID de colección" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-repo.c:54 +#, c-format +msgid "Default branch: %s\n" msgstr "" -"So atravesar os pais de PROFUNDIDADE para cada remisión (por omisión: " -"-1=infinito)" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "PROFUNDIDADE" -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Xerando delta: %s (%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Xerando delta: %s (%.10s-%.10s)\n" +#: app/flatpak-builtins-repo.c:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "ID de colección" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:73 #, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Produciuse un fallo ao xerar o delta %s (%.10s): " +msgid "GPG key hash: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-repo.c:82 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Produciuse un fallo ao xerar o delta %s (%.10s-%.10s): " +msgid "%zd branches\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "LOCALIZACION - Actualizar os metadatos do repositorio" +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" +msgstr "Instalado" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Actualizando a rama de appstream\n" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "Descargar" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Actualizando resumo\n" +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" +msgstr "Imprimir a información xeral sobre o repositorio" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Total de obxectos: %u\n" +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" +msgstr "Mostra as ramas no repositorio" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Non hai obxectos alcanzábeis\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "Imprime os metadatos para unha rama" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u obxectos eliminados, %s liberados\n" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "LOCALIZACION - Mantemento do repositorio" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Orde a executar" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Rama a usar" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Usar runtime de desenvolvemento" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Runtime a usar" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Versión do runtime a usar" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Rexistrar chamadas ao bus de accesibilidade" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Rexistrar chamadas ao bus de accesibilidade" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Non usar deltas estáticos" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Activar redirección de ficheiro" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +#, fuzzy +msgid "Run specified commit" +msgstr "Remisión activa" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Actualizar runtime asinado" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "APP [argumentos...] - Executa un aplicativo" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Arquitectura para a que instalar" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-search.c:263 #, fuzzy msgid "TEXT must be specified" msgstr "Debe especificar o NOME" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 #, fuzzy msgid "Application ID" msgstr "ID de colección" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "" -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Rama:" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "Sen remoto %s" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 #, fuzzy msgid "Description" msgstr "Descrición completa" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "Nada coincide con %s" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Arquitectura a desinstalar" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Manter referencia no repositorio local" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Non desinstalar as referencias relacionadas" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Eliminar os ficheiros incluso se está en execución" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Descativar aplicativo" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Desinstalar paquete" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REF... - Desinstalar un aplicativo" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Debe especificar cando menos unha vez a REF" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Instalando: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Arquitectura a desinstalar" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1845,47 +2268,279 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REF...] - Actualizar aplicativos ou runtimes" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" msgstr "Non hai actualizacións.\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, fuzzy msgid "Which do you want to use (0 to abort)?" msgstr "Cal desexa instalar (0 para abortar)?" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Actualizando appstream para o remoto %s\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Actualizando appstream para o remoto %s\n" -#: app/flatpak-builtins-utils.c:493 -#, fuzzy, c-format -msgid "Error updating: %s\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" msgstr "" "Produciuse un erro ao actualizar os metadatos adicionais para «%s»: %s\n" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-utils.c:553 #, c-format msgid "Remote \"%s\" not found" msgstr "" +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "O runtime requirido para %s (%s) non instalado, buscando…\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Cal desexa instalar (0 para abortar)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "O runtime requirido para %s (%s) non instalado, buscando…\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Cal desexa instalar (0 para abortar)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Configurar %s como un novo remoto «%s»" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"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-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Este aplicativo depende dos runtimes de:\n" +" %s\n" +"Configure esta como o novo remoto «%s»" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "instalar" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "actualizar" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "instalar paquete" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "instalar" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Actualizando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Actualizando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando: %s desde o paquete %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Instalando: %s desde o paquete %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Instalando: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Non hai actualizacións.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Agora en %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Aviso: fallou o %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Erro: fallou o %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Erro: fallou o %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +" Xestionar o acceso ao ficheiro" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +" Xestionar o acceso ao ficheiro" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Rexistrar chamadas ao bus de sistema" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Rexistrar chamadas ao bus de sistema" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Instalando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Instalando: %s\n" + +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "Actualizando: %s desde %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, fuzzy, c-format +msgid "Skipping: %s\n" +msgstr "Instalando: %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" + #. translators: please keep the leading space #: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" @@ -1903,33 +2558,42 @@ msgid "Uninstall an installed application or runtime" msgstr "Desinstalar un aplicativo ou runtime instalado" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Mostrar os aplicativos e/ou runtimes instalados" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Mostrar información para os aplicativos ou runtime instalados" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 #, fuzzy msgid "Configure flatpak" msgstr "Configurar remoto" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 #, fuzzy +msgid "Repair flatpak installation" +msgstr "Mostrar instalacións do usuario" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +#, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Asinar un aplicativo ou runtime" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1937,24 +2601,31 @@ "\n" " Aplicativos en execución" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Executa un aplicativo" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Sobrescribir permisos para un aplicativo" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Especifica a versión por omisión a executar" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Entrar no espazo de nomes dun aplicativo en execución" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Aplicativos en execución" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1962,24 +2633,52 @@ "\n" " Xestionar o acceso ao ficheiro" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Darlle a un aplicativo acceso a un ficheiro específico" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Revogar acceso a un ficheiro específico" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Mostrar información sobre un ficheiro específico" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Mostrar os ficheiros exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Revogarlle os permisos de escritura ao aplicativo" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Mostrar extensións" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Mostrar extensións" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1987,33 +2686,33 @@ "\n" " Xestionar os repositorios remotos" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Mostrar todos os remotos configurados" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Engadir un repositorio remoto novo (por URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modificar as propiedades dun remoto configurado" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Eliminar un remoto configurado" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Mostrar os contidos dun remoto configurado" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 #, 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2021,285 +2720,144 @@ "\n" " Construír aplicativos" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inicializar un directorio para a construción" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 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:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Rematar un directorio de construción para exportar" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exportar un directorio de construción a un repositorio" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, 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:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importar un ficheiro empaquetado" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Asinar un aplicativo ou runtime" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Actualizaar o ficheiro de resumo no repositorio" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Crear nova remisión baseada na referencia existente" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Imprimir información sobre un repositorio" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 #, 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:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Mostrar as opcións de axuda" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Imprimir información da versión e saír" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Imprimir arquitectura por omisión e saír" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Imprimir as arquitecturas compatíbeis e saír" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Imprimir os controladores gl activos e saír" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Traballar nas instalacións de usuario" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Traballar nas instalacións a nivel de sistema (por omisión)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 #, fuzzy msgid "Work on specific system-wide installation(s)" msgstr "Traballar nunha instalación a nivel de sistema específica" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NOME" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Ordes incrustadas:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Orde descoñecida «%s»" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Non se especificou ningunha orde" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "erro:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Atopado en varios remotos:\n" - -#: 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: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: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: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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Remoto %s descactivado, ignorando a actualización %s" - -#: app/flatpak-transaction.c:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s xa está instalado, omitindo\n" - -#: 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: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: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:765 -msgid "update" -msgstr "actualizar" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Agora en %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Non hai actualizacións.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "instalar paquete" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Aviso: fallou o %s %s: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "Fallaron unha ou máis operacións" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, 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-context.c:210 +#: common/flatpak-context.c:213 #, 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-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Nome de dbus %s non válido\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, 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-context.c:290 +#: common/flatpak-context.c:293 #, 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-context.c:318 +#: common/flatpak-context.c:321 #, 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-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2308,481 +2866,1004 @@ "Localización de sistema de ficheiros %s descoñecido, as localizacións " "válidas son: hos, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Formato de env %s non válido" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Compartir co anfitrión" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "COMPARTIR" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Deixar de compartir co anfitrión" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Expoñer o socket ao aplicativo" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOCKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Non expoñer o socket ao aplicativo" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Expoñer o dispositivo ao aplicativo" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Non expoñer o dispositivo ao aplicativo" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Permitir característica" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "CARACTERÍSTICA" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "No permitir característica" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Expoñer o sistema de ficheiros ao aplicativo (:ro para só lectura)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_FICHEIROS[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Non expoñer o sistema de ficheiros ao aplicativo" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SISTEMA_FICHEIROS" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Estabelecer variábel de ambiente" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VAR=VALOR" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 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-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NOME_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 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-context.c:1116 +#: common/flatpak-context.c:1211 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-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Permitir ao aplicativo falar cun nome no bus de sistema" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Engadir unha opción de normativa xenérica" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CHAVE=VALOR" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Eliminar opción de normativa xenérica" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Persistir o directorio persoal" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NOME_FICHEIRO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 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-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Ao obter %s desde o remoto %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Actualizando os metadatos adicionais desde o resumo remoto para %s\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Non é posíbel atopar %s no remoto %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Non é posíbel atopar %s no remoto %s" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Non hai caché de flatpak na descrición do remoto" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Non hai ningunha entrada para %s na caché de flatpak do resumo remoto " + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Non hai ningunha entrada para %s na caché de flatpak do resumo remoto " + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Permitir ao aplicativo posuír un nome propio no bus do sistema" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Non se atopou ningunha sobrescritura para %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s non instalado" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s non está instalado" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Ao abrir o repositorio %s: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Remisión a despregar" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Non é posíbel atopar %s no remoto %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Non é posíbel atopar %s no remoto %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" 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:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Suma de verificación non válida para os datos adicinais %s" + +#: common/flatpak-dir.c:3964 #, 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 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "URI de datos adicinais %s non admitido" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Tamaño dos datos adicinais incorrecto %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Ao descargar %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Tamaño dos datos adicinais %s incorrecto" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, 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 +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" msgstr "" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, 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 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Ao obter %s desde o remoto %s: " -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Nada coincide con %s" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Non é posíbel atopar %s no remoto %s" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" + +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Non hai momoria dabondo" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Produciuse un fallo ao ler o ficheiro exportado" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Produciuse un erro ao ler o ficheiro xml de mimetype" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Ficheiro xml de mimetype non válido" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Mentres se obtiñan os metadatos desanexados: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Mentres se obtiñan os metadatos desanexados: " + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Suma de verificación non válida para os datos adicinais" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Ao escribir o ficheiro de datos adicionais «%s»: " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Mentres se obtiñan os metadatos desanexados: " + +#: common/flatpak-dir.c:6557 #, 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 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Ao tentar resolver a referencia %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s rama %s xa instalado" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Produciuse un fallo ao ler a remisión %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Ao tentar obter a subruta de metadatos: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Ao tentar obter %s en %s: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Ao tentar eliminar o directorio adicinal existente: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Ao tentar aplicar os datos adicionais: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Referencia %s despregada non válida: " -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Referencia de remisión %s non válida: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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 +#: common/flatpak-dir.c:6836 #, 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 +#: common/flatpak-dir.c:6844 #, 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 +#: common/flatpak-dir.c:6850 #, 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 +#: common/flatpak-dir.c:6856 #, 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 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Os metadatos despregados non coinciden coa remisión" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 +#, c-format +msgid "This version of %s is already installed" +msgstr "Esta versión de %s xa está instalada" + +#: common/flatpak-dir.c:7801 +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:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s rama %s xa instalado" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 #, 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" +msgid "Can't remove %s, it is needed for: %s" +msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s rama %s non está instalado" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s rama %s non instalado" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Non hai caché de flatpak na descrición do remoto" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Nada coincide con %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, c-format msgid "Error searching remote %s: %s" msgstr "Produciuse un erro ao buscar o remoto %s: %s" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, 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" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "%s %s non está instalado" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Non foi posíbel atopar a instalación %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "PID %s non válido" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Formato de env %s non válido" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Formato de env %s non válido" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Formato de env %s non válido" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Runtime %s, rama %s xa está instalado" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: 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:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Non é posíbel atopar %s no remoto %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, 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 " +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Imprime os metadatos para unha rama" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s non instalado" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s non instalado" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "A extensión %s solicitada só está instalada parcialmente" -#: common/flatpak-run.c:1456 +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Produciuse un fallo ao abrir o ficheiro temporal flatpak-info: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Produciuse un fallo ao abrir o ficheiro temporal: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: 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-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Produciuse un erro ao buscar o remoto %s: %s" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Sen remoto %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Non se especificou ningunha orde" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "" "Produciuse un fallo ao abrir o ficheiro de información de aplicativo: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Non foi posíbel crear a tubería de sincronización" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Procuciuse un fallo ao sincronizarse co proxi de dbus" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Produciuse un fallo ao abrir o ficheiro temporal: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Non foi posíbel crear a tubería de sincronización" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Produciuse un fallo ao abrir o ficheiro temporal flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Produciuse un fallo ao abrir o ficheiro temporal flatpak-info: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Inicializar aplicativos desde o aplicativo nomeado" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Produciuse un fallo ao escribir no ficheiro temporal" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Erro: fallou o %s %s: %s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Produciuse un fallo ao ler o ficheiro exportado" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "PID %s non válido" + +#: common/flatpak-run.c:2828 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "apply_extra script failed, estado de saída %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Non é posíbel abrir o espazo de nomes %s: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Demasiados argumento" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Aviso: Problema ao buscar por referencias relacionadas: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "O aplicativo %s rama %s non está instalado" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "O aplicativo %s rama %s non está instalado" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Remoto %s descactivado, ignorando a actualización %s" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s remisión %s xa instalado" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s remisión %s xa instalado" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Referencia de remisión %s non válida: " + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "" +"Produciuse un erro ao actualizar os metadatos adicionais para «%s»: %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "" +"Aviso: Non se puideron actualizar os metadatos adicionais para «%s»: %s\n" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "PID %s non válido" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, fuzzy, c-format msgid "Migrating %s to %s\n" msgstr "Actualizando: %s desde %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, fuzzy, c-format msgid "Error during migration: %s\n" msgstr "Produciuse un erro ao buscar o remoto %s: %s" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Demasiados argumento" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Asinar un aplicativo ou runtime" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Nome de dbus %s non válido\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "PID %s non válido" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "«%s» non é un nome válido para unha rama: %s" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "PID %s non válido" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Non hai orixes de datos adicionais" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Produciuse un erro ao buscar o remoto %s: %s" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Produciuse un erro ao buscar o remoto %s: %s" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Actualizando appstream para o remoto %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Suma de verificación non válida para os datos adicinais" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" msgstr "Ao descargar %s: " -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" msgstr "Non hai orixes de datos adicionais" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s precisa unha versión de flatpak posterior (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2902,12 +3983,49 @@ msgid "Update appstream" msgstr "Actualizar appstream" -#~ msgid "No remote %s" -#~ msgstr "Sen remoto %s" +#, fuzzy +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "ID de colección" + +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "SHA256 non válido para o uri de datos adicionais %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "SHA256 non válido para os datos adicionais" + +#~ msgid "Add OCI registry" +#~ msgstr "Engadir rexistro OCI" + +#~ msgid "Installing: %s\n" +#~ msgstr "Instalando: %s\n" #, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Mostrar instalacións do usuario" +#~ msgid "Found in remote %s\n" +#~ msgstr "Atopado en varios remotos:\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Atopado no remoto %s, desexa instalalo?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Atopado en varios remotos:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s xa está instalado, omitindo\n" + +#~ msgid "One or more operations failed" +#~ msgstr "Fallaron unha ou máis operacións" + +#~ msgid "No ref information available in repository" +#~ msgstr "Non hai información dispoñíbel para a referencia no repositorio" + +#~ msgid "Remote title not set" +#~ msgstr "Título do repositorio remoto non está estabelecido" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Rama por omisión do repositorio remoto non estabelecida" #, fuzzy #~ msgid "Search only system-wide installations" @@ -2922,6 +4040,3 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Produciuse un fallo ao desligar o ficheiro temporal" - -#~ msgid "Failed to write to temporary file" -#~ msgstr "Produciuse un fallo ao escribir no ficheiro temporal" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/hu.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/hu.gmo differ diff -Nru flatpak-0.11.3/po/hu.po flatpak-1.0.7/po/hu.po --- flatpak-0.11.3/po/hu.po 2018-02-19 13:20:13.000000000 +0000 +++ flatpak-1.0.7/po/hu.po 2019-02-11 12:42:42.000000000 +0000 @@ -1,229 +1,23 @@ # 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: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2018-01-26 15:02+0100\n" -"Last-Translator: Balázs Meskó \n" +"POT-Creation-Date: 2019-02-11 13:42+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" "MIME-Version: 1.0\n" "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.3\n" - -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Ne tegyen semmit, ha a megadott távoli létezik" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "A HELY egy beállítófájlt határoz meg, nem a tároló helyét" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "GPG ellenőrzés engedélyezése" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "A távoli megjelölése felsorolásként" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "A távoli megjelölése függőségekhez használtként" - -#: app/flatpak-builtins-add-remote.c:66 -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: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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "A távoli engedélyezése" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "További metaadatok frissítése az összegzőfájlból" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "GPG ellenőrzés letiltása" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "A távoli megjelölése nem felsorolandóként" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "A távoli megjelölése függőségekhez nem használtként" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" -"Prioritás beállítása (alapértelmezetten 1, a magasabb nagyobb prioritású)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITÁS" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Egy szép, ehhez a távolihoz használandó név" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "CÍM" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Ehhez a tárolóhoz használandó alapértelmezett ág" - -#: 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 -msgid "BRANCH" -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 "Gyűjteményazonosító" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "A távoli letiltása" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "OCI regisztrációs adatbázis hozzáadása" - -#: 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: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: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: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: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: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:344 -#: app/flatpak-builtins-build-export.c:692 -#, c-format -msgid "‘%s’ is not a valid collection ID: %s" -msgstr "A(z) „%s” nem érvényes gyűjteményazonosító: %s" - -#: app/flatpak-builtins-add-remote.c:348 -msgid "GPG verification is required if collections are enabled" -msgstr "GPG ellenőrzés szükséges, ha a gyűjtemények engedélyezettek" - -#. Do nothing -#: 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:371 -msgid "No url specified in flatpakrepo file" -msgstr "Nincs URL megadva a flatpaktároló fájlban" - -#: app/flatpak-builtins-add-remote.c:415 -#, c-format -msgid "Warning: Could not update extra metadata for '%s': %s\n" -msgstr "" -"Figyelmeztetése Nem sikerült frissíteni a(z) %s további metaadatait: %s\n" - -#: 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:474 -msgid "Remote NAME must be specified" -msgstr "A távoli NÉV megadása kötelező" - -#: 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: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:489 -#, c-format -msgid "Could not update extra metadata for %s" -msgstr "Nem sikerült frissíteni a(z) %s további metaadatait" +"X-Generator: Lokalize 2.0\n" #: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" @@ -234,12 +28,13 @@ msgstr "Csomagolás ezen architektúrához" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTÚRA" @@ -247,6 +42,14 @@ msgid "Url for repo" msgstr "URL a tárolóhoz" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "URL a futtatókörnyezet flatpaktároló fájlhoz" @@ -255,6 +58,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "FÁJL" + #: 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" @@ -264,64 +75,88 @@ msgstr "GPG kulcsazonosító az OCI-lemezkép aláírásához" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "KULCSAZONOSÍTÓ" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "SAJÁTKÖNYVTÁR" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "KOMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 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:458 +#: app/flatpak-builtins-build-bundle.c:556 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: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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Túl sok argumentum" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "A(z) „%s” nem érvényes tároló" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, 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:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "A(z) „%s” nem érvényes ágnév: %s" @@ -347,7 +182,7 @@ msgstr "Összeállítás indítása ebben a könyvtárban" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "KÖNYVTÁR" @@ -355,11 +190,11 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Alternatív fájl használata a metaadatokhoz" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Folyamatok kilövése, ha a szülőfolyamat véget ér" @@ -367,377 +202,432 @@ msgid "Export application homedir directory to build" msgstr "Az alkalmazás saját könyvtárának exportálása az összeállításba" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Rendszerbusz-hívások naplózása" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 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:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "A KÖNYVTÁR megadása kötelező" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "a metaadat érvénytelen, nem alkalmazás vagy futtatókörnyezet" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "Nincs %s illeszkedésű kiterjesztéspont ebben: %s" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, 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:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Nem indítható el az alkalmazás" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Forrástároló könyvtár" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "FORRÁS-TÁROLÓ" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Forrástároló hivatkozás" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "FORRÁS-HIVATKOZÁS" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Egysoros tárgy" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "TÁRGY" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Teljes leírás" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TÖRZS" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Az AppStream ág frissítése" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Ne frissítse az összegzést" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "GPG kulcsazonosító a kommit aláírásához" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#, fuzzy +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "A kommit időbélyegének felülírása" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +#, fuzzy +msgid "TIMESTAMP" +msgstr "ISO-8601-IDŐBÉLYEG" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "A CÉL-TÁROLÓ megadása kötelező" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: nincs változás\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Architektúra az exportáláshoz (a gazdával kompatibilisnek kell lennie)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Futtatókörnyezet kommitolása (/usr), a /app helyett" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Alternatív könyvtár használata a fájlokhoz" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "ALKÖNYVTÁR" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Kizárandó fájlok" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "MINTA" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Felvenni kívánt kizárt fájlok" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" 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:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "Gyűjteményazonosító" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, 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 +#: app/flatpak-builtins-build-export.c:353 #, 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 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, 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 +#: app/flatpak-builtins-build-export.c:389 #, 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 +#: app/flatpak-builtins-build-export.c:417 #, 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 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Érvénytelen URI-típus (%s), csak a http/https támogatott" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" "Nem sikerült megtalálni az alapnevet ebben: %s, pontosan adja meg a nevet" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "A perjelek nem engedélyezettek a további adatok névében" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Érvénytelen formátum az sha256 ellenőrzőösszegnél: „%s”" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Nulla méretű további adatméret nem támogatott" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "HELY KÖNYVTÁR [ÁG] - Tároló létrehozása egy összeállítási könyvtárból" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "A HELY és KÖNYVTÁR megadása kötelező" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "A(z) „%s” nem érvényes gyűjteményazonosító: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Nincs név megadva a metaadatokban" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Kommit: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Metaadatok összesen: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Kiírt metaadatok: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Tartalom összesen: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Kiírt tartalom: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Kiírt tartalom bájtokban:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "PARANCS" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "A szükséges flatpak-verzió" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "FŐ.KISEBB.APRÓ" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Ne dolgozza fel az exportokat" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "További adatinformációk" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Kiterjesztéspont-információk hozzáadása" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NÉV=VÁLTOZÓ[=ÉRTÉK]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Kiterjesztéspont-információk hozzáadása" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NÉV" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Kiterjesztés prioritás beállítása (csak kiterjesztésekhez)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Az alkalmazáshoz használt sdk megváltoztatása" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Az alkalmazáshoz használt futtatókörnyezet megváltoztatása" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "FUTTATÓKÖRNYEZET" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Általános metaadat lehetőség beállítása" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 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" +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Az alkalmazás írási jogosultságának visszavonása" + +#: app/flatpak-builtins-build-finish.c:155 +#, fuzzy, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "A(z) %s nem kerül exportálásra, hibás előtag\n" + +#: app/flatpak-builtins-build-finish.c:163 +#, fuzzy, c-format +msgid "Not exporting %s, non-allowed export filename\n" msgstr "A(z) %s nem kerül exportálásra, hibás előtag\n" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "%s exportálása\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 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 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "A(z) %s használata parancsként\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Nem található futtatható állomány\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Túl kevés elem a(z) %s --extra-data argumentumban" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -746,7 +636,8 @@ "Túl kevés elem a(z) %s --metadata argumentumban, a formátumnak " "CSOPORT=KULCS[=ÉRTÉK] alakban kell lennie" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -755,21 +646,21 @@ "Túl kevés elem a(z) %s --extension argumentumban, a formátumnak " "NÉV=VÁLTOZÓ[=ÉRTÉK] alakban kell lennie" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "KÖNYVTÁR - Egy összeállítási könyvtár befejezése" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "A(z) „%s” összeállítási könyvtár nincs előkészítve" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "A(z) „%s” összeállítási könyvtár már be lett fejezve" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Nézze át az exportált fájlokat és a metaadatokat\n" @@ -785,143 +676,152 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Egy OCI-lemezkép importálása flatpak csomag helyett" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "A(z) „%s” hivatkozás nem található a regisztrációs adatbázisban" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 msgid "Multiple images in registry, specify a ref with --ref" 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "%s importálása (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 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" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Használandó architektúra" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Változó előkészítése egy elnevezett futtatókörnyezetből" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Alkalmazások előkészítése egy elnevezett alkalmazásból" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "ALKALMAZÁS" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Verzió megadása a --base kapcsolóhoz" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERZIÓ" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Ezen alapkiterjesztés felvétele" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "KITERJESZTÉS" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "KITERJESZTÉS" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Az /usr előkészítése az sdk írható másolatával" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "" "Az összeállítás-típus megadása (alkalmazás, futtatókörnyezet, kiterjesztés)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TÍPUS" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Címke hozzáadása" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "CÍMKE" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Ezen sdk kiterjesztés felvétele az /usr könyvtárba" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Hol tárolja az sdk-t (alapértelmezetten „usr”)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Az sdk vagy változó újra előkészítése" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "A kért %s kiterjesztés csak részlegesen van telepítve" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "A szükséges %s kiterjesztés nincs telepítve" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "KÖNYVTÁR ALKALMAZÁSNÉV SDK FUTTATÓKÖRNYEZET [ÁG] - Könyvtár előkészítése az " "összeállításhoz" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "A FUTTATÓKÖRNYEZET megadása kötelező" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "A(z) „%s” nem érvényes alkalmazásnév: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format 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-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Telepítés ezen architektúrára" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "A megadott nevű futtatókörnyezet keresése" @@ -929,10 +829,122 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "HELY [AZONOSÍTÓ [ÁG]] - Egy alkalmazás vagy futtatókörnyezet aláírása" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "A HELY megadása kötelező" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Nincsenek megadva GPG kulcsazonosítók" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Ezen tároló átirányítása egy új URL-re" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Egy szép, ehhez a tárolóhoz használandó név" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "CÍM" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Ehhez a tárolóhoz használandó alapértelmezett ág" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "ÁG" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "GYŰJTEMÉNY-AZONOSÍTÓ" + +#: app/flatpak-builtins-build-update-repo.c:56 +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-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Új alapértelmezett GPG nyilvános kulcs importálása FÁJLBÓL" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "GPG kulcsazonosító az összegzés aláírásához" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Delta fájlok előállítása" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Nem használt objektumok törlése" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Csak MÉLYSÉG szülők bejárása az egyes kommitoknál (alapértelmezett: -1 = " +"végtelen)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "MÉLYSÉG" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Delta előállítása: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Delta előállítása: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Nem sikerült a(z) %s (%.10s) delta előállítása: " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Nem sikerült a(z) %s (%.10s-%.10s) delta előállítása: " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "HELY - Tároló metaadatainak frissítése" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Az AppStream ág frissítése\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Összegzés frissítése\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Objektumok összesen: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Nincsenek elérhetetlen objektumok\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u objektum törölve, %s felszabadítva\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "A konfigurációs kulcsok és értékek listája" @@ -949,34 +961,105 @@ msgid "Unset configuration for KEY" msgstr "KULCS konfigurációs értékének eltávolítása" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, 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 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Meg kell adnia egy kulcsot" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 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 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[KULCS [ÉRTÉK]] – Konfiguráció kezelése" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NÉV - Egy távoli tároló törlése" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Megjelenítendő architektúra" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "CÉL=FORRÁS" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "A TÁVOLI és HIVATKOZÁS megadása kötelező" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, fuzzy, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "A(z) „%s” távoli tároló több telepítésben is megtalálható:\n" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Figyelmeztetése Nem sikerült frissíteni a(z) %s további metaadatait: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Figyelmeztetés: a függőségek nem találhatóak: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "Figyelmeztetés: a függőségek nem találhatóak: %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Az appstream adatok frissítése a(z) %s távoli tárolóhoz\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1128,206 +1211,181 @@ msgid "Can't switch uid" msgstr "Nem állítható át az UID" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Felhasználói telepítések megjelenítése" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Rendszerszintű telepítések megjelenítése" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Bizonyos rendszerszintű telepítések megjelenítése" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Hivatkozás megjelenítése" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Kommit megjelenítése" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Eredet megjelenítése" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Méret megjelenítése" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Metaadatok megjelenítése" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 #, fuzzy -msgid "Show permissions" -msgstr "Kiterjesztések megjelenítése" +msgid "Show runtime" +msgstr "Csak futtatókörnyezetek megjelenítése" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 #, fuzzy +msgid "Show sdk" +msgstr "Méret megjelenítése" + +#: app/flatpak-builtins-info.c:65 +msgid "Show permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Fájlhozzáférés kezelése" +msgstr "Fájlhozzáférés lekérése" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "ÚTVONAL" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Kiterjesztések megjelenítése" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Súgólehetőségek megjelenítése" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app 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:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "A NÉV megadása kötelező" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "a hivatkozás nincs jelen az eredetben" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Figyelmeztetés: a kommitnak nincs flatpak metaadata\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Hivatkozás:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "Azonosító:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Architektúra:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Ág:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Eredet:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 -#, fuzzy +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" -msgstr "Gyűjteményazonosító" +msgstr "Gyűjteményazonosító:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "Dátum:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "Tárgy:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Aktív kommit:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Legutolsó kommit:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Kommit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alternatív azonosító:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "Szülő:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Hely:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Telepített méret:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Futtatókörnyezet:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Telepített alkönyvtárak:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Kiterjesztés:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Alútvonalak:" -#: 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-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-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 "" - #: 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" @@ -1366,7 +1424,8 @@ msgid "Only install this subpath" msgstr "Csak ezen alútvonal telepítése" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatikusan válaszoljon igennel minden kérdésre" @@ -1374,55 +1433,29 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Ez az alkalmazás a következőkből való futtatókörnyezetektől függ:\n" -" %s\n" -"Ennek beállítása mint új távoli „%s”" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "A csomagfájlnév megadása kötelező" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "A távoli csomagok nem támogatottak" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"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:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "A fájlnév vagy URI megadása kötelező" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Telepítés: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 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-list.c:43 -msgid "Show extra information" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "A TÁVOLI és HIVATKOZÁS megadása kötelező" + +#: app/flatpak-builtins-list.c:43 +msgid "Show extra information" msgstr "További információk megjelenítése" #: app/flatpak-builtins-list.c:44 @@ -1437,125 +1470,561 @@ msgid "Arch to show" msgstr "Megjelenítendő architektúra" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.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:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Hivatkozás" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Eredet" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Aktív kommit" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Legutolsó kommit" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Telepített méret" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Beállítások" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 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:40 +#: 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: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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Az ALKALMAZÁS megadása kötelező" + +#: 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: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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[ALKALMAZÁS] – Beállítások felülbírálása az alkalmazáshoz" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +#, fuzzy +msgid "Object" +msgstr "Tárgy:" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Az alkalmazás írási jogosultságának visszavonása" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Túl sok argumentum" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Jogosultságok hozzáadása ehhez az alkalmazáshoz" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Túl sok argumentum" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Jogosultságok hozzáadása ehhez az alkalmazáshoz" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Letiltott távoliak megjelenítése" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Információk kiírása egy tárolóról" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Alkalmazásazonosító" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Alkalmazásazonosító" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Használandó architektúra" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Ág" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Architektúrák és ágak megjelenítése" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Kommit" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Súgólehetőségek megjelenítése" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Futtatókörnyezet:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Csak futtatókörnyezetek megjelenítése" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Futtatókörnyezet:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Csak futtatókörnyezetek megjelenítése" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Aktív kommit" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Csak futtatókörnyezetek megjelenítése" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "ALKALMAZÁSAZONOSÍTÓ" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Ismeretlen „%s” parancs" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Súgólehetőségek megjelenítése" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Telepítve" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "További adatinformációk" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Ne tegyen semmit, ha a megadott távoli létezik" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "A HELY egy beállítófájlt határoz meg, nem a tároló helyét" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "GPG ellenőrzés letiltása" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "A távoli megjelölése nem felsorolandóként" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "A távoli megjelölése függőségekhez nem használtként" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "" +"Prioritás beállítása (alapértelmezetten 1, a magasabb nagyobb prioritású)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITÁS" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Egy szép, ehhez a távolihoz használandó név" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Ehhez a tárolóhoz használandó alapértelmezett ág" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +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-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "A távoli letiltása" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, 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-remote-add.c:206 +#, 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-remote-add.c:214 +msgid "Invalid file format" +msgstr "Érvénytelen fájlformátum" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Érvénytelen verzió (%s), csak egy támogatott" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Érvénytelen gpg kulcs" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NÉV HELY - Egy távoli tároló hozzáadása" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "GPG ellenőrzés szükséges, ha a gyűjtemények engedélyezettek" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "A távoli %s már létezik" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Nincs URL megadva a flatpaktároló fájlban" + +#: app/flatpak-builtins-remote-add.c:383 +#, c-format +msgid "Warning: Could not update extra metadata for '%s': %s\n" +msgstr "" +"Figyelmeztetése Nem sikerült frissíteni a(z) %s további metaadatait: %s\n" + +#: app/flatpak-builtins-remote-delete.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-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NÉV - Egy távoli tároló törlése" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Kommit, amelyhez meg kell jeleníteni az információt" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Napló megjelenítése" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Szülő megjelenítése" + +#: app/flatpak-builtins-remote-info.c:126 +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-remote-info.c:213 +msgid "Download size:" +msgstr "Letöltési méret:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Előzmények:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Tárgy:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Dátum:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Kommit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, 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-remote-list.c:40 msgid "Show remote details" msgstr "Távoli részleteinek megjelenítése" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Letiltott távoliak megjelenítése" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Távoli tárolók felsorolása" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "Név" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Cím" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Prioritás" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Architektúrák és ágak megjelenítése" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Csak futtatókörnyezetek megjelenítése" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Csak alkalmazások megjelenítése" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.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:49 +#: app/flatpak-builtins-remote-ls.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:96 -msgid " [REMOTE] - Show available runtimes and applications" +#: app/flatpak-builtins-remote-ls.c:101 +#, fuzzy +msgid " [REMOTE or URI] - 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:177 -msgid "Commit" -msgstr "Kommit" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Letöltési méret" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "Nem érhetőek el hivatkozásinformációk a tárolóban" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "GPG ellenőrzés engedélyezése" -#: 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-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "A távoli megjelölése felsorolásként" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "A távoli megjelölése függőségekhez használtként" -#: 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-remote-modify.c:57 +msgid "Set a new url" +msgstr "Új URL beállítása" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Az ÁG megadása kötelező" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "A távoli engedélyezése" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "További metaadatok frissítése az összegzőfájlból" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NÉV - Egy távoli tároló módosítása" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "A távoli NÉV megadása kötelező" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "A(z) %s alkalmazás, %s ág nincs telepítve" +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-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-remote-modify.c:214 +#, 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-remote-modify.c:215 +#, 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-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Nem lehet betölteni a(z) %s fájlt: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Az appstream adatok frissítése a(z) %s távoli tárolóhoz\n" + +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Eltávolítás: %s\n" + +#: app/flatpak-builtins-repair.c:288 +#, fuzzy +msgid "- Repair a flatpak installation" +msgstr "Felhasználói telepítések megjelenítése" + +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Érvénytelen %s üzembe állított hivatkozás:" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" +msgstr "Nem használt objektumok törlése" + +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Ne telepítse a kapcsolódó hivatkozásokat" #: app/flatpak-builtins-repo.c:48 #, c-format @@ -1577,233 +2046,182 @@ 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:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "Gyűjteményazonosító: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" msgstr "GPG kulcs ujjlenyomat: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" msgstr "%zd ág\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Telepítve" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Letöltés" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Általános információk kiírása a tárolóról" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "A tárolóban lévő ágak felsorolása" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Egy ág metaadatainak kiírása" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "HELY - Tároló karbantartása" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Ezen tároló átirányítása egy új URL-re" - -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Egy szép, ehhez a tárolóhoz használandó név" - -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -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" -msgstr "Új alapértelmezett GPG nyilvános kulcs importálása FÁJLBÓL" - -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "GPG kulcsazonosító az összegzés aláírásához" - -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Delta fájlok előállítása" - -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Nem használt objektumok törlése" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" -"Csak MÉLYSÉG szülők bejárása az egyes kommitoknál (alapértelmezett: -1 = " -"végtelen)" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "MÉLYSÉG" - -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Delta előállítása: %s (%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Delta előállítása: %s (%.10s-%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:203 -#, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Nem sikerült a(z) %s (%.10s) delta előállítása: " - -#: app/flatpak-builtins-repo-update.c:206 -#, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Nem sikerült a(z) %s (%.10s-%.10s) delta előállítása: " - -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "HELY - Tároló metaadatainak frissítése" - -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Az AppStream ág frissítése\n" - -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Összegzés frissítése\n" - -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Objektumok összesen: %u\n" - -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Nincsenek elérhetetlen objektumok\n" - -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u objektum törölve, %s felszabadítva\n" - -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Futtatandó parancs" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Használandó ág" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Fejlesztői futtatókörnyezet használata" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Használandó futtatókörnyezet" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Használandó futtatókörnyezet-verzió" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Akadálymentesítési busz hívások naplózása" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Akadálymentesítési busz hívások naplózása" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Ne használjon statikus deltákat" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Fájltovábbítás engedélyezése" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +#, fuzzy +msgid "Run specified commit" +msgstr "Aktív kommit" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Aláírt futtatókörnyezet frissítése" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "ALKALMAZÁS [argumentumok…] - Alkalmazás futtatása" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Telepítés ezen architektúrára" + +#: app/flatpak-builtins-search.c:254 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 +#: app/flatpak-builtins-search.c:263 msgid "TEXT must be specified" msgstr "A SZÖVEG megadása kötelező" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 msgid "Application ID" msgstr "Alkalmazásazonosító" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "Verzió" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" -msgstr "Ág" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 msgid "Remotes" msgstr "Távoli tárolók" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 msgid "Description" msgstr "Leírás" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 msgid "No matches found" msgstr "Nincs találat" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Eltávolítandó architektúra" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Hivatkozás megtartása a helyi tárolóban" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Ne távolítsa el a kapcsolódó hivatkozásokat" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Fájlok eltávolítása akkor is, ha futnak" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Alkalmazás eltávolítása" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Futtatókörnyezet eltávolítása" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "HIVATKOZÁS… - Alkalmazás eltávolítása" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Legalább egy HIVATKOZÁS megadása kötelező" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, c-format -msgid "Uninstalling: %s\n" -msgstr "Eltávolítás: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Eltávolítandó architektúra" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1837,45 +2255,273 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[HIVATKOZÁS…] – Alkalmazások vagy futtatókörnyezetek frissítése" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 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:367 +#, 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:374 +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:376 +#, 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:488 app/flatpak-builtins-utils.c:491 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s" +msgstr "Az appstream adatok frissítése a felhasználó %s távoli tárolójához\n" + +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 +#, fuzzy, c-format +msgid "Updating appstream data for remote %s" +msgstr "Az appstream adatok frissítése a(z) %s távoli tárolóhoz\n" + +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" +msgstr "Hiba a frissítéskor: %s\n" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "A(z) „%s” távoli tároló nem található" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "A(z) %s (%s) szükséges futtatókörnyezete nincs telepítve, keresés…\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Melyiket szeretné telepíteni (0 a megszakításhoz)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "A(z) %s (%s) szükséges futtatókörnyezete nincs telepítve, keresés…\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Melyiket szeretné telepíteni (0 a megszakításhoz)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "A(z) %s beállítása mint új távoli „%s”" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"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-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Ez az alkalmazás a következőkből való futtatókörnyezetektől függ:\n" +" %s\n" +"Ennek beállítása mint új távoli „%s”" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "telepítés" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "frissítés" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "csomag telepítése" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "telepítés" + +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Telepítés a felhasználónak: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Telepítés: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Frissítés a felhasználónak: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Frissítés: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, 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-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Telepítés: %s ebből a csomagból: %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Telepítés a felhasználónak: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Eltávolítás: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Nincsenek frissítések.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Most: %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Figyelmeztetés: %s %s sikertelen: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Hiba: %s %s sikertelen: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Hiba: %s %s sikertelen: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "Fájlhozzáférés lekérése" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "Fájlhozzáférés lekérése" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Rendszerbusz-hívások naplózása" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Rendszerbusz-hívások naplózása" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" -#: 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-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" -#: app/flatpak-builtins-utils.c:374 -#, c-format -msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" 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-cli-transaction.c:536 +msgid "tags" +msgstr "" -#: 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-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Telepítés: %s innen: %s\n" -#: app/flatpak-builtins-utils.c:493 -#, c-format -msgid "Error updating: %s\n" -msgstr "Hiba a frissítéskor: %s\n" +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Telepítés: %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ó" +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "Frissítés: %s innen: %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, fuzzy, c-format +msgid "Skipping: %s\n" +msgstr "%s exportálása\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1894,21 +2540,30 @@ msgid "Uninstall an installed application or runtime" msgstr "Telepített alkalmazás vagy futtatókörnyezet eltávolítása" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Telepített alkalmazások és/vagy futtatókörnyezetek felsorolása" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 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 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Flatpak beállítása" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +#, fuzzy +msgid "Repair flatpak installation" +msgstr "Felhasználói telepítések megjelenítése" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" @@ -1916,12 +2571,12 @@ "\n" "Alkalmazás és futtatókörnyezet keresése" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 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 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1929,24 +2584,31 @@ "\n" " Futó alkalmazások" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Alkalmazás futtatása" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Jogosultságok felülbírálása egy alkalmazásnál" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Alapértelmezett verzió megadása a futtatáshoz" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Futó alkalmazás névterének megadása" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Futó alkalmazások" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1954,24 +2616,52 @@ "\n" " Fájlhozzáférés kezelése" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 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:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Hozzáférés visszavonása egy bizonyos fájlhoz" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Információk megjelenítése egy bizonyos fájlról" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Exportált fájlok felsorolása" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Az alkalmazás írási jogosultságának visszavonása" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Jogosultságok megjelenítése" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Jogosultságok megjelenítése" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1979,33 +2669,33 @@ "\n" " Távoli tárolók kezelése" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Az összes beállított távoli felsorolása" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Új távoli tároló hozzáadása (URL alapján)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Beállított távoli tulajdonságainak módosítása" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Beállított távoli törlése" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Beállított távoli tartalmának felsorolása" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2013,287 +2703,144 @@ "\n" " Alkalmazások összeállítása" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Könyvtár előkészítése az összeállításhoz" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 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:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Összeállítási könyvtár befejezése exportáláshoz" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 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:104 -#, fuzzy +#: app/flatpak-main.c:116 msgid "Create a bundle file from a ref in a local repository" -msgstr "Csomagfájl létrehozása összeállítási könyvtárból" +msgstr "Csomagfájl létrehozása egy hivatkozásból egy helyi tárolóban" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Csomagfájl importálása" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Alkalmazás vagy futtatókörnyezet aláírása" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Az összegzőfájl frissítése egy tárolóban" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Új kommit létrehozása meglévő hivatkozás alapján" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Információk kiírása egy tárolóról" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 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, -vv a több " "részlethez" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Súgólehetőségek megjelenítése" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Verzióinformációk kiírása és kilépés" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Alapértelmezett architektúra kiírása és kilépés" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Támogatott architektúrák kiírása és kilépés" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Aktív gl illesztőprogramok kiírása és kilépés" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Munkavégzés a felhasználói telepítéseken" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Munkavégzés a rendszerszintű telepítéseken (alapértelmezett)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" msgstr "Munkavégzés adott rendszerszintű telepítés(ek)en" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NÉV" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Beépített parancsok:" -#: app/flatpak-main.c:370 -#, fuzzy +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -"Az --installation kapcsoló többször használva volt, egy olyan parancsnál, " +"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 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Ismeretlen „%s” parancs" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Nincs parancs megadva" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "hiba:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Megtalálható számos távoliban:\n" - -#: 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: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: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: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: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: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: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: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: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:765 -msgid "update" -msgstr "frissítés" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Most: %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Nincsenek frissítések.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "csomag telepítése" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Figyelmeztetés: %s %s sikertelen: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "Egy vagy több művelet sikertelen" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, 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-context.c:210 +#: common/flatpak-context.c:213 #, 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-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Ismeretlen %s D-Bus név\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Ismeretlen %s foglalattípus, az érvényes típusok: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, 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-context.c:318 +#: common/flatpak-context.c:321 #, 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-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2302,482 +2849,1005 @@ "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-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Érvénytelen %s env formátum" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Megosztás a gazdagéppel" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "MEGOSZTÁS" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Megosztás megszüntetése a gazdagéppel" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Foglalat elérhetővé tétele az alkalmazásnak" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "FOGLALAT" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Ne tegye elérhetővé a foglalatot az alkalmazásnak" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Eszköz elérhetővé tétele az alkalmazásnak" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "ESZKÖZ" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Ne tegye elérhetővé az eszközt az alkalmazásnak" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Jellemző engedélyezése" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "JELLEMZŐ" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Ne engedélyezze a jellemzőt" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 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-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "FÁJLRENDSZER[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Ne tegye elérhetővé a fájlrendszert az alkalmazásnak" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "FÁJLRENDSZER" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Környezeti változó beállítása" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VÁLTOZÓ=ÉRTÉK" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 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-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "DBUS_NÉV" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 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-context.c:1116 +#: common/flatpak-context.c:1211 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-context.c:1117 +#: common/flatpak-context.c:1212 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-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Általános irányelv-lehetőség hozzáadása" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ALRENDSZER.KULCS=ÉRTÉK" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Általános irányelv-lehetőség eltávolítása" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Saját könyvtár megőrzése" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "FÁJLNÉV" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 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-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "A(z) %s lekérése közben a(z) %s távoliról: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "További metaadatok frissítése a(z) %s távoli összegzéséből\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "A(z) %s nem található a(z) %s távoliban" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "A(z) %s nem található a(z) %s távoliban" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Nincs flatpak gyorsítótár a távoli összegzésben" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "" +"Nincs bejegyzés a(z) %s esetén a távoli összegzés flatpak gyorsítótárban " + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "" +"Nincs bejegyzés a(z) %s esetén a távoli összegzés flatpak gyorsítótárban " + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Név birtoklásának lehetővé tétele az alkalmazásnak a rendszerbuszon" + +#: common/flatpak-dir.c:1602 #, 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 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "A(z) %s nincs telepítve" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "A(z) %s %s nincs telepítve" + +#: common/flatpak-dir.c:2321 #, 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 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Telepítendő kommit" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "A(z) %s nem található a(z) %s távoliban" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" 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:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Érvénytelen ellenőrzőösszeg a(z) %s további adatnál" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, 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 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Nem támogatott további adat URI: %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, 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 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "A(z) %s letöltése közben: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 +#, 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:4021 +#, 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:4080 +msgid "Remote OCI index has no registry uri" +msgstr "A távoli OCI indexnek nincs regisztrációs URI-ja" + +#: common/flatpak-dir.c:4181 +#, c-format +msgid "%s commit %s already installed" +msgstr "A(z) %s kommit %s már telepítve van" + +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 +#, 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:4697 +#, fuzzy +msgid "No summary found" +msgstr "Nincs találat" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Wrong size for extra data %s" -msgstr "Hibás méret a(z) %s további adatnál" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4717 #, c-format -msgid "Invalid checksum for extra data %s" -msgstr "Érvénytelen ellenőrzőösszeg a(z) %s további adatnál" +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" -#: 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:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" -#: 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:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 #, c-format -msgid "While pulling %s from remote %s: " -msgstr "A(z) %s lekérése közben a(z) %s távoliról: " +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4801 #, c-format -msgid "Can't find %s in remote %s" -msgstr "A(z) %s nem található a(z) %s távoliban" +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Nincs elég memória" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Nem sikerült olvasni az exportált fájlból" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Hiba a MIME-típus XML-fájl olvasásakor" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Érvénytelen MIME-típus XML-fájl" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "A különálló metaadatok lekérése közben: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "A különálló metaadatok lekérése közben: " + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Érvénytelen ellenőrzőösszeg a további adatnál" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, 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 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "A különálló metaadatok lekérése közben: " + +#: common/flatpak-dir.c:6557 #, 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 +#: common/flatpak-dir.c:6641 #, 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 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "A(z) %s %s ág már telepítve van" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Nem sikerült olvasni a(z) %s kommitot: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 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 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "A(z) %s -> %s átváltására tett kísérlet közben: " + +#: common/flatpak-dir.c:6775 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 +#: common/flatpak-dir.c:6786 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 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Érvénytelen %s üzembe állított hivatkozás:" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Érvénytelen %s kommithivatkozás: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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 +#: common/flatpak-dir.c:6836 #, 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 +#: common/flatpak-dir.c:6844 #, 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 +#: common/flatpak-dir.c:6850 #, 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 +#: common/flatpak-dir.c:6856 #, 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 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Az üzembe állított metaadatok nem egyeznek a kommittal" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, 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 +#: common/flatpak-dir.c:7801 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 +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "A(z) %s %s ág már telepítve van" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "A(z) %s %s ág nincs telepítve" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "A(z) %s %s ág nincs telepítve" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "A tároló nyesése meghiúsult: %s" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Nincs flatpak gyorsítótár a távoli összegzésben" + +#: common/flatpak-dir.c:9716 #, 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 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Semmi sem egyezik: %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, 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 +#: common/flatpak-dir.c:9969 #, 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" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "A(z) %s %s nincs telepítve" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Nem található a telepítési %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Érvénytelen gpg kulcs" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Érvénytelen fájlformátum" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Érvénytelen fájlformátum" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Érvénytelen fájlformátum" + +#: common/flatpak-dir.c:10871 #, 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 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: 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:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "A(z) %s nem található a(z) %s távoliban" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, c-format -msgid "No entry for %s in remote summary flatpak cache " +msgid "No configuration for remote %s specified" msgstr "" -"Nincs bejegyzés a(z) %s esetén a távoli összegzés flatpak gyorsítótárban " -#: common/flatpak-run.c:1456 +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Egy ág metaadatainak kiírása" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "A(z) %s nincs telepítve" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "A(z) %s nincs telepítve" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "A kért %s kiterjesztés csak részlegesen van telepítve" + +#: common/flatpak-oci-registry.c:1679 #, 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" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Nem sikerült megnyitni az átmeneti fájlt: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Nem hozható létre szinkronizálási cső" +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Hiba a migráció során: %s\n" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "A(z) %s nem található a(z) %s távoliban" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Nincs parancs megadva" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "Nem sikerült megnyitni az alkalmazás-információs fájlt: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Nem hozható létre szinkronizálási cső" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Nem sikerült szinkronizálni a dbus proxyval" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Nem sikerült megnyitni az átmeneti fájlt: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Nem hozható létre szinkronizálási cső" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Nem sikerült megnyitni a flatpak-információs átmeneti fájlt: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Nem sikerült megnyitni a flatpak-információs átmeneti fájlt: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Alkalmazások előkészítése egy elnevezett alkalmazásból" + +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" +msgstr "" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Hiba: %s %s sikertelen: %s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Nem sikerült olvasni az exportált fájlból" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Érvénytelen %s pid" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig meghiúsult, kilépési állapot: %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Nem lehet megnyitni a(z) %s névteret: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Túl sok argumentum" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Figyelmeztetés: hiba a kapcsolódó hivatkozások keresésekor: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "A(z) %s alkalmazás, %s ág nincs telepítve" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "A(z) %s alkalmazás, %s ág nincs telepítve" + +#: common/flatpak-transaction.c:1571 +#, 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" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "A(z) %s kommit %s már telepítve van" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "A(z) %s már telepítve lett egy másik távoli tárolóból (%s)" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Érvénytelen require-flatpak argumentum: %s\n" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Hiba a(z) „%s” távoli metaadatainak frissítéskor: %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Figyelmeztetés: a függőségek nem találhatóak: %s\n" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Érvénytelen require-flatpak argumentum: %s\n" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "%s migrálása ide: %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Hiba a migráció során: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Túl sok argumentum" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Alkalmazás vagy futtatókörnyezet aláírása" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Ismeretlen %s D-Bus név\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Érvénytelen %s pid" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "Alapértelmezett ág: %s\n" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Érvénytelen %s pid" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Nincsenek további adatforrások" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Hiba a migráció során: %s\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Hiba a migráció során: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Az appstream adatok frissítése a(z) %s távoli tárolóhoz\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Érvénytelen ellenőrzőösszeg a további adatnál" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Metaadatok letöltése: %u/%s (becslés)" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Letöltés: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "További adatok letöltése: %s/%s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Fájlok letöltése: %d/%d %s" +#: common/flatpak-utils.c:5782 +#, fuzzy, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "Érvénytelen require-flatpak argumentum: %s\n" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "A(z) %s egy későbbi flatpak verziót (%s) igényel" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2893,34 +3963,45 @@ msgid "Update appstream" msgstr "AppStream frissítése" -#~ msgid "No remote %s" -#~ msgstr "Nincs távoli %s" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "Gyűjteményazonosító átirányítás: %s\n" -#, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Felhasználói telepítések megjelenítése" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Érvénytelen sha256 a további adat URI-nál: %s" -#, fuzzy -#~ msgid "Search only system-wide installations" -#~ msgstr "Rendszerszintű telepítések megjelenítése" +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Érvénytelen sha256 a további adatnál" -#, fuzzy -#~ msgid "Search specific system-wide installations" -#~ msgstr "Bizonyos rendszerszintű telepítések megjelenítése" +#~ msgid "Add OCI registry" +#~ msgstr "OCI regisztrációs adatbázis hozzáadása" -#~ msgid "Failed to create temporary file" -#~ msgstr "Nem sikerült létrehozni az átmeneti fájlt" +#~ msgid "Installing: %s\n" +#~ msgstr "Telepítés: %s\n" -#~ msgid "Failed to unlink temporary file" -#~ msgstr "Nem sikerült törölni az átmeneti fájlt" +#~ msgid "Found in remote %s\n" +#~ msgstr "Megtalálva a(z) %s távoli tárolóban\n" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Nem sikerült írni az átmeneti fájlba" +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Megtalálható a(z) %s távoliban, szeretné telepíteni?" -#, fuzzy -#~ msgid "Installing %s" -#~ msgstr "Telepítés: %s\n" +#~ msgid "Found in several remotes:\n" +#~ msgstr "Megtalálható számos távoliban:\n" -#, fuzzy -#~ msgid "Post-Install %s" -#~ msgstr "Telepítés: %s\n" +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "A(z) %s már telepítve van, kihagyás\n" + +#~ msgid "One or more operations failed" +#~ msgstr "Egy vagy több művelet sikertelen" + +#~ msgid "No ref information available in repository" +#~ msgstr "Nem érhetőek el hivatkozásinformációk a tárolóban" + +#~ msgid "Remote title not set" +#~ msgstr "A távoli cím nincs beállítva" + +#~ msgid "Remote default-branch not set" +#~ msgstr "A távoli alapértelmezett ág nincs beállítva" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/id.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/id.gmo differ diff -Nru flatpak-0.11.3/po/id.po flatpak-1.0.7/po/id.po --- flatpak-0.11.3/po/id.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/id.po 2019-02-11 12:42:42.000000000 +0000 @@ -1,225 +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: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2018-01-18 17:44+0700\n" -"Last-Translator: Kukuh Syafaat \n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2018-10-01 13:07+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.5\n" - -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Tidak melakukan apapun jika remote yang disediakan ada" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "LOKASI menentukan berkas konfigurasi, bukan lokasi repo" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Aktifkan verifikasi GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Tandai remote sebagai enumerasi" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Tandai remote seperti yang digunakan untuk dependensi" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Atur url baru" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Aktifkan remote" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Perbarui metadata tambahan dari berkas ringkasan" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Nonaktifkan verifikasi GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Tandai remote jangan sebagai enumerasi" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Tandai remote seperti yang jangan digunakan untuk dependensi" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Atur prioritas (bawaan 1, lebih tinggi berarti lebih diprioritaskan)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITAS" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Sebuah nama yang bagus untuk digunakan bagi remote ini" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "JUDUL" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Cabang bawaan yang digunakan untuk remote ini" - -#: 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 -msgid "BRANCH" -msgstr "CABANG" - -#: 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 "ID Koleksi" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "ID-KOLEKSI" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Nonaktifkan remote" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Tambah registri OCI" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Remote %s sudah ada" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NAMA - Mengubah repositori remote" - -#: app/flatpak-builtins-add-remote.c:474 -msgid "Remote NAME must be specified" -msgstr "NAMA remote harus ditentukan" - -#: 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: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:489 -#, c-format -msgid "Could not update extra metadata for %s" -msgstr "Tidak dapat memperbarui metadata tambahan untuk %s" +"X-Generator: Poedit 2.0.6\n" #: app/flatpak-builtins-build-bundle.c:56 msgid "Export runtime instead of app" @@ -230,12 +26,13 @@ msgstr "Arsitektur tujuan bundel" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARSITEKTUR" @@ -243,6 +40,14 @@ msgid "Url for repo" msgstr "Url untuk repo" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url untuk berkas flatpakrepo runtime" @@ -251,6 +56,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "BERKAS" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Ekspor citra oci alih-alih paket flatpak" @@ -260,39 +73,42 @@ msgstr "ID kunci GPG untuk menandatangani citra OCI" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "ID KUNCI" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "Homedir GPG untuk digunakan saat mencari ring kunci" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "HOMEDIR" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "KOMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -300,25 +116,46 @@ "LOKASI NAMABERKAS NAMA [CABANG] - Buat bundel berkas tunggal dari repositori " "lokal" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "LOKASI, NAMABERKAS dan NAMA harus ditentukan" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Terlalu banyak argumen" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' bukan repositori yang valid" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' bukan nama yang valid: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' bukan nama cabang yang valid: %s" @@ -344,7 +181,7 @@ msgstr "Mulai bangun di direktori ini" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "DIR" @@ -352,11 +189,11 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Gunakan berkas alternatif untuk metadata" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Bunuh proses saat proses induk mati" @@ -364,368 +201,420 @@ msgid "Export application homedir directory to build" msgstr "Ekspor direktori homedir aplikasi untuk membangun" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "Catat log pemanggilan bus sesi" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Catat log pemanggilan bus sistem" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIREKTORI [PERINTAH [argumen ...]] - Bangun di direktori" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "DIREKTORI harus ditentukan" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "metadata tidak valid, bukan aplikasi atau runtime" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Kehilangan '=' pada opsi kait bind '%s'" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Tidak dapat memulai aplikasi" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Direktori repo sumber" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "SRC-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Ref repo sumber" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "SRC-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Subjek satu baris" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "SUBJEK" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Deskripsi lengkap" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TUBUH" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Perbarui cabang appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Jangan perbarui ringkasan" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 kunci GPG untuk menandatangani komit dengan" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "Tandai bangun sebagai habis-masa-hidup" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "ALASAN" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Menimpa cap waktu komit (SEKARANG untuk waktu sekarang)" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "TIMESTAMP" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "DST-REPO harus ditentukan" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "Tidak dapat mengurai '%s'" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "Tidak bisa melakukan komit dari sebagian sumber." -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: tidak ada perubahan\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Arsitektur tujuan ekspor (mesti kompatibel dengan host)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Runtime komit (/usr), bukan /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Gunakan direktori alternatif untuk berkas" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "SUBDIR" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Berkas untuk dikecualikan" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "POLA" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Sertakan berkas yang dikecualikan" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Menimpa timestamp dari komit" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "ID Koleksi" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, 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 +#: app/flatpak-builtins-build-export.c:353 #, 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 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, 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 +#: app/flatpak-builtins-build-export.c:389 #, 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 +#: app/flatpak-builtins-build-export.c:417 #, 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 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Tipe uri %s tidak valid, hanya http/https yang didukung" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Tidak dapat menemukan basename di %s, tentukan nama secara eksplisit" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Tidak ada garis miring yang diperbolehkan dalam nama data ekstra" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Format tidak valid untuk checksum sha256: '%s'" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Data tambahan berukuran nol tidak didukung" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "LOKASI DIREKTORI [CABANG] - Buat repositori dari direktori bangun" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "LOKASI dan DIREKTORI harus ditentukan" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "'%s' bukan ID koleksi yang valid: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Tidak ada nama yang ditentukan dalam metadata" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Komit: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Total Metadata: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Metadata yang Ditulis: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Total Isi: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Konten yang Ditulis: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Isi Byte yang Ditulis:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "PERINTAH" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Versi Flatpak membutuhkan" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAYOR.MINOR.MIKRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Jangan memproses ekspor" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Info data ekstra" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Menambahkan info titik ekstensi" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NAMA=VARIABEL[=NILAI]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "Hapus info titik ekstensi" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NAMA" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Atur prioritas ekstensi (hanya untuk ekstensi)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Ubah SDK yang digunakan untuk aplikasi" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Ubah runtime yang digunakan untuk aplikasi" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "RUNTIME" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Atur pilihan metadata generik" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUP=KUNCI[=NILAI]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Cabut izin tulis dari aplikasi" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "Tidak mengekspor %s, salah ekstensi\n" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" -msgstr "Tidak mengekspor %s, salah awalan\n" +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "Tidak mengekspor %s, nama berkas ekspor yang tidak diizinkan\n" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "Mengekspor %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "Lebih dari satu yang bisa dieksekusi ditemukan\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "Menggunakan %s sebagai perintah\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Tidak ada yang bisa dieksekusi ditemukan\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Terlalu sedikit elemen dalam --extra-data argumen %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -734,7 +623,8 @@ "Terlalu sedikit elemen dalam argumen --metadata %s, format seharusnya " "GRUP=KUNCI[=NILAI]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -743,21 +633,21 @@ "Too few elements in --metadata argument %s, format should be " "NAMA=VAR[=NILAI]]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "DIREKTORI - Finalisasi direktori bangun" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Direktori bangun %s tidak diinisialisasi" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Direktori bangun %s sudah diselesaikan" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Harap tinjau berkas yang diekspor dan metadata\n" @@ -773,139 +663,147 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Impor citra oci, bukan bundel flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Ref '%s' tidak ditemukan di registri" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "Mengimpor %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "LOKASI NAMABERKAS - Impor bundel berkas ke repositori lokal" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Arsitektur yang digunakan" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Menginisialisasi var dari runtime yang disebut" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Menginisialisasi aplikasi dari aplikasi yang disebut" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APP" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Tentukan versi untuk --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSI" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Sertakan ekstensi dasar ini" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "EKSTENSI" -#: app/flatpak-builtins-build-init.c:54 -msgid "Initialize /usr with a writable copy of the sdk" +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "Tanda ekstensi untuk digunakan jika ekstensi membangun" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "TANDA_EKSTENSI" + +#: app/flatpak-builtins-build-init.c:58 +msgid "Initialize /usr with a writable copy of the sdk" msgstr "Menginisialisasi /usr dengan salinan yang ditulis dari sdk" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Tentukan tipe bangun (aplikasi, runtime, ekstensi)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TIPE" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Tambahkan tanda" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "TANDA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Sertakan ekstensi sdk ini di /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Di mana tempat menyimpan sdk (bawaannya ke 'usr')" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Menginisialisasi ulang sdk/var" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Ekstensi %s yang diminta hanya terpasang sebagian" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Ekstensi %s yang diminta tidak terpasang" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "DIREKTORI NAMAAPL SDK RUNTIME [CABANG] - Menginisialisasi direktori untuk " "membangun" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "RUNTIME harus ditentukan" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' bukan nama aplikasi yang valid: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Direktori bangun %s sudah diinisialisasi" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Arsitektur tujuan pemasangan" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Cari runtime dengan nama yang ditentukan" @@ -913,10 +811,122 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "LOKASI [ID [CABANG]] - Menandatangani sebuah aplikasi atau runtime" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "LOKASI harus ditentukan" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Tidak ada id kunci gpg yang ditentukan" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Arahkan ulang repo ini ke URL baru" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Nama yang bagus untuk digunakan pada repositori ini" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "JUDUL" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Cabang bawaan yang akan digunakan untuk repositori ini" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "CABANG" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ID-KOLEKSI" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "Deploy ID koleksi secara permanen ke konfigurasi klien remote" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Impor kunci publik GPG bawaan baru dari BERKAS" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "ID Kunci GPG untuk menandatangani ringkasan" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Bangkitkan berkas delta" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Pangkas objek yang tidak terpakai" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Hanya melintasi induk KEDALAMAN untuk setiap komit (bawaan: -1 = tak " +"terbatas)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "KEDALAMAN" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "" +"Membangkitkan delta: %s (%.10s)\n" +"\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Membangkitkan delta: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Gagal membangkitkan delta %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Gagal membangkitkan delta %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "LOKASI - Perbarui metadata repositori" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Memperbarui cabang appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Memperbarui ringkasan\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Total objek: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Tidak ada objek yang tidak terjangkau\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u objek dihapus, %s dibebaskan\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "Buat daftar kunci dan nilai konfigurasi" @@ -933,34 +943,113 @@ msgid "Unset configuration for KEY" msgstr "Batalkan konfigurasi untuk KUNCI" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, 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 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Anda harus menentukan kunci" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "Anda harus menentukan kunci dan nilai" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[KUNCI [NILAI]] - Kelola konfigurasi" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Cari aplikasi dengan nama yang ditentukan" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NAMA - Menghapus repositori remote" +#: app/flatpak-builtins-create-usb.c:44 +msgid "Arch to copy" +msgstr "Arsitektur yang disalin" + +#: app/flatpak-builtins-create-usb.c:45 +msgid "DEST" +msgstr "DEST" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "Peringatan: Menghilangkan ref terkait '%s' karena tidak dipasang.\n" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" +"Peringatan: Menghilangkan ref terkait '%s' karena remote ‘%s’ tidak memiliki " +"koleksi kumpulan ID.\n" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" +"Remote ‘%s’ tidak memiliki koleksi kumpulan ID, yang diperlukan untuk " +"distribusi P2P ‘%s’." + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" +"MOUNT-PATH REF [REF...] - Menyalin aplikasi dan/atau runtime ke media lepasan" + +#: app/flatpak-builtins-create-usb.c:459 +msgid "MOUNT-PATH and REF must be specified" +msgstr "MOUNT-PATH dan REF harus ditentukan" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" +"Ref ‘%s’ ditemukan pada beberapa pemasangan: %s. Anda harus menentukan satu." + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" +"Ref harus semuanya berada pada pemasangan yang sama (ditemukan di %s dan %s)." + +#: app/flatpak-builtins-create-usb.c:673 +#, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "Peringatan: Tidak dapat memperbarui metadata repo untuk '%s': %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Peringatan: Tidak dapat memperbarui data appstream untuk remote ‘%s’ " +"arsitektur ‘%s’:%s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Peringatan: Tidak dapat menemukan data appstream untuk remote ‘%s’ " +"arsitektur ‘%s’: %s; %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Tidak dapat menemukan data appstream2 untuk remote ‘%s’ arsitektur ‘%s’:%s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1110,205 +1199,176 @@ msgid "Can't switch uid" msgstr "Tidak dapat berganti uid" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Tampilkan pemasangan pengguna" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Tampilkan pemasangan di seluruh sistem" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Tampilkan pemasangan tertentu di seluruh sistem" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Tampilkan ref" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Tampilkan komit" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Tampilkan asal" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Tampilkan ukuran" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Tampilkan metadata" -#: app/flatpak-builtins-info.c:60 -#, fuzzy +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "Tampilkan runtime" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "Tampilkan sdk" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" -msgstr "Tampilkan ekstensi" +msgstr "Tampilkan izin" -#: app/flatpak-builtins-info.c:61 -#, fuzzy +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Kelola akses berkas" +msgstr "Akses berkas kueri" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "PATH" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Tampilkan ekstensi" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +msgid "Show location" +msgstr "Tampilkan lokasi" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" -"NAMA [CABANG] - Dapatkan info tentang aplikasi dan/atau runtime yang " -"terpasang" +"NAMA [CABANG] - Dapatkan info tentang aplikasi yang terpasang atau runtime" + +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NAMA harus ditentukan" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "ref tidak ada di asal" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Peringatan: Komit tidak memiliki metadata flatpak\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Arsitektur:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Cabang:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Asal:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 -#, fuzzy +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" -msgstr "ID Koleksi" +msgstr "ID Koleksi:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "Tanggal:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "Subjek:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Komit aktif:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Komit terbaru:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Komit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "Induk:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Lokasi:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Ukuran terpasang:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "habis-masa-hidup:" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "rebase-habis-masa-hidup:" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "Sdk:" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Subdirektori terpasang:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Ekstensi:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Subpath:" -#: app/flatpak-builtins-info-remote.c:49 -msgid "Commit to show info for" -msgstr "Komit untuk menunjukkan info untuk" - -#: 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-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 "" - #: app/flatpak-builtins-install.c:58 msgid "Don't pull, only install from local cache" msgstr "Jangan tarik, hanya memasang dari cache lokal" @@ -1346,60 +1406,35 @@ msgid "Only install this subpath" msgstr "Hanya pasang subpath ini" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: 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: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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Aplikasi ini tergantung pada runtime dari:\n" -"   %s\n" -"Konfigurasikan ini sebagai remote baru '%s'" - -#: 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'" +msgstr "Hapus dulu jika sudah terpasang" -#: app/flatpak-builtins-install.c:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Nama berkas bundel harus ditentukan" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Bundel remote tidak didukung" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" -"Remote '%s', pada lokasi %s berisi aplikasi tambahan.\n" -"Haruskah remote disimpan untuk pemasangan di masa depan?" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Nama berkas atau uri harus ditentukan" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Memasang: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOKASI/REMOTE [REF...] - Pasang aplikasi atau runtime" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "REMOTE dan REF harus ditentukan" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Tampilkan informasi ekstra" @@ -1416,123 +1451,530 @@ msgid "Arch to show" msgstr "Arsitektur yang akan ditampilkan" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Daftar semua ref (termasuk lokal/awakutu)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Asal" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Komit aktif" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Komit terbaru" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Ukuran terpasang" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Opsi" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Daftar aplikasi dan/atau runtimes yang terpasang" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" -msgstr "Tampilkan detail remote" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Arsitektur seperti sekarang" -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" -msgstr "Tampilkan remote yang dinonaktifkan" +#: 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-list-remotes.c:53 -msgid " - List remote repositories" -msgstr " - Daftar repositori remote" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "APL harus ditentukan" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" -msgstr "Nama" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "CABANG harus ditentukan" -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" -msgstr "Judul" +#: 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-list-remotes.c:71 -msgid "Priority" -msgstr "Prioritas" +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" +msgstr "Hapus penimpa yang ada" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "Tampilkan penimpa yang ada" -#: app/flatpak-builtins-ls-remote.c:45 -msgid "Show arches and branches" -msgstr "Tampilkan arsitektur dan cabang" +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[APP] - Menimpa pengaturan [untuk aplikasi]" -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "[TABLE] [ID] - Daftar izin" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "Tabel" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "Objek" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "Aplikasi" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" +msgstr "Izin" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "Data" + +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" +msgstr "TABLE ID - Hapus butir dari menyimpan perizinan" + +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" +msgstr "Terlalu sedikit argumen" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" +msgstr "APP_ID - Atur ulang izin untuk suatu aplikasi" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" +msgstr "Jumlah argumen salah" + +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" +msgstr "APP_ID - Tampilkan izin untuk suatu aplikasi" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" +msgstr "Tampilkan kolom yang tersedia" + +#: app/flatpak-builtins-ps.c:43 +msgid "What information to show" +msgstr "Informasi apa untuk ditampilkan" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "RUAS,…" + +#: app/flatpak-builtins-ps.c:53 +msgid "Application" +msgstr "Aplikasi" + +#: app/flatpak-builtins-ps.c:53 +msgid "Show the application ID" +msgstr "Tampilkan ID aplikasi" + +#: app/flatpak-builtins-ps.c:54 +msgid "Architecture" +msgstr "Arsitektur" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "Tampilkan arsitektur" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Cabang" + +#: app/flatpak-builtins-ps.c:55 +msgid "Show the application branch" +msgstr "Tampilkan cabang aplikasi" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Komit" + +#: app/flatpak-builtins-ps.c:56 +msgid "Show the application commit" +msgstr "Tampilkan komit aplikasi" + +#: app/flatpak-builtins-ps.c:57 +msgid "Runtime" +msgstr "Runtime" + +#: app/flatpak-builtins-ps.c:57 +msgid "Show the runtime ID" +msgstr "Tampilkan ID runtime" + +#: app/flatpak-builtins-ps.c:58 +msgid "Runtime Branch" +msgstr "Cabang Runtime" + +#: app/flatpak-builtins-ps.c:58 +msgid "Show the runtime branch" +msgstr "Tampilkan cabang runtime" + +#: app/flatpak-builtins-ps.c:59 +msgid "Runtime Commit" +msgstr "Komit Runtime" + +#: app/flatpak-builtins-ps.c:59 +msgid "Show the runtime commit" +msgstr "Tampilkan komit runtime" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" +msgstr "PID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "Tampilkan PID dari proses bungkus" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "PID anak" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "Tampilkan PID dari proses sandbox" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "Kolom ambigu: %s" + +#: app/flatpak-builtins-ps.c:98 +#, c-format +msgid "Unknown column: %s" +msgstr "Kolom tidak dikenal: %s" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "Kolom yang tersedia:\n" + +#: app/flatpak-builtins-ps.c:119 +msgid "Show all columns" +msgstr "Tampilkan semua kolom" + +#: app/flatpak-builtins-ps.c:156 +msgid "Instance" +msgstr "Instansi" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr " - Enumerasikan sandbox yang berjalan" + +#: app/flatpak-builtins-ps.c:264 +msgid "Extra arguments given" +msgstr "Argumen ekstra diberikan" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Tidak melakukan apapun jika remote yang disediakan ada" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "LOKASI menentukan berkas konfigurasi, bukan lokasi repo" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Nonaktifkan verifikasi GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Tandai remote jangan sebagai enumerasi" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Tandai remote seperti yang jangan digunakan untuk dependensi" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Atur prioritas (bawaan 1, lebih tinggi berarti lebih diprioritaskan)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITAS" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Sebuah nama yang bagus untuk digunakan bagi remote ini" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Cabang bawaan yang digunakan untuk remote ini" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Impor kunci GPG dari BERKAS (- untuk stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Nonaktifkan remote" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Tidak dapat memuat uri %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:206 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Tidak dapat memuat berkas %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" +msgstr "Format berkas tidak valid" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Versi %s tidak valid, hanya 1 yang didukung" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Kunci gpg tidak valid" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NAMA LOKASI - Tambah repositori remote" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "Verifikasi GPG diperlukan jika koleksi diaktifkan" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Remote %s sudah ada" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Tidak ada url yang ditentukan dalam berkas flatpakrepo" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Hapus remote meskipun digunakan" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NAMA - Menghapus repositori remote" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Komit untuk menunjukkan info untuk" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Tampilkan log" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Tampilkan induk" + +#: app/flatpak-builtins-remote-info.c:126 +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-remote-info.c:213 +msgid "Download size:" +msgstr "Ukuran unduh:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Riwayat:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Subjek:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Tanggal:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Komit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Peringatan: Komit %s tidak memiliki metadata flatpak\n" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Tampilkan detail remote" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Tampilkan remote yang dinonaktifkan" + +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" +msgstr " - Daftar repositori remote" + +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" +msgstr "Nama" + +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" +msgstr "Judul" + +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" +msgstr "Prioritas" + +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" +msgstr "Tampilkan arsitektur dan cabang" + +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" msgstr "Hanya tampilkan runtime" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Hanya tampilkan aplikasi" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Hanya tampilkan itu ketika pembaruan tersedia" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Batasi arsitektur ini (* untuk semua)" -#: 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-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr " [REMOTE atau URI] - Tampilkan runtime dan aplikasi yang tersedia" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Komit" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Ukuran unduh" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "Tidak ada informasi ref yang tersedia dalam repositori" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Aktifkan verifikasi GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Arsitektur seperti sekarang" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Tandai remote sebagai enumerasi" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Tandai remote seperti yang digunakan untuk dependensi" -#: 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-remote-modify.c:57 +msgid "Set a new url" +msgstr "Atur url baru" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "CABANG harus ditentukan" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Aktifkan remote" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Perbarui metadata tambahan dari berkas ringkasan" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NAMA - Mengubah repositori remote" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "NAMA remote harus ditentukan" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "Aplikasi %s cabang %s tidak terpasang" +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "Memperbarui metadata ekstra dari ringkasan remote untuk %s\n" -#: app/flatpak-builtins-override.c:54 -msgid "[APP] - Override settings [for application]" -msgstr "[APP] - Menimpa pengaturan [untuk aplikasi]" +#: app/flatpak-builtins-remote-modify.c:214 +#, c-format +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Galat memperbarui metadata tambahan untuk '%s': %s\n" + +#: app/flatpak-builtins-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Tidak dapat memperbarui metadata tambahan untuk %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "Objek hilang: %s.%s\n" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "%s, menghapus objek\n" + +#: app/flatpak-builtins-repair.c:134 +#, c-format +msgid "Can't load object %s: %s\n" +msgstr "Tidak dapat memuat objek %s: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Masalah memuat data untuk %s: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "" +"Galat memasang ulang %s: %s\n" +"\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "- Perbaiki pemasangan flatpak" + +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Menghapus ref non-deployed %s...\n" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "Memverifikasi %s...\n" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "Menghapus ref %s karena objek yang hilang\n" + +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" +msgstr "Pangkas objek\n" + +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" +msgstr "Memasang ulang ref yang dihapus\n" #: app/flatpak-builtins-repo.c:48 #, c-format @@ -1554,306 +1996,468 @@ msgid "Redirect URL: %s\n" msgstr "URL pengalihan: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-repo.c:65 #, c-format -msgid "Redirect collection ID: %s\n" -msgstr "Mengalihkan ID koleksi: %s\n" +msgid "Deploy collection ID: %s\n" +msgstr "Deploy ID koleksi: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" msgstr "Hash kunci GPG: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" msgstr "%zd cabang\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Terpasang" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Unduh" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Cetak informasi umum tentang repositori" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "Daftar cabang di repositori" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Cetak metadata untuk cabang" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "LOKASI - Perbaikan repositori" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Arahkan ulang repo ini ke URL baru" +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "Perintah untuk menjalankan" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Nama yang bagus untuk digunakan pada repositori ini" +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" +msgstr "Cabang untuk digunakan" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Cabang bawaan yang akan digunakan untuk repositori ini" +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "Gunakan runtime pengembangan" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "Deploy ID koleksi secara permanen ke konfigurasi klien remote" +#: app/flatpak-builtins-run.c:62 +msgid "Runtime to use" +msgstr "Runtime untuk digunakan" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Impor kunci publik GPG bawaan baru dari BERKAS" +#: app/flatpak-builtins-run.c:63 +msgid "Runtime version to use" +msgstr "Versi runtime untuk digunakan" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "ID Kunci GPG untuk menandatangani ringkasan" +#: app/flatpak-builtins-run.c:66 +msgid "Log accessibility bus calls" +msgstr "Catat log aksesibilitas bus sesi" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Bangkitkan berkas delta" +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "Jangan proksi aksesibilitas panggilan bus" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "Jangan memulai portal" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Pangkas objek yang tidak terpakai" +#: app/flatpak-builtins-run.c:69 +msgid "Enable file forwarding" +msgstr "Aktifkan penerusan berkas" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" -"Hanya melintasi induk KEDALAMAN untuk setiap komit (bawaan: -1 = tak " -"terbatas)" +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "Jalankan komit yang ditentukan" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "Gunakan komit runtime yang ditentukan" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "Jalankan sepenuhnya di dalam sandbox" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "KEDALAMAN" +#: app/flatpak-builtins-run.c:95 +msgid "APP [args...] - Run an app" +msgstr "APL [argumen...] - Jalankan aplikasi" -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "Arsitektur tujuan pencarian" + +#: app/flatpak-builtins-search.c:254 +msgid "TEXT - Search remote apps/runtimes for text" +msgstr "TEXT - Cari aplikasi remote/runtime untuk teks" + +#: app/flatpak-builtins-search.c:263 +msgid "TEXT must be specified" +msgstr "TEXT harus ditentukan" + +#: app/flatpak-builtins-search.c:316 +msgid "Application ID" +msgstr "ID Aplikasi" + +#: app/flatpak-builtins-search.c:317 +msgid "Version" +msgstr "Versi" + +#: app/flatpak-builtins-search.c:321 +msgid "Remotes" +msgstr "Remote" + +#: app/flatpak-builtins-search.c:322 +msgid "Description" +msgstr "Deskripsi" + +#: app/flatpak-builtins-search.c:331 +msgid "No matches found" +msgstr "Tidak ditemukan kecocokan" + +#: app/flatpak-builtins-uninstall.c:50 +msgid "Arch to uninstall" +msgstr "Arsitektur untuk dihapus" + +#: app/flatpak-builtins-uninstall.c:51 +msgid "Keep ref in local repository" +msgstr "Simpan ref di repositori lokal" + +#: app/flatpak-builtins-uninstall.c:52 +msgid "Don't uninstall related refs" +msgstr "Jangan hapus ref terkait" + +#: app/flatpak-builtins-uninstall.c:53 +msgid "Remove files even if running" +msgstr "Hapus berkas meski berjalan" + +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "Hapus semua pemasangan" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "Hapus pemasangan yang tidak digunakan" + +#: app/flatpak-builtins-uninstall.c:155 +msgid "REF... - Uninstall an application" +msgstr "REF... - Hapus aplikasi" + +#: app/flatpak-builtins-uninstall.c:164 +msgid "Must specify at least one REF, --unused or --all" +msgstr "Harus menentukan setidaknya satu REF, --unused or --all" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "Tidak harus menentukan REF ketika menggunakan --all" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "Tidak harus menentukan REF ketika menggunakan --unused" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "Tidak ada yang tidak digunakan untuk menghapus pemasangan\n" + +#: app/flatpak-builtins-update.c:53 +msgid "Arch to update for" +msgstr "Arsitektur untuk pembaruan" + +#: app/flatpak-builtins-update.c:54 +msgid "Commit to deploy" +msgstr "Komit untuk deploy" + +#: app/flatpak-builtins-update.c:55 +msgid "Remove old files even if running" +msgstr "Hapus berkas lama meski berjalan" + +#: app/flatpak-builtins-update.c:56 +msgid "Don't pull, only update from local cache" +msgstr "Jangan tarik, hanya perbarui dari cache lokal" + +#: app/flatpak-builtins-update.c:58 +msgid "Don't update related refs" +msgstr "Jangan memperbarui ref terkait" + +#: app/flatpak-builtins-update.c:63 +msgid "Update appstream for remote" +msgstr "Perbarui appstream untuk remote" + +#: app/flatpak-builtins-update.c:64 +msgid "Only update this subpath" +msgstr "Hanya perbarui subpath ini" + +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "[REF...] - Perbarui aplikasi atau runtime" + +#: app/flatpak-builtins-update.c:128 +msgid "Looking for updates...\n" msgstr "" -"Membangkitkan delta: %s (%.10s)\n" +"Mencari pembaruan...\n" "\n" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-utils.c:367 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Membangkitkan delta: %s (%.10s-%.10s)\n" +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Remote '%s' ditemukan pada beberapa pemasangan:\n" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-utils.c:374 +msgid "Which do you want to use (0 to abort)?" +msgstr "Mana yang ingin Anda gunakan (0 untuk membatalkan)?" + +#: app/flatpak-builtins-utils.c:376 #, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Gagal membangkitkan delta %s (%.10s): " +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-repo-update.c:206 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Gagal membangkitkan delta %s (%.10s-%.10s): " +msgid "Updating appstream data for user remote %s" +msgstr "Memperbarui data appstream untuk remote pengguna %s" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "LOKASI - Perbarui metadata repositori" +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 +#, c-format +msgid "Updating appstream data for remote %s" +msgstr "Memperbarui data appstream untuk remote %s" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Memperbarui cabang appstream\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "Galat memperbarui" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Memperbarui ringkasan\n" +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Remote \"%s\" tidak ditemukan" -#: app/flatpak-builtins-repo-update.c:534 +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 #, c-format -msgid "Total objects: %u\n" -msgstr "Total objek: %u\n" +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "Diperlukan runtime untuk %s (%s) ditemukan di remote %s\n" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Tidak ada objek yang tidak terjangkau\n" +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "Apakah Anda ingin memasangnya?" -#: app/flatpak-builtins-repo-update.c:538 +#: app/flatpak-cli-transaction.c:86 #, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u objek dihapus, %s dibebaskan\n" - -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" -msgstr "Perintah untuk menjalankan" +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "Diperlukan runtime untuk %s (%s) ditemukan di remote: %s\n" -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" -msgstr "Cabang untuk digunakan" +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Mana yang ingin Anda pasang (0 untuk membatalkan)?" -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" -msgstr "Gunakan runtime pengembangan" +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Mengonfigurasi %s sebagai remote baru '%s'" -#: app/flatpak-builtins-run.c:56 -msgid "Runtime to use" -msgstr "Runtime untuk digunakan" +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"Remote '%s', yang dirujuk oleh '%s' pada lokasi %s berisi aplikasi " +"tambahan.\n" +"Haruskah remote disimpan untuk pemasangan di masa depan?" -#: app/flatpak-builtins-run.c:57 -msgid "Runtime version to use" -msgstr "Versi runtime untuk digunakan" +#: app/flatpak-cli-transaction.c:123 +#, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Aplikasi %s bergantung pada runtime dari:\n" +"   %s\n" +"Konfigurasikan ini sebagai remote baru '%s'" -#: app/flatpak-builtins-run.c:60 -msgid "Log accessibility bus calls" -msgstr "Catat log aksesibilitas bus sesi" +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "pasang" -#: app/flatpak-builtins-run.c:61 -msgid "Enable file forwarding" -msgstr "Aktifkan penerusan berkas" +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "pembaruan" -#: app/flatpak-builtins-run.c:82 -msgid "APP [args...] - Run an app" -msgstr "APL [argumen...] - Jalankan aplikasi" +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "pasang bundel" -#: app/flatpak-builtins-search.c:239 -msgid "TEXT - Search remote apps/runtimes for text" -msgstr "TEXT - Cari aplikasi remote/runtime untuk teks" +#: app/flatpak-cli-transaction.c:147 +msgid "uninstall" +msgstr "hapus pemasangan" -#: app/flatpak-builtins-search.c:249 -msgid "TEXT must be specified" -msgstr "TEXT harus ditentukan" +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Memasang untuk pengguna: %s dari %s\n" -#: app/flatpak-builtins-search.c:305 -msgid "Application ID" -msgstr "ID Aplikasi" +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Memasang: %s dari %s\n" -#: app/flatpak-builtins-search.c:306 -msgid "Version" -msgstr "Versi" +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Memperbarui untuk pengguna: %s dari %s\n" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" -msgstr "Cabang" +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Memperbarui: %s dari %s\n" -#: app/flatpak-builtins-search.c:310 -msgid "Remotes" -msgstr "Remote" +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Memasang untuk pengguna: %s dari bundel %s\n" -#: app/flatpak-builtins-search.c:311 -msgid "Description" -msgstr "Deskripsi" +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "" +"Memasang: %s dari bundel %s\n" +"\n" -#: app/flatpak-builtins-search.c:320 -msgid "No matches found" -msgstr "Tidak ditemukan kecocokan" +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Hapus pemasangan untuk pengguna: %s\n" -#: app/flatpak-builtins-uninstall.c:44 -msgid "Arch to uninstall" -msgstr "Arsitektur untuk dihapus" +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Menghapus pemasangan: %s\n" -#: app/flatpak-builtins-uninstall.c:45 -msgid "Keep ref in local repository" -msgstr "Simpan ref di repositori lokal" +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Tidak ada pembaruan.\n" -#: app/flatpak-builtins-uninstall.c:46 -msgid "Don't uninstall related refs" -msgstr "Jangan hapus ref terkait" +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Sekarang di %s.\n" -#: app/flatpak-builtins-uninstall.c:47 -msgid "Remove files even if running" -msgstr "Hapus berkas meski berjalan" +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Peringatan: Gagal untuk %s %s: %s\n" -#: app/flatpak-builtins-uninstall.c:70 -msgid "REF... - Uninstall an application" -msgstr "REF... - Hapus aplikasi" +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "Gagal untuk %s %s: " -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" -msgstr "Harus menentukan setidaknya satu REF" +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Galat: Gagal untuk %s %s: %s\n" -#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 +#: app/flatpak-cli-transaction.c:350 #, c-format -msgid "Warning: Problem looking for related refs: %s\n" -msgstr "Peringatan: Masalah mencari ref terkait: %s\n" +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "Peringatan:%s adalah akhir masa pakai, dalam preferensi %s\n" -#: app/flatpak-builtins-uninstall.c:164 +#: app/flatpak-cli-transaction.c:354 #, c-format -msgid "Uninstalling: %s\n" -msgstr "Mencopot: %s\n" +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "Peringatan:%s adalah akhir masa pakai, dengan alasan: %s\n" -#: app/flatpak-builtins-update.c:53 -msgid "Arch to update for" -msgstr "Arsitektur untuk pembaruan" +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "izin baru" -#: app/flatpak-builtins-update.c:54 -msgid "Commit to deploy" -msgstr "Komit untuk deploy" +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "izin" -#: app/flatpak-builtins-update.c:55 -msgid "Remove old files even if running" -msgstr "Hapus berkas lama meski berjalan" +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "akses berkas baru" -#: app/flatpak-builtins-update.c:56 -msgid "Don't pull, only update from local cache" -msgstr "Jangan tarik, hanya perbarui dari cache lokal" +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "akses berkas" -#: app/flatpak-builtins-update.c:58 -msgid "Don't update related refs" -msgstr "Jangan memperbarui ref terkait" +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "akses dbus baru" -#: app/flatpak-builtins-update.c:63 -msgid "Update appstream for remote" -msgstr "Perbarui appstream untuk remote" +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "akses dbus" -#: app/flatpak-builtins-update.c:64 -msgid "Only update this subpath" -msgstr "Hanya perbarui subpath ini" +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "kepemilikan dbus baru" -#: app/flatpak-builtins-update.c:83 -msgid "[REF...] - Update applications or runtimes" -msgstr "[REF...] - Perbarui aplikasi atau runtime" +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "kepemilikan dbus" -#: app/flatpak-builtins-update.c:119 -msgid "Looking for updates...\n" -msgstr "" -"Mencari pembaruan...\n" -"\n" +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "akses sistem dbus baru" -#: 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-cli-transaction.c:529 +msgid "system dbus access" +msgstr "akses sistem dbus" -#: 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-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "kepemilikan sistem dbus baru" -#: 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-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "kepemilikan sistem dbus" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "tag baru" -#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "tanda" + +#: app/flatpak-cli-transaction.c:564 #, c-format -msgid "Updating appstream data for user remote %s\n" -msgstr "Memperbarui data appstream untuk remote pengguna %s\n" +msgid "Uninstalling from %s:\n" +msgstr "Menghapus pemasangan dari %s:\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-cli-transaction.c:586 #, c-format -msgid "Updating appstream data for remote %s\n" -msgstr "Memperbarui data appstream untuk remote %s\n" +msgid "Installing in %s:\n" +msgstr "Memasang dalam: %s\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-cli-transaction.c:623 #, c-format -msgid "Error updating: %s\n" -msgstr "Galat memperbarui: %s\n" +msgid "Updating in %s:\n" +msgstr "Memperbarui dalam %s:\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "Apakah ini ok" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-cli-transaction.c:728 #, c-format -msgid "Remote \"%s\" not found" -msgstr "Remote \"%s\" tidak ditemukan" +msgid "Skipping: %s\n" +msgstr "Melewatkan: %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "Ada satu galat atau lebih" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1872,20 +2476,28 @@ msgid "Uninstall an installed application or runtime" msgstr "Hapus aplikasi yang terpasang atau runtime" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Daftar aplikasi dan/atau runtime yang terpasang" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Tampilkan info untuk aplikasi yang terpasang atau runtime" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Konfigurasi flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +msgid "Repair flatpak installation" +msgstr "Perbaiki pemasangan flatpak" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "Pasang aplikasi dan/atau runtime ke media lepasan" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" @@ -1893,12 +2505,12 @@ "\n" "Menemukan aplikasi dan runtime" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "Cari aplikasi remote/runtime" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1906,24 +2518,28 @@ "\n" " Menjalankan aplikasi" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Menjalankan aplikasi" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Timpa perizinan untuk aplikasi" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Tentukan versi bawaan untuk dijalankan" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Masukkan namespace aplikasi yang sedang berjalan" +#: app/flatpak-main.c:84 +msgid "Enumerate running applications" +msgstr "Enumerasikan aplikasi yang sedang berjalan" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1931,24 +2547,49 @@ "\n" " Kelola akses berkas" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Berikan akses aplikasi ke berkas tertentu" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Cabut akses ke berkas tertentu" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Tampilkan informasi tentang berkas tertentu" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Daftar berkas yang diekspor" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" +"\n" +"Kelola izin dinamis" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "Hapus butir dari menyimpan perizinan" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "Izin daftar" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "Tampilkan izin aplikasi" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "Atur ulang izin aplikasi" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1956,32 +2597,32 @@ "\n" " Kelola repositori remote" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Daftar semua remote yang dikonfigurasi" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Tambahkan repositori remote baru (menurut URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modifikasi properti dari remote yang terkonfigurasi" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Hapus remote yang terkonfigurasi" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Daftar isi dari remote yang terkonfigurasi" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -1989,98 +2630,93 @@ "\n" " Bangun aplikasi" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inisialisasi direktori untuk membangun" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Jalankan perintah bangun di dalam direktori bangun" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Selesaikan direktori bangun untuk ekspor" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Ekspor direktori bangun ke repositori" -#: app/flatpak-main.c:104 -#, fuzzy +#: app/flatpak-main.c:116 msgid "Create a bundle file from a ref in a local repository" -msgstr "Buat berkas bundel dari direktori bangun" +msgstr "Buat berkas bundel dari ref pada repositori lokal" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Impor berkas bundel" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Menandatangani sebuah aplikasi atau runtime" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Perbarui berkas ringkasan dalam repositori" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Buat komit baru berdasarkan ref yang ada" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Cetak informasi tentang repo" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 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:127 +#: app/flatpak-main.c:139 msgid "Print OSTree debug information during command processing" msgstr "Cetak informasi awakutu OSTree selama pemrosesan perintah" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Tampilkan opsi bantuan" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Cetak informasi versi dan keluar" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Cetak arsitektur bawaan dan keluar" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Cetak arsitektur yang didukung dan keluar" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Cetak penggerak gl aktif dan keluar" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Bekerja pada pemasangan pengguna" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Bekerja pada pemasangan di seluruh sistem (bawaan)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" msgstr "Bekerja pada pemasangan seluruh sistem yang spesifik" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NAMA" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Perintah Terpasang:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" @@ -2088,191 +2724,50 @@ "Opsi --installation digunakan berkali-kali untuk sebuah perintah yang " "bekerja pada satu pemasangan" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Perintah tidak dikenal '%s'" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Tidak ada perintah yang ditentukan" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "galat:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Ditemukan di beberapa remote:\n" - -#: 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: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: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: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 tidak terpasang" - -#: 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:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s sudah terpasang, melewati\n" - -#: 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: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: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:765 -msgid "update" -msgstr "pembaruan" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Sekarang di %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Tidak ada pembaruan.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "pasang bundel" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Peringatan: Gagal untuk %s %s: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "Satu atau beberapa operasi gagal" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Tipe berbagi %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Tipe kebijakan %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-context.c:248 +#: common/flatpak-context.c:251 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Nama dbus %s tidak valid\n" +msgid "Invalid dbus name %s" +msgstr "Nama dbus %s tidak valid" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Tipe soket %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Tipe perangkat %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Tipe fitur %s tidak diketahui, tipe yang valid adalah: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2281,480 +2776,1001 @@ "Lokasi sistem berkas %s tidak diketahui, lokasi yang valid adalah: host, " "home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Format env tidak valid %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Berbagi dengan host" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "BERBAGI" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Tidak berbagi dengan host" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Ekspos soket ke aplikasi" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Jangan ekspos soket ke aplikasi" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Ekspos perangkat ke aplikasi" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "PERANGKAT" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Jangan ekspos perangkat ke aplikasi" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Izinkan fitur" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FITUR" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Jangan izinkan fitur" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Ekspos sistem berkas ke aplikasi (:ro untuk hanya baca)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SISTEMBERKAS[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Jangan ekspos sistem berkas ke aplikasi" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SISTEMBERKAS" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Atur variabel lingkungan" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VAR=NILAI" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Izinkan aplikasi memiliki nama di bus sesi" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "DBUS_NAME" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Izinkan aplikasi berbicara dengan nama di bus sesi" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Izinkan aplikasi memiliki nama di bus sistem" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Izinkan aplikasi berbicara dengan nama di bus sistem" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Tambahkan opsi kebijakan umum" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEM.KUNCI=NILAI" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Hapus opsi kebijakan umum" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Direktori home yang tetap" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NAMABERKAS" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Tidak memerlukan sesi berjalan (tidak ada pembuatan cgroups)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Saat menarik %s dari remote %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Memperbarui metadata ekstra dari ringkasan remote untuk %s\n" + +#: common/flatpak-dir.c:284 +#, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Tidak ada ref (%s, %s) pada remote %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Tidak ada ref '%s' pada remote %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Tidak ada cache flatpak dalam ringkasan remote '%s'" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Tidak ada entri untuk %s dalam ringkasan remote cache flatpak '%s' " + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Tidak ada entri untuk %s dalam ringkasan remote sparse cache flatpak " + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "Tidak dapat terhubung ke bus sistem" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Tidak ada penimpaan yang ditemukan untuk %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s tidak terpasang" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "%s (komit %s) tidak dipasang" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Saat membuka repositori %s: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Komit untuk deploy" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 msgid "Can't create deploy directory" msgstr "Tidak dapat membuat direktori 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 tidak valid untuk data ekstra uri %s" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Tidak ada ref (%s, %s) pada remote %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Gagal menemukan revisi terbaru untuk %s dari remote %s: %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Checksum tidak valid untuk data ekstra %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "Nama kosong untuk data ekstra uri %s" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Data ekstra yang tidak didukung uri %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Gagal memuat data-ekstra lokal %s: %s" -#: common/flatpak-dir.c:2790 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Ukuran yang salah untuk data-ekstra %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Saat mengunduh %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Ukuran yang salah untuk data ekstra %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Checksum tidak valid untuk data ekstra %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" msgstr "Indeks remote OCI tidak memiliki registry uri" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, c-format msgid "%s commit %s already installed" msgstr "%s komit %s sudah terpasang" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Saat menarik %s dari remote %s: " -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Tidak ditemukan kecocokan" + +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Tidak dapat menemukan %s di remote %s" +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Memori tidak cukup" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Gagal membaca dari berkas yang diekspor" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Kesalahan saat membaca berkas xml mimetype" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Berkas xml mimetype tidak valid" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Saat mendapatkan metadata yang terpisah: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Saat mendapatkan metadata yang terpisah: " + +#: common/flatpak-dir.c:6308 msgid "While creating extradir: " msgstr "Saat membuat direktori ekstra: " -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" -msgstr "Sha256 tidak valid untuk data ekstra" +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Checksum tidak valid untuk data ekstra" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 msgid "Wrong size for extra data" msgstr "Ukuran yang salah untuk data ekstra" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" -msgstr "Checksum tidak valid untuk data ekstra" - -#: common/flatpak-dir.c:5170 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Saat menulis berkas data ekstra '%s': " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Saat mendapatkan metadata yang terpisah: " + +#: common/flatpak-dir.c:6557 #, c-format msgid "apply_extra script failed, exit status %d" -msgstr "Skrip apply_extra gagal, status keluar %d" +msgstr "skrip apply_extra gagal, status keluar %d" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Saat mencoba menyelesaikan ref %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, c-format msgid "%s is not available" msgstr "%s tak tersedia" -#: 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s cabang %s sudah terpasang" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Gagal membaca komit %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, c-format msgid "While trying to checkout %s into %s: " msgstr "Saat mencoba melakukan checkout %s ke %s: " -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Saat mencoba melakukan checkout metadata subpath: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Saat mencoba melakukan checkout subpath ‘%s’: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Saat mencoba menghapus direktori tambahan yang ada: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Saat mencoba menerapkan data tambahan: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Ref %s yang dideploy tidak valid: " -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Komit ref %s tidak valid: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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:5615 +#: common/flatpak-dir.c:6836 #, 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:5623 +#: common/flatpak-dir.c:6844 #, 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:5629 +#: common/flatpak-dir.c:6850 #, 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:5635 +#: common/flatpak-dir.c:6856 #, 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:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Metadata yang dideploy tidak cocok dengan komit" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, c-format msgid "This version of %s is already installed" msgstr "Versi %s ini sudah terpasang" -#: common/flatpak-dir.c:6540 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "Tidak dapat mengubah remote saat memasang paket" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, c-format +msgid "%s branch already installed" +msgstr "%s cabang sudah terpasang" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s cabang %s tidak terpasang" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s cabang %s tidak terpasang" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "Repo pemangkasan gagal: %s" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Tidak ada ringkasan atau cache Flatpak yang tersedia untuk remote %s" + +#: common/flatpak-dir.c:9716 #, 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:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Tidak ada yang cocok dengan %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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:8300 +#: common/flatpak-dir.c:9884 #, c-format msgid "Error searching remote %s: %s" msgstr "Galat mencari remote %s: %s" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, c-format msgid "Error searching local repository: %s" msgstr "Galat mencari repositori lokal: %s" -#: common/flatpak-dir.c:8471 +#: common/flatpak-dir.c:10114 #, c-format -msgid "%s %s not installed" -msgstr "%s %s tidak terpasang" +msgid "%s/%s/%s not installed" +msgstr "%s/%s/%s tidak terpasang" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Tidak dapat menemukan pemasangan %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Kunci gpg tidak valid" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Format berkas tidak valid" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Format berkas tidak valid" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Format berkas tidak valid" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Runtime %s, cabang %s telah terpasang" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, c-format msgid "App %s, branch %s is already installed" msgstr "Aplikasi %s, cabang %s sudah terpasang" -#: common/flatpak-dir.c:9717 -msgid "Remote title not set" -msgstr "Judul remote tidak diatur" - -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" -msgstr "Cabang bawaaan remote tidak diatur" +#: common/flatpak-dir.c:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Tidak ada cache flatpak dalam ringkasan remote" +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Tidak ada ref '%s' pada remote %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Tidak ada entri untuk %s dalam ringkasan remote cache flatpak " +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Cetak metadata untuk cabang" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s tidak terpasang" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s tidak terpasang" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Ekstensi %s yang diminta hanya terpasang sebagian" + +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Gagal membuka berkas temporer flatpak-info: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Gagal membuka berkas temporer: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" + +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Galat saat migrasi: %s\n" + +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Tidak ada remote %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Tidak ada perintah yang ditentukan" + +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" +msgstr "Gagal membuka berkas info aplikasi" -#: common/flatpak-run.c:1883 +#: common/flatpak-run.c:790 msgid "Unable to create sync pipe" msgstr "Tidak dapat membuat pipa sinkronisasi" -#: 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:1940 +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Gagal melakukan sinkronisasi dengan proksi dbus" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Gagal membuka berkas temporer: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Tidak dapat membuat pipa sinkronisasi" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Gagal membuka berkas flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Gagal membuka berkas brwapinfo.json: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Menginisialisasi aplikasi dari aplikasi yang disebut" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Gagal menulis ke berkas sementara" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Gagal untuk %s %s: " + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Gagal membaca dari berkas yang diekspor" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Pid %s tidak valid" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig gagal, status keluar %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Tidak dapat membuka namespace %s: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Jumlah argumen salah" + +#: common/flatpak-transaction.c:1347 +#, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Peringatan: Masalah mencari ref terkait: %s" + +#: common/flatpak-transaction.c:1417 +#, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Aplikasi %s membutuhkan runtime %s yang tidak ditemukan" + +#: common/flatpak-transaction.c:1433 +#, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Aplikasi %s membutuhkan runtime %s yang tidak dipasang" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Remote %s dinonaktifkan, mengabaikan pembaruan %s" + +#: common/flatpak-transaction.c:1583 +#, c-format +msgid "%s is already installed" +msgstr "%s sudah dipasang" + +#: common/flatpak-transaction.c:1586 +#, c-format +msgid "%s is already installed from remote %s" +msgstr "%s sudah dipasang dari remote %s" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Argumen require-flatpak %s tidak valid\n" + +#: common/flatpak-transaction.c:1787 +#, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Galat memperbarui metadata remote untuk '%s': %s" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" +"Peringatan: Memperlakukan kesalahan pengambilan remote sebagai non-fatal " +"sejak %s sudah dipasang: %s" + +#: common/flatpak-transaction.c:2035 +#, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Peringatan: Tidak dapat menemukan metadata %s untuk dependensi: %s" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Argumen require-flatpak %s tidak valid\n" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "Dibatalkan oleh pengguna" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "Melewatkan %s karena galat sebelumnya" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "Dibatalkan karena gagal" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "Migrasi %s ke %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Galat saat migrasi: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Jumlah argumen salah" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Menandatangani sebuah aplikasi atau runtime" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Nama dbus %s tidak valid" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Pid %s tidak valid" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "Cabang bawaan: %s\n" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Pid %s tidak valid" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Tidak ada sumber data tambahan" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "Mengekstrak ikon untuk komponen %s\n" + +#: common/flatpak-utils.c:3716 +#, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Galat menyalin ikon 64x64: %s\n" + +#: common/flatpak-utils.c:3721 +#, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Galat menyalin ikon 128x128: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "%s is end-of-life, ignoring\n" + +#: common/flatpak-utils.c:3926 +#, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Tidak ada data appstream untuk %s: %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Checksum tidak valid untuk data ekstra" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Mengunduh metadata: %u /(perkiraan) %s" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Mengunduh: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Mengunduh data ekstra: %s/%s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Mengunduh berkas: %d/%d %s" +#: common/flatpak-utils.c:5782 +#, fuzzy, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "Argumen require-flatpak %s tidak valid\n" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s membutuhkan versi flatpak kelak (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "String kosong bukan angka" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "\"%s\" bukan bilangan tak bertanda" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "Nomor \"%s\" berada di luar batas [%s, %s]" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2768,7 +3784,7 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:41 #: system-helper/org.freedesktop.Flatpak.policy.in:118 msgid "Authentication is required to install software" -msgstr "Otentikasi diperlukan untuk memasang perangkat lunak" +msgstr "Autentikasi diperlukan untuk memasang perangkat lunak" #. SECURITY: #. - Normal users do not need authentication to install signed applications @@ -2793,7 +3809,7 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:77 #: system-helper/org.freedesktop.Flatpak.policy.in:180 msgid "Authentication is required to update software" -msgstr "Otentikasi diperlukan untuk memperbarui perangkat lunak" +msgstr "Autentikasi diperlukan untuk memperbarui perangkat lunak" #. SECURITY: #. - Normal users do not require admin authentication to update a @@ -2814,7 +3830,7 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:92 msgid "Authentication is required to update remote info" -msgstr "Otentikasi diperlukan untuk memperbarui info remote" +msgstr "Autentikasi diperlukan untuk memperbarui info remote" #. SECURITY: #. - Normal users do not need authentication to modify the @@ -2825,7 +3841,7 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:107 msgid "Authentication is required to update the system repository" -msgstr "Otentikasi diperlukan untuk memperbarui repositori sistem" +msgstr "Autentikasi diperlukan untuk memperbarui repositori sistem" #: system-helper/org.freedesktop.Flatpak.policy.in:117 msgid "Install bundle" @@ -2838,11 +3854,11 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:129 #: system-helper/org.freedesktop.Flatpak.policy.in:140 msgid "Authentication is required to uninstall software" -msgstr "Otentikasi diperlukan untuk menghapus perangkat lunak" +msgstr "Autentikasi diperlukan untuk menghapus perangkat lunak" #: system-helper/org.freedesktop.Flatpak.policy.in:139 msgid "Uninstall app" -msgstr "Hapus aplikasi" +msgstr "Hapus pemasangan aplikasi" #: system-helper/org.freedesktop.Flatpak.policy.in:150 msgid "Configure Remote" @@ -2850,7 +3866,8 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:151 msgid "Authentication is required to configure software repositories" -msgstr "Otentikasi diperlukan untuk mengkonfigurasi repositori perangkat lunak" +msgstr "" +"Autentikasi diperlukan untuk mengkonfigurasi repositori perangkat lunak" #: system-helper/org.freedesktop.Flatpak.policy.in:161 msgid "Configure" @@ -2858,7 +3875,8 @@ #: system-helper/org.freedesktop.Flatpak.policy.in:162 msgid "Authentication is required to configure software installation" -msgstr "Otentikasi diperlukan untuk mengkonfigurasi pemasangan perangkat lunak" +msgstr "" +"Autentikasi diperlukan untuk mengkonfigurasi pemasangan perangkat lunak" #. SECURITY: #. - Normal users do not require admin authentication to update @@ -2870,11 +3888,65 @@ msgid "Update appstream" msgstr "Perbarui appstream" -#~ msgid "No remote %s" -#~ msgstr "Tidak ada remote %s" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Sha256 tidak valid untuk data ekstra uri %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Sha256 tidak valid untuk data ekstra" -#~ msgid "Search only user installations" -#~ msgstr "Cari hanya pemasangan pengguna" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "Mengalihkan ID koleksi: %s\n" + +#~ msgid "Is this ok?" +#~ msgstr "Apakah ini ok?" + +#~ msgid "Add OCI registry" +#~ msgstr "Tambah registri OCI" + +#~ msgid "Installing: %s\n" +#~ msgstr "Memasang: %s\n" + +#~ msgid "Found in remote %s\n" +#~ msgstr "" +#~ "Ditemukan di remote %s\n" +#~ "\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Ditemukan di remote %s, apakah Anda ingin memasangnya?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Ditemukan di beberapa remote:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s sudah terpasang, melewati\n" + +#~ msgid "fetch remote info" +#~ msgstr "ambil info remote" + +#~ msgid "One or more operations failed" +#~ msgstr "Satu atau beberapa operasi gagal" + +#~ msgid "" +#~ "/var/tmp does not suport xattrs which is needed for system-wide " +#~ "installation as a user. FLATPAK_SYSTEM_CACHE_DIR can be used to set an " +#~ "alternative path." +#~ msgstr "" +#~ "/var/tmp tidak mendukung xattrs yang diperlukan untuk pemasangan pada " +#~ "seluruh sistem sebagai pengguna. FLATPAK_SYSTEM_CACHE_DIR dapat digunakan " +#~ "untuk menetapkan path alternatif." + +#~ msgid "No ref information available in repository" +#~ msgstr "Tidak ada informasi ref yang tersedia dalam repositori" + +#~ msgid "Remote title not set" +#~ msgstr "Judul remote tidak diatur" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Cabang bawaaan remote tidak diatur" #~ msgid "Search only system-wide installations" #~ msgstr "Cari hanya pemasangan di seluruh sistem" @@ -2888,12 +3960,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Gagal menghapus tautan berkas sementara" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Gagal menulis ke berkas sementara" - -#~ msgid "Could not parse URI “%s”" -#~ msgstr "Tidak dapat mengurai URI \"%s\"" - #~ msgid "Building %s" #~ msgstr "Membangun %s" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/pl.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/pl.gmo differ diff -Nru flatpak-0.11.3/po/pl.po flatpak-1.0.7/po/pl.po --- flatpak-0.11.3/po/pl.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/pl.po 2019-02-11 12:42:42.000000000 +0000 @@ -1,15 +1,15 @@ # Polish translation for flatpak. -# Copyright © 2016-2017 the flatpak authors. +# Copyright © 2016-2018 the flatpak authors. # This file is distributed under the same license as the flatpak package. -# Piotr Drąg , 2016-2017. -# Aviary.pl , 2016-2017. +# Piotr Drąg , 2016-2018. +# Aviary.pl , 2016-2018. # msgid "" msgstr "" "Project-Id-Version: flatpak\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2017-12-21 19:22+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2018-10-28 17:27+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" @@ -19,212 +19,6 @@ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Nie robi nic, jeśli podane repozytorium istnieje" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "POŁOŻENIE podaje plik konfiguracji, nie położenie repozytorium" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Włącza sprawdzanie poprawności GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Oznacza repozytorium jako wyliczeniowe" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Oznacza repozytorium jako używane dla zależności" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Ustawia nowy adres URL" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Włącza repozytorium" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Aktualizuje dodatkowe metadane z pliku podsumowania" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Wyłącza sprawdzanie poprawności GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Oznacza repozytorium jako niewyliczeniowe" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Oznacza repozytorium jako nieużywane dla zależności" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Ustawia priorytet (domyślnie 1, wyższy numer to wyższy priorytet)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORYTET" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Czytelna nazwa tego repozytorium" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TYTUŁ" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Domyślna gałąź używana dla tego repozytorium" - -#: 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 -msgid "BRANCH" -msgstr "GAŁĄŹ" - -#: 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 "Identyfikator kolekcji" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "IDENTYFIKATOR-KOLEKCJI" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Wyłącza repozytorium" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Dodaje rejestr OCI" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Repozytorium %s już istnieje" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NAZWA — modyfikuje zdalne repozytorium" - -#: 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: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: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: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:56 msgid "Export runtime instead of app" msgstr "Eksportuje środowisko wykonawcze zamiast programu" @@ -234,12 +28,13 @@ msgstr "Architektura pakietu" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTURA" @@ -247,6 +42,14 @@ msgid "Url for repo" msgstr "Adres URL do repozytorium" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Adres URL do pliku repozytorium Flatpak środowiska wykonawczego" @@ -255,6 +58,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "PLIK" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Eksportuje obraz OCI zamiast pakietu Flatpak" @@ -264,39 +75,42 @@ msgstr "Identyfikator klucza GPG do podpisania obrazu OCI" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "IDENTYFIKATOR-KLUCZA" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "Katalog domowy GPG do wyszukiwania baz kluczy" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "KATALOG-DOMOWY" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +msgstr "Zatwierdzenie OSTree, z którego utworzyć pakiet delty" -#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "ZATWIERDZENIE" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -304,25 +118,46 @@ "POŁOŻENIE NAZWA-PLIKU NAZWA [GAŁĄŹ] — tworzy pakiet w jednym pliku " "z lokalnego repozytorium" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 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: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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Za dużo parametrów" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s” nie jest prawidłowym repozytorium" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "„%s” nie jest prawidłową nazwą: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s” nie jest prawidłową nazwą gałęzi: %s" @@ -350,7 +185,7 @@ msgstr "Rozpoczyna budowanie w tym katalogu" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "KATALOG" @@ -360,11 +195,11 @@ "Gdzie szukać niestandardowego katalogu środowiska programistycznego " "(domyślnie „usr”)" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Używa alternatywnego pliku dla metadanych" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Usuwa procesy po usunięciu procesu nadrzędnego" @@ -372,380 +207,431 @@ msgid "Export application homedir directory to build" msgstr "Eksportuje katalog domowy programu do budowania" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Zapisywanie wywołań magistrali systemu w dzienniku" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "KATALOG [POLECENIE [parametry…]] — buduje w katalogu" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "Należy podać KATALOG" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "" "nieprawidłowe metadane, nie jest programem lub środowiskiem wykonawczym" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Brak „=” w opcji montowania dowiązania „%s”" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Nie można uruchomić programu" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Źródłowy katalog repozytorium" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "REPOZYTORIUM-ŹRÓDŁOWE" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Źródłowe odniesienie repozytorium" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "ODNIESIENIE-ŹRÓDŁOWE" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Jednowierszowy temat" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "TEMAT" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Pełny opis" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TREŚĆ" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Aktualizuje gałąź AppStream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Bez aktualizowania podsumowania" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "Identyfikator klucza GPG do podpisania zatwierdzenia" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "Oznacza wersję jako niewspieraną" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "POWÓD" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Zastępuje czas zatwierdzenia („NOW” oznacza obecny czas)" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "CZAS" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "Należy podać REPOZYTORIUM-DOCELOWE" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "Nie można przetworzyć „%s”" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: brak zmian\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Architektura eksportu (musi być zgodna z komputerem)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Zatwierdza środowisko wykonawcze (/usr), nie /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Używa alternatywnego katalogu dla plików" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "PODKATALOG" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Wykluczone pliki" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "WZÓR" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Wykluczone pliki do dołączenia" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Zastępuje czas zatwierdzenia" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "CZAS-ISO-8601" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "Identyfikator kolekcji" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, 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 +#: app/flatpak-builtins-build-export.c:353 #, 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 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, 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 +#: app/flatpak-builtins-build-export.c:389 #, 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 +#: app/flatpak-builtins-build-export.c:417 #, 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 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "" "Nieprawidłowy typ adresu URI %s, obsługiwane są tylko adresy HTTP/HTTPS" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Nie można odnaleźć podstawowej nazwy w %s, należy podać nazwę" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Ukośniki są niedozwolone w nazwach dodatkowych danych" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Nieprawidłowy format sumy kontrolnej SHA256: „%s”" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Dodatkowe dane o zerowym rozmiarze są nieobsługiwane" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "POŁOŻENIE KATALOG [GAŁĄŹ] — tworzy repozytorium z katalogu budowania" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "Należy podać POŁOŻENIE i KATALOG" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "„%s” nie jest prawidłowym identyfikatorem kolekcji: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Nie podano nazwy w metadanych" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Zatwierdzenie: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Razem metadanych: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Zapisane metadane: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Razem treść: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Zapisana treść: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Zapisane bajty treści:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "Ustawiane polecenie" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "POLECENIE" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Wymagana wersja Flatpak" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "WIĘKSZA.MNIEJSZA.MIKRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Bez przetwarzania eksportów" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Informacje o dodatkowych danych" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Dodaje informacje o punkcie rozszerzeń" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NAZWA=ZMIENNA[=WARTOŚĆ]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "Usuwa informacje o punkcie rozszerzeń" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NAZWA" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Ustawia priorytet rozszerzenia (tylko dla rozszerzeń)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Zmienia środowisko programistyczne używane dla programu" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "ŚRODOWISKO-PROGRAMISTYCZNE" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Zatwierdza środowisko wykonawcze używane dla programu" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "ŚRODOWISKO-WYKONAWCZE" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Ustawia opcję ogólnych metadanych" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUPA=KLUCZ[=WARTOŚĆ]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +msgid "Don't inherit permissions from runtime" +msgstr "Bez dziedziczenia uprawnień ze środowiska wykonawczego" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "%s nie zostanie wyeksportowane, błędne rozszerzenie\n" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" -msgstr "%s nie zostanie wyeksportowane, błędny przedrostek\n" +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "%s nie zostanie wyeksportowane, niedozwolona nazwa pliku eksportu\n" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "Eksportowanie %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "Odnaleziono więcej niż jeden plik wykonywalny\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "Używanie %s jako polecenia\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Nie odnaleziono żadnych plików wykonywalnych\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Za mało elementów w parametrze %s opcji --extra-data" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -754,7 +640,8 @@ "Za mało elementów w parametrze %s opcji --metadata, musi być w formacie " "GRUPA=KLUCZ[=WARTOŚĆ]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -763,21 +650,21 @@ "Za mało elementów w parametrze %s opcji --extension, musi być w formacie " "NAZWA=ZMIENNA[=WARTOŚĆ]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "KATALOG — finalizuje katalog budowania" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Nie zainicjowano katalogu budowania %s" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Już sfinalizowano katalog budowania %s" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Proszę przejrzeć wyeksportowane pliki i metadane\n" @@ -793,144 +680,152 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importuje obraz OCI zamiast pakietu Flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Nie odnaleziono odniesienia „%s” w rejestrze" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "Importowanie %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "POŁOŻENIE NAZWA-PLIKU — importuje pakiet plików do lokalnego repozytorium" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Używana architektura" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Inicjuje zmienną z nazwanego środowiska wykonawczego" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Inicjuje programy z nazwanego programu" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "PROGRAM" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Podaje wersję dla opcji --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "WERSJA" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Dołącza to podstawowe rozszerzenie" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "ROZSZERZENIE" -#: app/flatpak-builtins-build-init.c:54 -msgid "Initialize /usr with a writable copy of the sdk" +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "Etykieta rozszerzenia używana, jeśli budowane jest rozszerzenie" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "ETYKIETA_ROZSZERZENIA" + +#: app/flatpak-builtins-build-init.c:58 +msgid "Initialize /usr with a writable copy of the sdk" msgstr "Inicjuje /usr z zapisywalną kopią środowiska programistycznego" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "" "Podaje typ budowania, jedno z „app” (program), „runtime” (środowisko " "wykonawcze) lub „extension” (rozszerzenie)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TYP" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Dodaje etykietę" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ETYKIETA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Dołącza to rozszerzenie środowiska programistycznego w /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Gdzie przechowywać środowisko programistyczne (domyślnie „usr”)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Ponownie inicjuje środowisko programistyczne/zmienną" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Żądane rozszerzenie %s jest tylko częściowo zainstalowane" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Nie zainstalowano żądanego rozszerzenia %s" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "KATALOG NAZWA-PROGRAMU ŚRODOWISKO-PROGRAMISTYCZNE [GAŁĄŹ] — inicjuje katalog " "do budowania" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "Należy podać ŚRODOWISKO-WYKONAWCZE" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s” nie jest prawidłową nazwą programu: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Już zainicjowano katalog budowania %s" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Instalowana architektura" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Wyszukuje środowisko wykonawcze o podanej nazwie" @@ -940,10 +835,121 @@ "POŁOŻENIE [IDENTYFIKATOR [GAŁĄŹ]] — podpisuje program lub środowisko " "wykonawcze" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "Należy podać POŁOŻENIE" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Nie podano identyfikatorów kluczy GPG" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Przekierowuje to repozytorium do nowego adresu URL" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Czytelna nazwa używana dla tego repozytorium" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TYTUŁ" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Domyślna gałąź używana dla tego repozytorium" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "GAŁĄŹ" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "IDENTYFIKATOR-KOLEKCJI" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" +"Trwale wdraża identyfikator kolekcji do konfiguracji repozytoriów klienta" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importuje nowy domyślny klucz publiczny GPG z PLIKU" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "Identyfikator klucza GPG do podpisania podsumowania" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Tworzy pliki delty" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Usuwa nieużywane obiekty" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Przechodzi tylko przez podaną GŁĘBIĘ elementów nadrzędnych każdego " +"zatwierdzenia (domyślnie: -1=nieskończoność)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "GŁĘBIA" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Tworzenie delty: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Tworzenie delty: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Utworzenie delty %s się nie powiodło (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Utworzenie delty %s się nie powiodło (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "POŁOŻENIE — aktualizuje metadane repozytorium" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Aktualizowanie danych AppStream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Aktualizowanie podsumowania\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Razem obiektów: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Brak nieosiągalnych obiektów\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Usunięto %u obiektów, uwolniono %s\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "Wyświetla listę kluczy i wartości konfiguracji" @@ -960,34 +966,119 @@ msgid "Unset configuration for KEY" msgstr "Usuwa ustawienie konfiguracji KLUCZA" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, c-format msgid "Unknown configure key '%s'" msgstr "Nieznany klucz konfiguracji „%s”" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Należy podać klucz" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "Należy podać klucz i wartość" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[KLUCZ [WARTOŚĆ]] — zarządza konfiguracją" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Wyszukuje program o podanej nazwie" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NAZWA — usuwa zdalne repozytorium" +#: app/flatpak-builtins-create-usb.c:44 +msgid "Arch to copy" +msgstr "Kopiowana architektura" + +#: app/flatpak-builtins-create-usb.c:45 +msgid "DEST" +msgstr "CEL" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" +"Ostrzeżenie: pomijanie powiązanego odniesienia „%s”, ponieważ nie jest " +"zainstalowane.\n" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" +"Ostrzeżenie: pomijanie powiązanego odniesienia „%s”, ponieważ jego " +"repozytorium „%s” nie ma ustawionego identyfikatora kolekcji.\n" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" +"Repozytorium „%s” nie ma ustawionego identyfikatora kolekcji, który jest " +"wymagany do rozpowszechniania „%s” typu P2P." + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" +"ŚCIEŻKA-DO-PUNKTU-MONTOWANIA ODNIESIENIE [ODNIESIENIE…] — kopiuje programy " +"lub środowiska wykonawcze na nośniki wymienne" + +#: app/flatpak-builtins-create-usb.c:459 +msgid "MOUNT-PATH and REF must be specified" +msgstr "Należy podać ŚCIEŻKĘ-DO-PUNKTU-MONTOWANIA i ODNIESIENIE" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" +"Odnaleziono odniesienie „%s” w wielu instalacjach: %s. Należy podać jedno." + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" +"Wszystkie odniesienia muszą być w tej samej instalacji (odnaleziono w %s " +"i %s)." + +#: app/flatpak-builtins-create-usb.c:673 +#, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Ostrzeżenie: nie można zaktualizować metadanych dla repozytorium „%s”: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Ostrzeżenie: nie można zaktualizować danych AppStream dla repozytorium „%s”, " +"architektury „%s”: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Ostrzeżenie: nie można odnaleźć danych AppStream dla repozytorium „%s”, " +"architektury „%s”: %s; %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Nie można odnaleźć danych AppStream2 dla repozytorium „%s”, architektury " +"„%s”: %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1139,206 +1230,177 @@ msgid "Can't switch uid" msgstr "Nie można przełączyć UID" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Wyświetla instalacje użytkownika" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Wyświetla instalacje systemowe" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Wyświetla podane instalacje systemowe" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Wyświetla odniesienie" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Wyświetla zatwierdzenie" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Wyświetla pochodzenie" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Wyświetla rozmiar" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Wyświetla metadane" -#: app/flatpak-builtins-info.c:60 -#, fuzzy +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "Wyświetla środowisko wykonawcze" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "Wyświetla środowisko programistyczne" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" -msgstr "Wyświetla rozszerzenia" +msgstr "Wyświetla uprawnienia" -#: app/flatpak-builtins-info.c:61 -#, fuzzy +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Zarządza dostępem do plików" +msgstr "Odpytuje dostęp do plików" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "ŚCIEŻKA" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Wyświetla rozszerzenia" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +msgid "Show location" +msgstr "Wyświetla położenie" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "NAZWA [GAŁĄŹ] — pobiera informacje o zainstalowanym programie lub środowisku " "wykonawczym" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "Należy podać NAZWĘ" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "odniesienia nie ma w pochodzeniu" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Ostrzeżenie: zatwierdzenie nie ma metadanych Flatpak\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Odniesienie:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "Identyfikator:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Architektura:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Gałąź:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Pochodzenie:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 -#, fuzzy +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" -msgstr "Identyfikator kolekcji" +msgstr "Identyfikator kolekcji:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "Data:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "Temat:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Aktywne zatwierdzenie:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Najnowsze zatwierdzenie:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Zatwierdzenie:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "Alternatywny identyfikator:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "Element nadrzędny:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Położenie:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Rozmiar po instalacji:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "niewspierane:" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "niewspierane-rebase:" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Środowisko wykonawcze:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "Środowisko programistyczne:" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Zainstalowane podkatalogi:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Rozszerzenie:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Podścieżki:" -#: app/flatpak-builtins-info-remote.c:49 -msgid "Commit to show info for" -msgstr "Zatwierdzenie, dla którego wyświetlić informacje" - -#: 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-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" @@ -1377,7 +1439,8 @@ msgid "Only install this subpath" msgstr "Instaluje tylko tę podścieżkę" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Automatycznie odpowiada tak na wszystkie pytania" @@ -1385,54 +1448,28 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Ten program zależy od środowisk wykonawczych z:\n" -" %s\n" -"Należy skonfigurować jako nowe repozytorium „%s”" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Należy podać nazwę pliku pakietu" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Zdalne pakiety nie są obsługiwane" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" -"Repozytorium „%s” w położeniu %s zawiera dodatkowe programy.\n" -"Zachować repozytorium, aby móc instalować z niego w przyszłości?" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Należy podać nazwę pliku lub adres URI" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Instalowanie: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "POŁOŻENIE/REPOZYTORIUM [ODNIESIENIE…] — instaluje programy lub środowiska " "wykonawcze" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "Należy podać REPOZYTORIUM i ODNIESIENIE" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Wyświetla dodatkowe informacje" @@ -1449,126 +1486,533 @@ msgid "Arch to show" msgstr "Wyświetlana architektura" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Wyświetla listę wszystkich odniesień (także lokalizacji/debugowania)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Odniesienie" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Pochodzenie" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Aktywne zatwierdzenie" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Najnowsze zatwierdzenie" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Rozmiar po instalacji" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Opcje" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr "" " — wyświetla listę zainstalowanych programów lub środowisk wykonawczych" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" -msgstr "Wyświetla informacje o repozytorium" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Architektura ustawiania na bieżącą" -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" -msgstr "Wyświetla wyłączone repozytoria" +#: 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-list-remotes.c:53 -msgid " - List remote repositories" -msgstr " — wyświetla listę zdalnych repozytoriów" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Należy podać PROGRAM" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" -msgstr "Nazwa" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "Należy podać GAŁĄŹ" -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" -msgstr "Tytuł" +#: 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-list-remotes.c:71 -msgid "Priority" -msgstr "Priorytet" +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" +msgstr "Usuwa istniejące zastępniki" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "Wyświetla istniejące zastępniki" -#: app/flatpak-builtins-ls-remote.c:45 -msgid "Show arches and branches" -msgstr "Wyświetla architektury i gałęzie" +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[PROGRAM] — zastępuje ustawienia [programu]" -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" -msgstr "Wyświetla tylko środowiska wykonawcze" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "[TABLICA] [IDENTYFIKATOR] — wyświetla listę uprawnień" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "Tablica" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "Obiekt" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "Program" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" +msgstr "Uprawnienia" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "Dane" + +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" +msgstr "TABLICA IDENTYFIKATOR — usuwa element z przechowalni uprawnień" + +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" +msgstr "Za mało parametrów" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" +msgstr "IDENTYFIKATOR_PROGRAMU — przywraca uprawnienia programowi" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" +msgstr "Błędna liczba parametrów" + +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" +msgstr "IDENTYFIKATOR_PROGRAMU — wyświetla uprawnienia programu" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" +msgstr "Wyświetla dostępne kolumny" + +#: app/flatpak-builtins-ps.c:43 +msgid "What information to show" +msgstr "Które informacje wyświetlać" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "POLE,…" + +#: app/flatpak-builtins-ps.c:53 +msgid "Application" +msgstr "Program" + +#: app/flatpak-builtins-ps.c:53 +msgid "Show the application ID" +msgstr "Wyświetla identyfikator programu" + +#: app/flatpak-builtins-ps.c:54 +msgid "Architecture" +msgstr "Architektura" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "Wyświetla architekturę" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Gałąź" + +#: app/flatpak-builtins-ps.c:55 +msgid "Show the application branch" +msgstr "Wyświetla gałąź programu" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Zatwierdzenie" + +#: app/flatpak-builtins-ps.c:56 +msgid "Show the application commit" +msgstr "Wyświetla zatwierdzenie programu" + +#: app/flatpak-builtins-ps.c:57 +msgid "Runtime" +msgstr "Środowisko wykonawcze" + +#: app/flatpak-builtins-ps.c:57 +msgid "Show the runtime ID" +msgstr "Wyświetla identyfikator środowiska wykonawczego" + +#: app/flatpak-builtins-ps.c:58 +msgid "Runtime Branch" +msgstr "Gałąź środowiska wykonawczego" + +#: app/flatpak-builtins-ps.c:58 +msgid "Show the runtime branch" +msgstr "Wyświetla gałąź środowiska wykonawczego" + +#: app/flatpak-builtins-ps.c:59 +msgid "Runtime Commit" +msgstr "Zatwierdzenie środowiska wykonawczego" + +#: app/flatpak-builtins-ps.c:59 +msgid "Show the runtime commit" +msgstr "Wyświetla zatwierdzenie środowiska wykonawczego" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" +msgstr "PID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "Wyświetla PID procesu zawijającego" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "PID elementu potomnego" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "Wyświetla PID procesu piaskownicy" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "Niejednoznaczna kolumna: %s" + +#: app/flatpak-builtins-ps.c:98 +#, c-format +msgid "Unknown column: %s" +msgstr "Nieznana kolumna: %s" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "Dostępne kolumny:\n" + +#: app/flatpak-builtins-ps.c:119 +msgid "Show all columns" +msgstr "Wyświetla wszystkie kolumny" + +#: app/flatpak-builtins-ps.c:156 +msgid "Instance" +msgstr "Wystąpienie" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr " — wylicza działające piaskownice" + +#: app/flatpak-builtins-ps.c:264 +msgid "Extra arguments given" +msgstr "Podano dodatkowe parametry" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Nie robi nic, jeśli podane repozytorium istnieje" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "POŁOŻENIE podaje plik konfiguracji, nie położenie repozytorium" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Wyłącza sprawdzanie poprawności GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Oznacza repozytorium jako niewyliczeniowe" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Oznacza repozytorium jako nieużywane dla zależności" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Ustawia priorytet (domyślnie 1, wyższy numer to wyższy priorytet)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORYTET" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Czytelna nazwa tego repozytorium" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Domyślna gałąź używana dla tego repozytorium" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importuje klucz GPG z PLIKU (- dla standardowego wejścia)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Wyłącza repozytorium" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Nie można wczytać adresu URI %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:206 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Nie można wczytać pliku %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" +msgstr "Nieznany format pliku" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Nieprawidłowa wersja %s, obsługiwana jest tylko wersja 1" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Nieprawidłowy klucz GPG" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NAZWA POŁOŻENIE — dodaje zdalne repozytorium" + +#: app/flatpak-builtins-remote-add.c:319 +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-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Repozytorium %s już istnieje" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Nie podano adresu URL w pliku repozytorium Flatpak" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Usuwa repozytorium nawet, jeśli jest używane" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NAZWA — usuwa zdalne repozytorium" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Zatwierdzenie, dla którego wyświetlić informacje" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Wyświetla dziennik" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Wyświetla element nadrzędny" + +#: app/flatpak-builtins-remote-info.c:126 +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-remote-info.c:213 +msgid "Download size:" +msgstr "Rozmiar do pobrania:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Historia:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Temat:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Data:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Zatwierdzenie:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Ostrzeżenie: zatwierdzenie %s nie ma metadanych Flatpak\n" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Wyświetla informacje o repozytorium" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Wyświetla wyłączone repozytoria" + +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" +msgstr " — wyświetla listę zdalnych repozytoriów" + +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" +msgstr "Nazwa" + +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" +msgstr "Tytuł" + +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" +msgstr "Priorytet" + +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" +msgstr "Wyświetla architektury i gałęzie" + +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" +msgstr "Wyświetla tylko środowiska wykonawcze" + +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Wyświetla tylko programy" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Wyświetla tylko z dostępnymi aktualizacjami" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Ogranicza do tej architektury (* dla wszystkich)" -#: app/flatpak-builtins-ls-remote.c:96 -msgid " [REMOTE] - Show available runtimes and applications" +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr "" -" [REPOZYTORIUM] — wyświetla listę dostępnych środowisk wykonawczych " -"i programów" - -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Zatwierdzenie" +" [REPOZYTORIUM lub URI] — wyświetla dostępne środowiska wykonawcze i programy" -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Rozmiar do pobrania" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "Brak dostępnych informacji o odniesieniu w repozytorium" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Włącza sprawdzanie poprawności GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Architektura ustawiania na bieżącą" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Oznacza repozytorium jako wyliczeniowe" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Oznacza repozytorium jako używane dla zależności" -#: 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-remote-modify.c:57 +msgid "Set a new url" +msgstr "Ustawia nowy adres URL" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Należy podać GAŁĄŹ" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Włącza repozytorium" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Aktualizuje dodatkowe metadane z pliku podsumowania" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NAZWA — modyfikuje zdalne repozytorium" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Należy podać NAZWĘ repozytorium" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "Nie zainstalowano programu %s gałęzi %s" +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "" +"Aktualizowanie dodatkowych metadanych z podsumowania repozytorium dla %s\n" -#: app/flatpak-builtins-override.c:54 -msgid "[APP] - Override settings [for application]" -msgstr "[PROGRAM] — zastępuje ustawienia [programu]" +#: app/flatpak-builtins-remote-modify.c:214 +#, 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-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Nie można zaktualizować dodatkowych metadanych dla %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "Brak obiektu: %s.%s\n" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "%s, usuwanie obiektu\n" + +#: app/flatpak-builtins-repair.c:134 +#, c-format +msgid "Can't load object %s: %s\n" +msgstr "Nie można wczytać obiektu %s: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Problemy podczas wczytywania danych dla %s: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Błąd podczas ponownej instalacji %s: %s\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "— naprawia instalację Flatpak" + +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Usuwanie niewdrożonego odniesienia %s…\n" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "Sprawdzanie poprawności %s…\n" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "Usuwanie odniesienia %s z powodu brakujących obiektów\n" + +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" +msgstr "Usuwanie nieużywanych obiektów\n" + +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" +msgstr "Ponowne instalowanie usuniętych odniesień\n" #: app/flatpak-builtins-repo.c:48 #, c-format @@ -1590,304 +2034,469 @@ msgid "Redirect URL: %s\n" msgstr "Adres URL przekierowania: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-repo.c:65 #, c-format -msgid "Redirect collection ID: %s\n" -msgstr "Identyfikator przekierowania kolekcji: %s\n" +msgid "Deploy collection ID: %s\n" +msgstr "Identyfikator wdrożenia kolekcji: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" msgstr "Suma klucza GPG: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" msgstr "Gałęzie: %zd\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Zainstalowano" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Pobieranie" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Wyświetla ogólne informacje o repozytorium" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "Wyświetla listę gałęzi w repozytorium" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Wyświetla metadane gałęzi" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "POŁOŻENIE — zarządzanie repozytorium" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Przekierowuje to repozytorium do nowego adresu URL" +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "Wykonywane polecenie" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Czytelna nazwa używana dla tego repozytorium" +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" +msgstr "Używana gałąź" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Domyślna gałąź używana dla tego repozytorium" +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "Używa programistycznego środowiska wykonawczego" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" -"Trwale wdraża identyfikator kolekcji do konfiguracji repozytoriów klienta" +#: app/flatpak-builtins-run.c:62 +msgid "Runtime to use" +msgstr "Używane środowisko wykonawcze" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importuje nowy domyślny klucz publiczny GPG z PLIKU" +#: app/flatpak-builtins-run.c:63 +msgid "Runtime version to use" +msgstr "Używana wersja środowiska wykonawczego" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "Identyfikator klucza GPG do podpisania podsumowania" +#: app/flatpak-builtins-run.c:66 +msgid "Log accessibility bus calls" +msgstr "Zapisywanie wywołań magistrali ułatwień dostępu w dzienniku" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Tworzy pliki delty" +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "Bez pośredniczenia wywołań magistrali ułatwień dostępu" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "Bez uruchamiania portali" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Usuwa nieużywane obiekty" +#: app/flatpak-builtins-run.c:69 +msgid "Enable file forwarding" +msgstr "Włącza przekazywanie plików" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "Wykonuje podane zatwierdzenie" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "Używa podanego zatwierdzenia środowiska wykonawczego" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "Wykonuje całkowicie w piaskownicy" + +#: app/flatpak-builtins-run.c:95 +msgid "APP [args...] - Run an app" +msgstr "PROGRAM [parametry…] — uruchamia program" + +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "Wyszukiwana architektura" + +#: app/flatpak-builtins-search.c:254 +msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -"Przechodzi tylko przez podaną GŁĘBIĘ elementów nadrzędnych każdego " -"zatwierdzenia (domyślnie: -1=nieskończoność)" +"TEKST — wyszukuje programy/środowiska wykonawcze repozytorium według tekstu" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "GŁĘBIA" +#: app/flatpak-builtins-search.c:263 +msgid "TEXT must be specified" +msgstr "Należy podać TEKST" -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Tworzenie delty: %s (%.10s)\n" +#: app/flatpak-builtins-search.c:316 +msgid "Application ID" +msgstr "Identyfikator programu" + +#: app/flatpak-builtins-search.c:317 +msgid "Version" +msgstr "Wersja" + +#: app/flatpak-builtins-search.c:321 +msgid "Remotes" +msgstr "Repozytoria" + +#: app/flatpak-builtins-search.c:322 +msgid "Description" +msgstr "Opis" + +#: app/flatpak-builtins-search.c:331 +msgid "No matches found" +msgstr "Brak wyników" + +#: app/flatpak-builtins-uninstall.c:50 +msgid "Arch to uninstall" +msgstr "Odinstalowywana architektura" + +#: app/flatpak-builtins-uninstall.c:51 +msgid "Keep ref in local repository" +msgstr "Zachowywanie odniesienia w lokalnym repozytorium" + +#: app/flatpak-builtins-uninstall.c:52 +msgid "Don't uninstall related refs" +msgstr "Bez odinstalowywania powiązanych odniesień" + +#: app/flatpak-builtins-uninstall.c:53 +msgid "Remove files even if running" +msgstr "Usuwa nawet uruchomione pliki" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "Odinstalowuje wszystko" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "Odinstalowuje nieużywane" + +#: app/flatpak-builtins-uninstall.c:155 +msgid "REF... - Uninstall an application" +msgstr "ODNIESIENIE… — odinstalowuje program" + +#: app/flatpak-builtins-uninstall.c:164 +msgid "Must specify at least one REF, --unused or --all" +msgstr "Należy podać co najmniej jedno ODNIESIENIE, --unused lub --all" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "Nie można podać ODNIESIEŃ podczas używania parametru --all" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "Nie można podać ODNIESIEŃ podczas używania parametru --unused" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "Nie ma nic nieużywanego do odinstalowania\n" + +#: app/flatpak-builtins-update.c:53 +msgid "Arch to update for" +msgstr "Aktualizowana architektura" + +#: app/flatpak-builtins-update.c:54 +msgid "Commit to deploy" +msgstr "Wdrażane zatwierdzenie" + +#: app/flatpak-builtins-update.c:55 +msgid "Remove old files even if running" +msgstr "Usuwa stare pliki nawet, jeśli są uruchomione" + +#: app/flatpak-builtins-update.c:56 +msgid "Don't pull, only update from local cache" +msgstr "Bez pobierania, tylko aktualizuje z lokalnej pamięci podręcznej" + +#: app/flatpak-builtins-update.c:58 +msgid "Don't update related refs" +msgstr "Bez aktualizowania powiązanych odniesień" + +#: app/flatpak-builtins-update.c:63 +msgid "Update appstream for remote" +msgstr "Aktualizuje AppStream dla repozytorium" + +#: app/flatpak-builtins-update.c:64 +msgid "Only update this subpath" +msgstr "Aktualizuje tylko tę podścieżkę" + +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "[ODNIESIENIE…] — aktualizuje programy lub środowiska wykonawcze" + +#: app/flatpak-builtins-update.c:128 +msgid "Looking for updates...\n" +msgstr "Wyszukiwanie aktualizacji…\n" + +#: app/flatpak-builtins-utils.c:367 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Tworzenie delty: %s (%.10s-%.10s)\n" +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Odnaleziono repozytorium „%s” w wielu instalacjach:\n" + +#: app/flatpak-builtins-utils.c:374 +msgid "Which do you want to use (0 to abort)?" +msgstr "Którego użyć (0 przerwie)?" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-utils.c:376 #, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Utworzenie delty %s się nie powiodło (%.10s): " +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-repo-update.c:206 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Utworzenie delty %s się nie powiodło (%.10s-%.10s): " +msgid "Updating appstream data for user remote %s" +msgstr "Aktualizowanie danych AppStream dla repozytorium użytkownika %s" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "POŁOŻENIE — aktualizuje metadane repozytorium" +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 +#, c-format +msgid "Updating appstream data for remote %s" +msgstr "Aktualizowanie danych AppStream dla repozytorium %s" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Aktualizowanie danych AppStream\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "Błąd podczas aktualizowania" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Aktualizowanie podsumowania\n" +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Nie odnaleziono repozytorium „%s”" -#: app/flatpak-builtins-repo-update.c:534 +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 #, c-format -msgid "Total objects: %u\n" -msgstr "Razem obiektów: %u\n" +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" +"Wymagane środowisko wykonawcze dla %s (%s) zostało odnalezione " +"w repozytorium %s\n" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Brak nieosiągalnych obiektów\n" +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "Zainstalować je?" -#: app/flatpak-builtins-repo-update.c:538 +#: app/flatpak-cli-transaction.c:86 #, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Usunięto %u obiektów, uwolniono %s\n" - -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" -msgstr "Wykonywane polecenie" +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Wymagane środowisko wykonawcze dla %s (%s) zostało odnalezione " +"w repozytoriach: %s\n" -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" -msgstr "Używana gałąź" +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Które zainstalować (0 przerwie)?" -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" -msgstr "Używa programistycznego środowiska wykonawczego" +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Konfigurowanie %s jako nowe repozytorium „%s”" -#: app/flatpak-builtins-run.c:56 -msgid "Runtime to use" -msgstr "Używane środowisko wykonawcze" +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"Repozytorium „%s”, do którego odnosi się „%s” w położeniu %s zawiera " +"dodatkowe programy.\n" +"Zachować repozytorium, aby móc instalować z niego w przyszłości?" -#: app/flatpak-builtins-run.c:57 -msgid "Runtime version to use" -msgstr "Używana wersja środowiska wykonawczego" +#: app/flatpak-cli-transaction.c:123 +#, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Program „%s” zależy od środowisk wykonawczych z:\n" +" %s\n" +"Należy skonfigurować jako nowe repozytorium „%s”" -#: app/flatpak-builtins-run.c:60 -msgid "Log accessibility bus calls" -msgstr "Zapisywanie wywołań magistrali ułatwień dostępu w dzienniku" +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "instalacja" -#: app/flatpak-builtins-run.c:61 -msgid "Enable file forwarding" -msgstr "Włącza przekazywanie plików" +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "aktualizacja" -#: app/flatpak-builtins-run.c:82 -msgid "APP [args...] - Run an app" -msgstr "PROGRAM [parametry…] — uruchamia program" +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "instalacja pakietu" -#: 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-cli-transaction.c:147 +msgid "uninstall" +msgstr "dezinstalacja" -#: app/flatpak-builtins-search.c:249 -msgid "TEXT must be specified" -msgstr "Należy podać TEKST" +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalowanie dla użytkownika: %s z %s\n" -#: app/flatpak-builtins-search.c:305 -msgid "Application ID" -msgstr "Identyfikator programu" +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Instalowanie: %s z %s\n" -#: app/flatpak-builtins-search.c:306 -msgid "Version" -msgstr "Wersja" +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizowanie dla użytkownika: %s z %s\n" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" -msgstr "Gałąź" +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Aktualizowanie: %s z %s\n" -#: app/flatpak-builtins-search.c:310 -msgid "Remotes" -msgstr "Repozytoria" +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalowanie dla użytkownika: %s z pakietu %s\n" -#: app/flatpak-builtins-search.c:311 -msgid "Description" -msgstr "Opis" +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Instalowanie: %s z pakietu %s\n" -#: app/flatpak-builtins-search.c:320 -msgid "No matches found" -msgstr "Brak wyników" +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Odinstalowywanie dla użytkownika: %s\n" -#: app/flatpak-builtins-uninstall.c:44 -msgid "Arch to uninstall" -msgstr "Odinstalowywana architektura" +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Odinstalowywanie: %s\n" -#: app/flatpak-builtins-uninstall.c:45 -msgid "Keep ref in local repository" -msgstr "Zachowywanie odniesienia w lokalnym repozytorium" +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Brak aktualizacji.\n" -#: app/flatpak-builtins-uninstall.c:46 -msgid "Don't uninstall related refs" -msgstr "Bez odinstalowywania powiązanych odniesień" +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Teraz: %s.\n" -#: app/flatpak-builtins-uninstall.c:47 -msgid "Remove files even if running" -msgstr "Usuwa nawet uruchomione pliki" +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Ostrzeżenie: %s %s się nie powiodła: %s\n" -#: app/flatpak-builtins-uninstall.c:70 -msgid "REF... - Uninstall an application" -msgstr "ODNIESIENIE… — odinstalowuje program" +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "%s %s się nie powiodła: " -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" -msgstr "Należy podać co najmniej jedno ODNIESIENIE" +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Błąd: %s %s się nie powiodła: %s\n" -#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 +#: app/flatpak-cli-transaction.c:350 #, c-format -msgid "Warning: Problem looking for related refs: %s\n" -msgstr "Ostrzeżenie: problem podczas wyszukiwania powiązanych odniesień: %s\n" +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "Ostrzeżenie: %s jest niewspierane, w zamian jest %s\n" -#: app/flatpak-builtins-uninstall.c:164 +#: app/flatpak-cli-transaction.c:354 #, c-format -msgid "Uninstalling: %s\n" -msgstr "Odinstalowywanie: %s\n" +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "Ostrzeżenie: %s jest niewspierane z powodu: %s\n" -#: app/flatpak-builtins-update.c:53 -msgid "Arch to update for" -msgstr "Aktualizowana architektura" +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "nowe uprawnienia" -#: app/flatpak-builtins-update.c:54 -msgid "Commit to deploy" -msgstr "Wdrażane zatwierdzenie" +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "uprawnienia" -#: app/flatpak-builtins-update.c:55 -msgid "Remove old files even if running" -msgstr "Usuwa stare pliki nawet, jeśli są uruchomione" +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "nowy dostęp do plików" -#: app/flatpak-builtins-update.c:56 -msgid "Don't pull, only update from local cache" -msgstr "Bez pobierania, tylko aktualizuje z lokalnej pamięci podręcznej" +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "dostęp do plików" -#: app/flatpak-builtins-update.c:58 -msgid "Don't update related refs" -msgstr "Bez aktualizowania powiązanych odniesień" +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "nowy dostęp do magistrali D-Bus" -#: app/flatpak-builtins-update.c:63 -msgid "Update appstream for remote" -msgstr "Aktualizuje AppStream dla repozytorium" +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "dostęp do magistrali D-Bus" -#: app/flatpak-builtins-update.c:64 -msgid "Only update this subpath" -msgstr "Aktualizuje tylko tę podścieżkę" +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "nowy właściciel magistrali D-Bus" -#: app/flatpak-builtins-update.c:83 -msgid "[REF...] - Update applications or runtimes" -msgstr "[ODNIESIENIE…] — aktualizuje programy lub środowiska wykonawcze" +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "właściciel magistrali D-Bus" -#: app/flatpak-builtins-update.c:119 -msgid "Looking for updates...\n" -msgstr "Wyszukiwanie aktualizacji…\n" +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "nowy dostęp do systemowej magistrali D-Bus" -#: 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-cli-transaction.c:529 +msgid "system dbus access" +msgstr "dostęp do systemowej magistrali D-Bus" -#: 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-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "nowy właściciel systemowej magistrali D-Bus" -#: 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-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "właściciel systemowej magistrali D-Bus" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "nowe etykiety" -#: app/flatpak-builtins-utils.c:479 app/flatpak-builtins-utils.c:481 +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "etykiety" + +#: app/flatpak-cli-transaction.c:564 #, c-format -msgid "Updating appstream data for user remote %s\n" -msgstr "Aktualizowanie danych AppStream dla repozytorium użytkownika %s\n" +msgid "Uninstalling from %s:\n" +msgstr "Odinstalowywanie z %s:\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-cli-transaction.c:586 #, c-format -msgid "Updating appstream data for remote %s\n" -msgstr "Aktualizowanie danych AppStream dla repozytorium %s\n" +msgid "Installing in %s:\n" +msgstr "Instalowanie w %s:\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-cli-transaction.c:623 #, c-format -msgid "Error updating: %s\n" -msgstr "Błąd podczas aktualizowania: %s\n" +msgid "Updating in %s:\n" +msgstr "Aktualizowanie w %s:\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "Czy to w porządku" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-cli-transaction.c:728 #, c-format -msgid "Remote \"%s\" not found" -msgstr "Nie odnaleziono repozytorium „%s”" +msgid "Skipping: %s\n" +msgstr "Pomijanie: %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "Wystąpił jeden lub więcej błędów" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1906,21 +2515,29 @@ msgid "Uninstall an installed application or runtime" msgstr "Odinstalowuje zainstalowany program lub środowisko wykonawcze" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Wyświetla listę zainstalowanych programów lub środowisk wykonawczych" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "" "Wyświetla informacje o zainstalowanym programie lub środowisku wykonawczym" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Konfiguruje Flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +msgid "Repair flatpak installation" +msgstr "Naprawia instalację Flatpak" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "Umieszcza programy lub środowiska wykonawcze na nośnikach wymiennych" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" @@ -1928,12 +2545,12 @@ "\n" " Wyszukiwanie programów i środowisk wykonawczych" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 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 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1941,24 +2558,28 @@ "\n" " Uruchamianie programów" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Uruchamia program" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Zastępuje uprawnienia programu" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Podaje domyślnie uruchamianą wersję" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Przestrzeń nazw działającego programu" +#: app/flatpak-main.c:84 +msgid "Enumerate running applications" +msgstr "Wylicza uruchomione programy" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1966,24 +2587,49 @@ "\n" " Zarządza dostępem do plików" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Nadaje programowi dostęp do podanego pliku" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Odbiera dostęp do podanego pliku" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Wyświetla informacje o podanym pliku" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Wyświetla listę wyeksportowanych plików" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" +"\n" +" Zarządza dynamicznymi uprawnieniami" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "Usuwa element z przechowalni uprawnień" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "Wyświetla listę uprawnień" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "Wyświetla uprawnienia programu" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "Przywraca uprawnienia programu" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1991,33 +2637,33 @@ "\n" " Zarządza zdalnymi repozytoriami" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Wyświetla listę wszystkich skonfigurowanych repozytoriów" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Dodaje nowe zdalne repozytorium (według adresu URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modyfikuje właściwości skonfigurowanego repozytorium" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Usuwa skonfigurowane repozytorium" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Wyświetla listę zawartości skonfigurowanego repozytorium" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2025,289 +2671,144 @@ "\n" " Buduje programy" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inicjuje katalog do budowania" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Wykonuje polecenie budowania w katalogu budowania" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Kończy katalog budowania do eksportu" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Eksportuje katalog budowania do repozytorium" -#: app/flatpak-main.c:104 -#, fuzzy +#: app/flatpak-main.c:116 msgid "Create a bundle file from a ref in a local repository" -msgstr "Tworzy pakiet z katalogu budowania" +msgstr "Tworzy pakiet z odniesienia w lokalnym repozytorium" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importuje pakiet" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Podpisuje program lub środowisko wykonawcze" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Aktualizuje plik podsumowania w repozytorium" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Tworzy nowe zatwierdzenie na podstawie istniejącego odniesienia" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Wyświetla informacje o repozytorium" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 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:127 +#: app/flatpak-main.c:139 msgid "Print OSTree debug information during command processing" msgstr "Wyświetla informacje debugowania OSTree podczas przetwarzania poleceń" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Wyświetla opcje pomocy" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Wyświetla informacje o wersji i kończy działanie" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Wyświetla domyślną architekturę i kończy działanie" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" -msgstr "Wyświetla obsługiwane architektury i kończy działanie" - -#: 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:141 -msgid "Work on user installations" -msgstr "Działa na instalacjach użytkownika" - -#: app/flatpak-main.c:142 -msgid "Work on system-wide installations (default)" -msgstr "Działa na instalacjach systemowych (domyślnie)" - -#: app/flatpak-main.c:143 -msgid "Work on specific system-wide installation(s)" -msgstr "Działa na podanych instalacjach systemowych" - -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NAZWA" - -#: app/flatpak-main.c:169 -msgid "Builtin Commands:" -msgstr "Wbudowane polecenia:" - -#: 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:497 -msgid "No command specified" -msgstr "Nie podano polecenia" - -#: app/flatpak-main.c:615 -msgid "error:" -msgstr "błąd:" - -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Odnaleziono w kilku repozytoriach:\n" - -#: 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: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: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: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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Repozytorium %s jest wyłączone, ignorowanie aktualizacji %s" - -#: app/flatpak-transaction.c:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "Już zainstalowano %s, pomijanie\n" - -#: 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: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: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:765 -msgid "update" -msgstr "aktualizacja" - -#: app/flatpak-transaction.c:774 -#, c-format -msgid "Updating for user: %s from %s\n" -msgstr "Aktualizowanie dla użytkownika: %s z %s\n" +msgstr "Wyświetla obsługiwane architektury i kończy działanie" -#: app/flatpak-transaction.c:776 -#, c-format -msgid "Updating: %s from %s\n" -msgstr "Aktualizowanie: %s z %s\n" +#: app/flatpak-main.c:148 +msgid "Print active gl drivers and exit" +msgstr "Wyświetla aktywne sterowniki GL i kończy działanie" -#: app/flatpak-transaction.c:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Teraz: %s.\n" +#: app/flatpak-main.c:153 +msgid "Work on user installations" +msgstr "Działa na instalacjach użytkownika" -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Brak aktualizacji.\n" +#: app/flatpak-main.c:154 +msgid "Work on system-wide installations (default)" +msgstr "Działa na instalacjach systemowych (domyślnie)" -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "instalacja pakietu" +#: app/flatpak-main.c:155 +msgid "Work on specific system-wide installation(s)" +msgstr "Działa na podanych instalacjach systemowych" -#: 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-main.c:181 +msgid "Builtin Commands:" +msgstr "Wbudowane polecenia:" -#: app/flatpak-transaction.c:824 -#, c-format -msgid "Installing: %s from bundle %s\n" -msgstr "Instalowanie: %s z pakietu %s\n" +#: app/flatpak-main.c:361 +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-transaction.c:836 +#: app/flatpak-main.c:480 #, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Ostrzeżenie: %s %s się nie powiodła: %s\n" +msgid "Unknown command '%s'" +msgstr "Nieznane polecenie „%s”" -#: 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-main.c:488 +msgid "No command specified" +msgstr "Nie podano polecenia" -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" -msgstr "Jedno lub więcej działań się nie powiodło" +#: app/flatpak-main.c:608 +msgid "error:" +msgstr "błąd:" -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Nieznany typ udziału %s, prawidłowe typy: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Nieznany typ polityki %s, prawidłowe typy: %s" -#: common/flatpak-context.c:248 +#: common/flatpak-context.c:251 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Nieprawidłowa nazwa D-Bus %s\n" +msgid "Invalid dbus name %s" +msgstr "Nieprawidłowa nazwa D-Bus %s" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Nieznany typ gniazda %s, prawidłowe typy: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Nieznany typ urządzenia %s, prawidłowe typy: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Nieznany typ funkcji %s, prawidłowe typy: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2316,481 +2817,1018 @@ "Nieznane położenie systemu plików %s, prawidłowe położenia: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Nieznany format środowiska %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "Parametry --policy muszą być w formacie PODSYSTEM.KLUCZ=[!]WARTOŚĆ" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "Wartości --policy nie mogą zaczynać się od znaku „!”" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Udostępnia temu komputerowi" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "UDZIAŁ" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Przestaje udostępniać temu komputerowi" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Udostępnia gniazdo programowi" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "GNIAZDO" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Nie udostępnia gniazda programowi" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Udostępnia urządzenie programowi" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "URZĄDZENIE" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Nie udostępnia urządzenia programowi" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Zezwala na funkcję" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FUNKCJA" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Bez zezwolenia na funkcję" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Udostępnia system plików programowi (:ro dla tylko do odczytu)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SYSTEM-PLIKÓW[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Nie udostępnia systemu plików programowi" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SYSTEM-PLIKÓW" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Ustawia zmienną środowiskową" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "ZMIENNA=WARTOŚĆ" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Zezwala programowi na posiadanie nazwy na magistrali sesji" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NAZWA_D-BUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Umożliwia programowi rozmawianie z nazwą na magistrali sesji" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Zezwala programowi na posiadanie nazwy na magistrali systemu" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Umożliwia programowi rozmawianie z nazwą na magistrali systemu" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Dodaje ogólną opcję polityki" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "PODSYSTEM.KLUCZ=WARTOŚĆ" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Usuwa ogólną opcję polityki" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Trwały katalog domowy" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NAZWA-PLIKU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Bez wymagania działającej sesji (bez tworzenia cgroups)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Nie można wczytać podsumowania z repozytorium %s: %s" + +#: common/flatpak-dir.c:260 +#, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Nie można wczytać metadanych z repozytorium %s: %s" + +#: common/flatpak-dir.c:284 +#, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Brak odniesienia (%s, %s) w repozytorium %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Brak odniesienia „%s” w repozytorium %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Brak pamięci podręcznej Flatpak w podsumowaniu repozytorium „%s”" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "" +"Brak wpisu dla %s w pamięci podręcznej Flatpak podsumowania repozytorium " +"„%s” " + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "" +"Brak wpisu dla %s w rozsianej pamięci podręcznej Flatpak podsumowania " +"repozytorium " + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "Nie można połączyć się z magistralą systemu" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Nie odnaleziono zastępników dla %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "Nie zainstalowano %s" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "Nie zainstalowano %s (zatwierdzenie %s)" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Podczas otwierania repozytorium %s: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +msgid "No appstream commit to deploy" +msgstr "Brak zatwierdzenia AppStream do wdrożenia" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 msgid "Can't create deploy directory" msgstr "Nie można utworzyć katalogu wdrażania" -#: common/flatpak-dir.c:2122 common/flatpak-dir.c:2125 +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Brak odniesienia (%s, %s) w repozytorium %s lub innym miejscu" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 #, c-format -msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgid "Couldn't find latest checksum for ref %s in remote %s" msgstr "" +"Nie można odnaleźć najnowszej sumy kontrolnej dla odniesienia %s " +"w repozytorium %s" -#: common/flatpak-dir.c:2761 +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" +"Nie można pobrać z niezaufanego, niesprawdzonego przez GPG repozytorium" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" +"Dodatkowe dane nie są obsługiwane dla niesprawdzonych przez GPG lokalnych " +"instalacji systemowych" + +#: common/flatpak-dir.c:3959 #, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Nieprawidłowa suma SHA256 dla adresu URI %s dodatkowych danych" +msgid "Invalid checksum for extra data uri %s" +msgstr "Nieprawidłowa suma kontrolna dla adresu URI dodatkowych danych %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "Pusta nazwa dla adresu URI %s dodatkowych danych" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Nieobsługiwany adres URI %s dodatkowych danych" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Błędny rozmiar dodatkowych danych %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Podczas pobierania %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Błędny rozmiar dodatkowych danych %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Nieprawidłowa suma kontrolna dodatkowych danych %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" msgstr "Indeks OCI repozytorium nie ma adresu URI rejestru" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, c-format msgid "%s commit %s already installed" msgstr "Już zainstalowano %s zatwierdzenie %s" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "Obraz nie jest w manifeście" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Podczas pobierania %s z repozytorium %s: " -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +msgid "No summary found" +msgstr "Nie odnaleziono podsumowania" + +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" +"Włączono sprawdzanie przez GPG, ale nie odnaleziono podpisów podsumowań dla " +"repozytorium „%s”" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" +"Odnaleziono podpisy GPG dla repozytorium „%s”, ale żadne nie są w zaufanej " +"bazie kluczy" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "Odnaleziono podpisy GPG, ale żadne nie są w zaufanej bazie kluczy" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" +"Oczekiwano, że metadane zatwierdzenia mają informacje o dowiązaniu " +"odniesienia, ale nie odnaleziono żadnych" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Nie można odnaleźć %s w repozytorium %s" +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" +"Zatwierdzenie nie ma żądanego odniesienia „%s” w metadanych dowiązania " +"odniesienia" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" +"Oczekiwano, że metadane zatwierdzenia mają informacje o dowiązaniu " +"identyfikatora kolekcji, ale nie odnaleziono żadnych" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" +"Zatwierdzenie ma identyfikator kolekcji „%s” w metadanych dowiązania " +"kolekcji, ale repozytorium, z którego pochodzi ma identyfikator kolekcji „%s”" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Za mało pamięci" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Odczytanie z wyeksportowanego pliku się nie powiodło" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Błąd podczas odczytywania pliku XML typu MIME" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Nieprawidłowy plik XML typu MIME" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "Plik usługi D-Bus „%s” ma błędną nazwę" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Podczas pobierania odłączonych metadanych: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +msgid "Extra data missing in detached metadata" +msgstr "Brak dodatkowych danych w odłączonych metadanych" + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Nieprawidłowa suma kontrolna dodatkowych danych" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Podczas zapisywania pliku dodatkowych danych „%s”: " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Brak dodatkowych danych %s w odłączonych metadanych" + +#: common/flatpak-dir.c:6557 #, 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 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Podczas rozwiązywania odniesienia %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "Już zainstalowano %s gałąź %s" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Odczytanie zatwierdzenia %s się nie powiodło: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Podczas wymeldowywania podścieżki metadanych: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Podczas wymeldowywania podścieżki „%s”: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Podczas usuwania istniejącego dodatkowego katalogu: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Podczas zastosowywania dodatkowych danych: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Nieprawidłowe wdrożone odniesienie %s: " -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Nieprawidłowe odniesienie zatwierdzenia %s: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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 +#: common/flatpak-dir.c:6836 #, 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 +#: common/flatpak-dir.c:6844 #, 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 +#: common/flatpak-dir.c:6850 #, 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 +#: common/flatpak-dir.c:6856 #, 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 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Wdrożone metadane nie pasują do zatwierdzenia" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, c-format msgid "This version of %s is already installed" msgstr "Ta wersja programu %s jest już zainstalowana" -#: common/flatpak-dir.c:6540 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "Nie można zmienić repozytorium podczas instalacji pakietu" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, c-format +msgid "%s branch already installed" +msgstr "Już zainstalowano gałąź %s" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "Nie można zaktualizować do podanego zatwierdzenia bez uprawnień roota" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "Nie można usunąć %s, jest wymagane dla: %s" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "Nie zainstalowano %s gałęzi %s" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "Nie zainstalowano %s gałęzi %s" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, 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 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" +"Lista repozytorium dla %s jest niedostępna — serwer nie ma pliku " +"podsumowania. Proszę sprawdzić, czy adres URL przekazywany do remote-add " +"jest prawidłowy." + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "" +"Brak dostępnego podsumowania lub pamięci podręcznej Flatpak dla repozytorium " +"%s" + +#: common/flatpak-dir.c:9716 #, 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 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Nic nie pasuje do %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, c-format msgid "Error searching remote %s: %s" msgstr "Błąd podczas wyszukiwania repozytorium %s: %s" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, c-format msgid "Error searching local repository: %s" msgstr "Błąd podczas wyszukiwania lokalnego repozytorium: %s" -#: common/flatpak-dir.c:8471 +#: common/flatpak-dir.c:10114 #, c-format -msgid "%s %s not installed" -msgstr "Nie zainstalowano %s %s" +msgid "%s/%s/%s not installed" +msgstr "Nie zainstalowano %s/%s/%s" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Nie można odnaleźć instalacji %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +msgid "Invalid .flatpakref" +msgstr "Nieprawidłowy plik .flatpakref" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "Identyfikator kolekcji wymaga dostarczenia klucza GPG" + +#: common/flatpak-dir.c:10771 +#, c-format +msgid "Invalid file format, no %s group" +msgstr "Nieprawidłowy format pliku, brak grupy %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, c-format +msgid "Invalid file format, no %s specified" +msgstr "Nieprawidłowy format pliku, nie podano %s" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +msgid "Invalid file format, gpg key invalid" +msgstr "Nieprawidłowy format pliku, nieprawidłowy klucz GPG" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Już zainstalowano środowisko wykonawcze %s, gałąź %s" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" +"Nie można usunąć repozytorium „%s” z zainstalowanym odniesieniem %s (co " +"najmniej)" + +#: common/flatpak-dir.c:11250 +#, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Nieprawidłowy znak „/” w nazwie repozytorium: %s" -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" -msgstr "Nie ustawiono domyślnej gałęzi repozytorium" +#: common/flatpak-dir.c:11255 +#, c-format +msgid "No configuration for remote %s specified" +msgstr "Nie podano konfiguracji dla repozytorium %s" -#: 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:11496 +msgid "No metadata branch for OCI" +msgstr "Brak gałęzi metadanych dla OCI" -#: common/flatpak-dir.c:10342 +#: common/flatpak-installation.c:751 #, 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 " +msgid "Ref %s not installed" +msgstr "Nie zainstalowano odniesienia %s" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:793 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Otwarcie pliku tymczasowego „flatpak-info” się nie powiodło: %s" +msgid "App %s not installed" +msgstr "Nie zainstalowano programu %s" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-installation.c:1778 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Otwarcie pliku tymczasowego się nie powiodło: %s" +msgid "As requested, %s was only pulled, but not installed" +msgstr "Jak zażądano, %s zostało tylko pobrane, ale nie zainstalowane" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Utworzenie potoku synchronizacji się nie powiodło" +#: common/flatpak-oci-registry.c:1679 +#, c-format +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "Nie odnaleziono klucza GPG z identyfikatorem %s (katalog domowy: %s)" + +#: common/flatpak-oci-registry.c:1686 +#, c-format +msgid "Unable to lookup key ID %s: %d)" +msgstr "Nie można wyszukać identyfikatora klucza %s: %d)" + +#: common/flatpak-oci-registry.c:1694 +#, c-format +msgid "Error signing commit: %d" +msgstr "Błąd podczas podpisywania zatwierdzenia: %d" -#: common/flatpak-run.c:1910 +#: common/flatpak-remote.c:822 #, c-format -msgid "Failed to open app info file: %s" -msgstr "Otwarcie pliku informacji o programie się nie powiodło: %s" +msgid "Bad remote name: %s" +msgstr "Błędna nazwa repozytorium: %s" + +#: common/flatpak-remote.c:826 +msgid "No url specified" +msgstr "Nie podano adresu URL" + +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" +msgstr "Otwarcie pliku informacji o programie się nie powiodło" + +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Utworzenie potoku synchronizacji się nie powiodło" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Synchronizacja z pośrednikiem D-Bus się nie powiodła" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Ustalenia części z odniesienia się nie powiodło: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "Brak dostępnej sesji użytkownika systemd, cgroups nie są dostępne" + +#: common/flatpak-run.c:1726 +msgid "Unable to allocate instance id" +msgstr "Nie można przydzielić identyfikatora wystąpienia" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Otwarcie pliku „flatpak-info” się nie powiodło: %s" + +#: common/flatpak-run.c:1873 +#, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Otwarcie pliku „bwrapinfo.json” się nie powiodło: %s" + +#: common/flatpak-run.c:2187 +msgid "Initialize seccomp failed" +msgstr "Inicjacja seccomp się nie powiodła" + +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" +msgstr "Dodanie architektury do filtru seccomp się nie powiodło" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" +"Dodanie wieloarchitekturowej architektury do filtru seccomp się nie powiodło" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, c-format +msgid "Failed to block syscall %d" +msgstr "Zablokowanie wywołania systemowego %d się nie powiodło" + +#: common/flatpak-run.c:2299 +msgid "Failed to export bpf" +msgstr "Wyeksportowanie bpf się nie powiodło" + +#: common/flatpak-run.c:2355 +#, c-format +msgid "Invalid group: %d" +msgstr "Nieprawidłowa grupa: %d" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "ldconfig się nie powiodło, stan wyjścia %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +msgid "Can't open generated ld.so.cache" +msgstr "Nie można otworzyć utworzonego ld.so.cache" + +#: common/flatpak-run.c:2947 +#, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Błędna liczba składników w środowisku wykonawczym %s" + +#: common/flatpak-transaction.c:1347 +#, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Ostrzeżenie: problem podczas wyszukiwania powiązanych odniesień: %s" + +#: common/flatpak-transaction.c:1417 +#, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Program %s wymaga środowiska wykonawczego %s, którego nie odnaleziono" + +#: common/flatpak-transaction.c:1433 +#, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "" +"Program %s wymaga środowiska wykonawczego %s, które nie jest zainstalowane" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Repozytorium %s jest wyłączone, ignorowanie aktualizacji %s" + +#: common/flatpak-transaction.c:1583 +#, c-format +msgid "%s is already installed" +msgstr "Już zainstalowano %s" + +#: common/flatpak-transaction.c:1586 +#, c-format +msgid "%s is already installed from remote %s" +msgstr "%s jest już zainstalowane z repozytorium %s" + +#: common/flatpak-transaction.c:1699 +#, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Nieprawidłowy plik .flatpakref: %s" + +#: common/flatpak-transaction.c:1787 +#, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Błąd podczas aktualizowania metadanych repozytorium dla „%s”: %s" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" +"Ostrzeżenie: traktowanie błędu pobierania repozytorium jako niekrytycznego, " +"ponieważ %s jest już zainstalowane: %s" + +#: common/flatpak-transaction.c:2035 +#, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Ostrzeżenie: nie można odnaleźć metadanych %s dla zależności: %s" + +#: common/flatpak-transaction.c:2345 +#, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Nieprawidłowy plik .flatpakrepo: %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "Przerwane przez użytkownika" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "Pomijanie %s z powodu poprzedniego błędu" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "Przerwano z powodu niepowodzenia" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "Migrowanie %s do %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Błąd podczas migracji: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "Nazwa nie może być pusta" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "Nazwa nie może mieć więcej niż 255 znaków" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "Nazwa nie może zaczynać się od kropki" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "Nazwa nie może zaczynać się od %c" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "Nazwa nie może kończyć się kropką" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "Tylko ostatni segment nazwy może zawierać -" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "Segment nazwy nie może zaczynać się od %c" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "Nazwa nie może zawierać %c" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "Nazwy muszą zawierać co najmniej dwie kropki" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "Gałąź nie może być pusta" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "Gałąź nie może zaczynać się od %c" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "Gałąź nie może zawierać %c" + +#: common/flatpak-utils.c:1087 +#, c-format +msgid "Wrong number of components in %s" +msgstr "Błędna liczba składników w %s" + +#: common/flatpak-utils.c:1093 +#, c-format +msgid "%s is not application or runtime" +msgstr "%s nie jest programem ani środowiskiem wykonawczym" + +#: common/flatpak-utils.c:1099 +#, c-format +msgid "Invalid name %s: %s" +msgstr "Nieprawidłowa nazwa %s: %s" + +#: common/flatpak-utils.c:1105 +#, c-format +msgid "Invalid arch %s" +msgstr "Nieprawidłowa architektura %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, c-format +msgid "Invalid branch %s: %s" +msgstr "Nieprawidłowa gałąź %s: %s" + +#: common/flatpak-utils.c:1199 +#, c-format +msgid "Invalid id %s: %s" +msgstr "Nieprawidłowy identyfikator %s: %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Brak źródeł dodatkowych danych" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "Rozpakowywanie ikon dla składnika %s\n" + +#: common/flatpak-utils.c:3716 +#, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Błąd podczas kopiowania ikony 64×64: %s\n" + +#: common/flatpak-utils.c:3721 +#, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Błąd podczas kopiowania ikony 128×128: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "%s jest niewspierane, ignorowanie\n" + +#: common/flatpak-utils.c:3926 +#, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Brak danych AppStream dla %s: %s\n" + +#: common/flatpak-utils.c:4744 +msgid "Invalid bundle, no ref in metadata" +msgstr "Nieprawidłowy pakiet, brak odniesienia w metadanych" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "Kolekcja „%s” pakietu nie zgadza się z kolekcją „%s” repozytorium" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "Metadane w nagłówku i programie są niespójne" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "Nie podano odniesienia dla obrazu OCI %s" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "Podano błędne odniesienie (%s) dla obrazu OCI %s, oczekiwano %s" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "Błędna suma kontrolna warstwy, oczekiwano %s, wynosi %s" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Pobieranie metadanych: %u/(szacowanie) %s" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Pobieranie: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Pobieranie dodatkowych danych: %s/%s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Pobieranie plików: %d/%d %s" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "Nieprawidłowy parametr require-flatpak %s" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s wymaga nowszej wersji Flatpak (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "Pusty ciąg nie jest liczbą" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "„%s” nie jest liczbą bez znaku" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "Liczba „%s” jest poza zakresem [%s, %s]" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. diff -Nru flatpak-0.11.3/po/POTFILES.in flatpak-1.0.7/po/POTFILES.in --- flatpak-0.11.3/po/POTFILES.in 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/po/POTFILES.in 2019-02-11 12:42:20.000000000 +0000 @@ -1,6 +1,5 @@ # List of source files containing translatable strings. # Please keep this file sorted alphabetically. -app/flatpak-builtins-add-remote.c app/flatpak-builtins-build-bundle.c app/flatpak-builtins-build.c app/flatpak-builtins-build-commit-from.c @@ -9,33 +8,46 @@ app/flatpak-builtins-build-import-bundle.c app/flatpak-builtins-build-init.c app/flatpak-builtins-build-sign.c +app/flatpak-builtins-build-update-repo.c app/flatpak-builtins-config.c -app/flatpak-builtins-delete-remote.c +app/flatpak-builtins-create-usb.c app/flatpak-builtins-document-export.c app/flatpak-builtins-document-info.c 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 -app/flatpak-builtins-ls-remote.c app/flatpak-builtins-make-current.c app/flatpak-builtins-override.c +app/flatpak-builtins-permission-list.c +app/flatpak-builtins-permission-remove.c +app/flatpak-builtins-permission-reset.c +app/flatpak-builtins-permission-show.c +app/flatpak-builtins-ps.c +app/flatpak-builtins-remote-add.c +app/flatpak-builtins-remote-delete.c +app/flatpak-builtins-remote-info.c +app/flatpak-builtins-remote-list.c +app/flatpak-builtins-remote-ls.c +app/flatpak-builtins-remote-modify.c +app/flatpak-builtins-repair.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-cli-transaction.c app/flatpak-main.c -app/flatpak-transaction.c common/flatpak-context.c common/flatpak-dir.c +common/flatpak-installation.c +common/flatpak-oci-registry.c +common/flatpak-remote.c common/flatpak-run.c +common/flatpak-transaction.c common/flatpak-utils.c system-helper/flatpak-system-helper.service.in system-helper/org.freedesktop.Flatpak.policy.in Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/pt_BR.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/pt_BR.gmo differ diff -Nru flatpak-0.11.3/po/pt_BR.po flatpak-1.0.7/po/pt_BR.po --- flatpak-0.11.3/po/pt_BR.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/pt_BR.po 2019-02-11 12:42:42.000000000 +0000 @@ -1,14 +1,14 @@ # Brazilian Portuguese translation for flatpak. -# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER +# Copyright (C) 2018 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the flatpak package. # Fábio Nogueira , 2017. -# Rafael Fontenelle , 2017. +# Rafael Fontenelle , 2017, 2018. msgid "" msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2017-09-08 21:48-0200\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2018-09-02 21:56-0200\n" "Last-Translator: Rafael Fontenelle \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" @@ -18,213 +18,6 @@ "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Virtaal 1.0.0-beta1\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Faz nada se o remoto fornecido existir" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" -"LOCALIZAÇÃO especifica um arquivo de configuração, não a localização do repo" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Habilita verificação GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Marca o remoto como enumerado" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Marca o repositório como usado para dependências" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Define uma nova url" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Habilita o remoto" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Atualiza metadados extras de um arquivo de resumo" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Desabilita verificação GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Marca o remoto como não enumerado" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Marca o remoto como não usar para dependências" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Define prioridade (padrão 1, maior é mais prioritário)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORIDADE" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Um nome legal para usar para este remoto" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TÍTULO" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Ramo padrão para usar para este remoto" - -#: 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 -msgid "BRANCH" -msgstr "RAMO" - -#: 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 "ID de coleção" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "ID-COLEÇÃO" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Desabilita o remoto" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Adiciona registro OCI" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "O remoto %s já existe" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NOME – Modifica um repositório remoto" - -#: 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: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: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: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:56 msgid "Export runtime instead of app" msgstr "Exporta runtime em vez do aplicativo" @@ -234,12 +27,13 @@ msgstr "Arquitetura para a qual será empacotada" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARQUITETURA" @@ -247,6 +41,14 @@ msgid "Url for repo" msgstr "Url para o repo" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url para o arquivo de flatpakrepo de runtime" @@ -255,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "ARQUIVO" + #: 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" @@ -264,39 +74,42 @@ msgstr "ID da chave GPG para assinar a imagem OCI" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "ID-CHAVE" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "DIRETÓRIO" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +msgstr "Commit OSTree para criar um pacote delta de" -#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "COMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -304,25 +117,46 @@ "LOCALIZAÇÃO ARQUIVO NOME [RAMO] – Cria um único arquivo de pacote de um " "repositório local" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "LOCALIZAÇÃO, ARQUIVO e NOME devem ser especificados" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Número excessivo de argumentos" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "“%s” não é um repositório válido" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, 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:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "“%s” não é um nome de ramo válido: %s" @@ -333,7 +167,7 @@ #: app/flatpak-builtins-build.c:50 msgid "Make destination readonly" -msgstr "" +msgstr "Torna o destino somente leitura" #: app/flatpak-builtins-build.c:51 msgid "Add bind mount" @@ -348,7 +182,7 @@ msgstr "Começa compilação neste diretório" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "DIR" @@ -356,386 +190,438 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Usa um arquivo alternativo para os metadados" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Mata processos quando o processo pai morre" #: app/flatpak-builtins-build.c:56 msgid "Export application homedir directory to build" -msgstr "" +msgstr "Exporta o diretório homedir do aplicativo a compilar" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Registra o log das chamadas de barramento de sistema" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DIRETÓRIO [COMANDO [args…]] – Compila no diretório" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "DIRETÓRIO deve ser especificado" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "metadados inválido, não é aplicativo ou runtime" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Faltando “=” na opção de montagem associativa “%s”" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Não foi possível iniciar o aplicativo" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" -msgstr "Diretório fonte do repositório" +msgstr "Diretório de repositório fonte" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "SRC-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" -msgstr "Referência fonte do repositório" +msgstr "Ref de repositório fonte" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "SRC-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Assunto em uma linha" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "ASSUNTO" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Descrição completa" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "CORPO" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Atualiza o ramo de appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Não atualiza o sumário" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 da chave GPG para assinar o commit" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "Marca a compilação como fim de vida" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "MOTIVO" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Sobrepõe o carimbo de tempo do commit (NOW para o tempo atual)" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "CARIMBO-DE-TEMPO" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "DST-REPO deve ser especificado" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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" +"Se --src-repo não for especificado, exatamente uma ref destino deve ser " +"especificado" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 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 " +"Se --src-ref for especificado, exatamente uma ref destino deve ser " "especificado" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "Não foi possível analisar “%s”" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" -msgstr "" +msgstr "%s: nenhuma alteração\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Arquitetura alvo da exportação (deve ser compatível com o hospedeiro)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Faz commit de runtime (/usr), não /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Usa o dicionário alternativo para os arquivo" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "SUBDIR" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Arquivos para excluir" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "PADRÃO" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Arquivos excluídos para incluir" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Sobrepõe o carimbo de tempo do commit" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "CARIMBO-TEMPO-ISO-8601" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "ID de coleção" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" -msgstr "" +msgstr "AVISO: Erro ao executar desktop-file-validate: %s\n" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" -msgstr "" +msgstr "AVISO: Erro ao ler de desktop-file-validate: %s\n" -#: app/flatpak-builtins-build-export.c:355 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:359 +#, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" -msgstr "Falha ao abrir arquivo temporário: %s" +msgstr "AVISO: Falha ao validar o arquivo desktop %s: %s\n" -#: app/flatpak-builtins-build-export.c:370 +#: app/flatpak-builtins-build-export.c:374 #, c-format msgid "WARNING: Can't find Exec key in %s: %s\n" -msgstr "" +msgstr "AVISO: Não foi possível localizar a chave Exec em %s: %s\n" -#: app/flatpak-builtins-build-export.c:378 -#: app/flatpak-builtins-build-export.c:475 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" -msgstr "" +msgstr "AVISO: Binário não localizado para a linha Exec em %s: %s\n" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" -msgstr "" +msgstr "AVISO: Ícone não correspondendo a id do aplicativo no %s: %s\n" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" -msgstr "" +msgstr "AVISO: Ícone referenciado no arquivo desktop, mas não exportado: %s\n" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Tipo de uri inválida %s, há suporte apenas a http/https" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" "Não foi possível localizar o nome base em %s, especifique explicitamente um " "nome base" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Nenhuma barra permitida no nome de dados extras" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Formato inválido para a soma de verificação sha256: “%s”" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Tamanhos zerado de dados extras sem suporte" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" "LOCALIZAÇÃO DIRETÓRIO [RAMO] – Cria um repositório de um diretório de " "compilação" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "LOCALIZAÇÃO e DIRETÓRIO devem ser especificados" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, 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-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Nenhum nome especificado nos metadados" -#: app/flatpak-builtins-build-export.c:976 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:972 +#, c-format msgid "Commit: %s\n" -msgstr "Commit:" +msgstr "Commit: %s\n" -#: app/flatpak-builtins-build-export.c:977 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:973 +#, c-format msgid "Metadata Total: %u\n" -msgstr "Mostra metadados" +msgstr "Metadados totais: %u\n" -#: app/flatpak-builtins-build-export.c:978 -#, fuzzy, c-format +#: app/flatpak-builtins-build-export.c:974 +#, c-format msgid "Metadata Written: %u\n" -msgstr "Mostra metadados" +msgstr "Metadados escritos: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" -msgstr "" +msgstr "Conteúdo total: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" -msgstr "" +msgstr "Conteúdo escrito: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" -msgstr "" +msgstr "Conteúdo de bytes escritos:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "COMANDO" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Versão do Flatpak para exigir" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAIOR.MENOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Não processa exportações" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Info de dados extras" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Adiciona info do ponto de extensão" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NOME=VARIÁVEL[=VALOR]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "Remove info do ponto de extensão" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NOME" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" -msgstr "" +msgstr "Define a prioridade da extensão (apenas para extensões)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" -msgstr "" +msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Altera o sdk usado para o aplicativo" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Altera o runtime usado para o aplicativo" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "RUNTIME" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Define a opção de metadados genérica" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUPO=CHAVE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Revoga permissões de escrita do aplicativo" + +#: app/flatpak-builtins-build-finish.c:155 #, c-format -msgid "Not exporting %s, wrong prefix\n" -msgstr "" +msgid "Not exporting %s, wrong extension\n" +msgstr "Não exportando %s, extensão errada\n" -#: app/flatpak-builtins-build-finish.c:143 -#, fuzzy, c-format +#: app/flatpak-builtins-build-finish.c:163 +#, c-format +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "Não exportando %s, nome de arquivo de exportação não permitido\n" + +#: app/flatpak-builtins-build-finish.c:167 +#, c-format msgid "Exporting %s\n" -msgstr "Atualizando resumo\n" +msgstr "Exportando %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" -msgstr "" +msgstr "Mais de um executável localizado\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" -msgstr "" +msgstr "Usando %s como comando\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" -msgstr "" +msgstr "Nenhum executável localizado\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Elementos insuficientes no argumento de --extra-data %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -744,7 +630,8 @@ "Elementos insuficientes no argumento de --metadata %s, formato deve ser " "GRUPO=CHAVE[=VALOR]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -753,21 +640,21 @@ "Elementos insuficientes no argumento de --extension %s, formato deve ser " "NOME=VAR[=VALOR]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "DIRETÓRIO – Finaliza um diretório de compilação" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Diretório de compilação %s não inicializado" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Diretório de compilação %s já finalizado" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Por favor, reveja os arquivos exportados e os metadados\n" @@ -783,141 +670,149 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importa a imagem oci em vez do pacote flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" -msgstr "Referência “%s” não localizado no registro" +msgstr "Ref “%s” não localizado no registro" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 +#, c-format msgid "Importing %s (%s)\n" -msgstr "Atualizando: %s de %s\n" +msgstr "Importando %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "LOCALIZAÇÃO ARQUIVO – Importa um arquivo de pacote para um repositório local" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Arquitetura para usar" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Inicializa variável a partir do runtime nomeado" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Inicializa aplicativos a partir do aplicativo nomeado" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APLICATIVO" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Especifica a versão para --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSÃO" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Inclui essa extensão base" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "EXTENSÃO" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "Etiqueta de extensão para usar se compilação extensão" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "ETIQUETA_EXTENSÃO" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Inicializa /usr com uma cópia do sdk com permissão de escrita" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Especifica o tipo de compilação (app, runtime, extension)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TIPO" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Adiciona uma etiqueta" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ETIQUETA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Inclui essa extensão de sdk em /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Onde armazenar sdk (padrão é “usr”)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Reinicializa o/a sdk/var" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Extensão %s exigida está apenas parcialmente instalada" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Extensão %s exigida não está instalada" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "DIRETÓRIO NOMEAPLICATIVO SDK RUNTIME [RAMO] – Inicializa um diretório para " "compilação" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "RUNTIME deve ser especificado" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "“%s” não é um nome de aplicativo válido: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format 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-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Arquitetura para a qual será instalada" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Procura pelo runtime com o nome especificado" @@ -925,55 +820,243 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "LOCALIZAÇÃO [ID [RAMO]] – Assina um aplicativo ou runtime" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "LOCALIZAÇÃO deve ser especificada" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Nenhum id de chave gpg especificado" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Redireciona esse repositório a uma nova URL" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Um nome legal para usar para este repositório" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TÍTULO" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Ramo padrão para usar para este repositório" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "RAMO" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ID-COLEÇÃO" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" +"Implementa permanentemente ID de coleção em configurações remotas de cliente" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importa nova chave pública GPG padrão do ARQUIVO" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "ID da chave GPG para assinar o sumário" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Gera arquivos delta" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Suprime objetos não usados" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "Atravessa apenas NÍVEL pais para cada commit (padrão: -1=infinito)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "NÍVEL" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Gerando delta: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Gerando delta: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Falha ao gerar delta %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Falha ao gerar delta %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "LOCALIZAÇÃO – Atualiza metadados de um repositório" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Atualizando ramo do appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Atualizando resumo\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Objetos totais: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Nenhum objeto alcançável\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u objetos excluídos, %s liberado\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" -msgstr "" +msgstr "Lista chaves e valores de configuração" #: app/flatpak-builtins-config.c:42 msgid "Get configuration for KEY" -msgstr "" +msgstr "Obtém configuração da CHAVE" #: app/flatpak-builtins-config.c:43 msgid "Set configuration for KEY to VALUE" -msgstr "" +msgstr "Define configuração da CHAVE para VALOR" #: app/flatpak-builtins-config.c:44 msgid "Unset configuration for KEY" -msgstr "" +msgstr "Remove configuração da CHAVE" -#: app/flatpak-builtins-config.c:95 -#, fuzzy, c-format +#: app/flatpak-builtins-config.c:96 +#, c-format msgid "Unknown configure key '%s'" -msgstr "Comando desconhecido “%s”" +msgstr "Configuração de chave desconhecida “%s”" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 -#, fuzzy +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" -msgstr "APLICATIVO deve ser especificado" +msgstr "Você deve especificar a chave" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" -msgstr "" +msgstr "Você deve especificar a chave e o valor" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" -msgstr "" +msgstr "[CHAVE [VALOR]] – Gerencia configuração" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 msgid "Must specify one of --list, --get, --set or --unset" +msgstr "Deve-se especificar um entre --list, --get, --set ou --unset" + +#: app/flatpak-builtins-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-create-usb.c:44 +msgid "Arch to copy" +msgstr "Arquitetura para copiar" + +#: app/flatpak-builtins-create-usb.c:45 +msgid "DEST" +msgstr "DEST" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "Aviso: Omitindo ref “%s” relacionado porque não está instalado.\n" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" msgstr "" +"Aviso: Omitindo ref “%s” relacionado porque seu remoto “%s” não tem um " +"conjunto de ID de coleção.\n" -#: 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-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" +"O remoto “%s” não possui um conjunto de ID de coleção, necessário para a " +"distribuição P2P de “%s”." -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NOME – Exclui um repositório remoto" +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "CAMINHO-MONT REF [REF…] – Copia apps e/ou runtimes em mídia removível" + +#: app/flatpak-builtins-create-usb.c:459 +msgid "MOUNT-PATH and REF must be specified" +msgstr "CAMINHO-MONT e REF devem ser especificados" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" +"Ref “%s” localizada em múltiplas instalações: %s. Você deve especificar uma." + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" +"As refs devem estar todas na mesma instalação (encontradas em %s e %s)." + +#: app/flatpak-builtins-create-usb.c:673 +#, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "" +"Aviso: Não foi possível atualizar metadados do repo para remoto “%s”: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Aviso: Não foi possível atualizar dados de appstream para remoto “%s” " +"arquitetura “%s”: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "" +"Aviso: Não foi possível localizar dados de appstream para remoto “%s” " +"arquitetura “%s”: %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "" +"Não foi possível localizar dados de appstream para remoto “%s” arquitetura " +"“%s”: %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1122,205 +1205,175 @@ msgid "Can't switch uid" msgstr "Não foi possível trocar o uid" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Mostra instalações do usuário" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Mostra instalações do sistema" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Mostra instalações específicas do sistema" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" -msgstr "Mostra referência" +msgstr "Mostra ref" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Mostra commit" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Mostra origem" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Mostra tamanho" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Mostra metadados" -#: app/flatpak-builtins-info.c:60 -#, fuzzy +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "Mostra runtime" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "Mostra sdk" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" -msgstr "Mostra extensões" +msgstr "Mostra permissões" -#: app/flatpak-builtins-info.c:61 -#, fuzzy +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Gerência de acesso a arquivos" +msgstr "Consulta acesso a arquivos" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "CAMINHO" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Mostra extensões" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +msgid "Show location" +msgstr "Mostra localização" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "NOME [RAMO] – Obtém info sobre aplicativo e/ou runtime instalados" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NOME deve ser especificado" + +#: app/flatpak-builtins-info.c:202 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 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Aviso: O commit possui nenhum metadado de flatpak\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Arq.:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Ramo:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Origem:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 -#, fuzzy +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" -msgstr "ID de coleção" +msgstr "ID de coleção:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" -msgstr "" +msgstr "Data:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" -msgstr "" +msgstr "Assunto:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Commit ativo:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 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 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Commit:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" -msgstr "" +msgstr "Pai:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Localização:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Tamanho instalado:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "fim de vida:" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "rebase de fim de vida:" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Runtime:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "Sdk:" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Subdiretórios instalados:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Extensões:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 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" @@ -1331,7 +1384,7 @@ #: app/flatpak-builtins-install.c:60 msgid "Don't install related refs" -msgstr "Não instala referências relacionadas" +msgstr "Não instala refs relacionadas" #: app/flatpak-builtins-install.c:61 app/flatpak-builtins-update.c:59 msgid "Don't verify/install runtime dependencies" @@ -1357,61 +1410,35 @@ msgid "Only install this subpath" msgstr "Instala apenas esse subcaminho" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: 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:70 -#, fuzzy msgid "Uninstall first if already installed" -msgstr "%s commit %s já está instalado" +msgstr "Desinstala primeiro, se já instalado" -#: app/flatpak-builtins-install.c:212 -#, c-format -msgid "" -"This application depends on runtimes from:\n" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Esse aplicativo depende de runtimes de:\n" -" %s\n" -"Configure esse como o novo remoto “%s”" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Arquivo do pacote deve ser especificado" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Não há suporte a pacotes remotos" -#: app/flatpak-builtins-install.c:338 -#, fuzzy, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"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:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Arquivo ou uri deve ser especificado" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Instalando: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "LOCALIZAÇÃO/REMOTO [REF…] – Instala aplicativos ou runtimes" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "REMOTO e REF devem ser especificados" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Mostra informações extras" @@ -1428,375 +1455,716 @@ msgid "Arch to show" msgstr "Arquitetura para mostrar" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Lista todos os refs (incluindo localidade/depuração)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Origem" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Commit ativo" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Último commit" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Tamanho instalado" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Opções" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " – Lista os aplicativos e/ou runtimes instalados" -#: app/flatpak-builtins-list-remotes.c:40 +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Arquitetura para a qual será tornada atual" + +#: 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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "APLICATIVO deve ser especificado" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "RAMO deve ser especificado" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "Remove sobreposições existentes" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "Mostra sobreposições existentes" + +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[APLICATIVO] – Sobrepõe as configurações [para um aplicativo]" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "[TABELA] [ID] – Lista permissões" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "Tabela" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "Objeto" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "App" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" +msgstr "Permissões" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "Dados" + +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" +msgstr "ID TABELA – Remove item do armazenamento de permissão" + +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" +msgstr "Número insuficiente de argumentos" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" +msgstr "ID_APP – Redefine permissões para este aplicativo" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" +msgstr "Número incorreto de argumentos" + +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" +msgstr "ID_APP – Mostra permissões para este aplicativo" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" +msgstr "Mostra colunas disponíveis" + +#: app/flatpak-builtins-ps.c:43 +msgid "What information to show" +msgstr "Quais informações mostrar" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "CAMPO,…" + +#: app/flatpak-builtins-ps.c:53 +msgid "Application" +msgstr "Aplicativo" + +#: app/flatpak-builtins-ps.c:53 +msgid "Show the application ID" +msgstr "Mostra o ID de aplicativo" + +#: app/flatpak-builtins-ps.c:54 +msgid "Architecture" +msgstr "Arquitetura" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "Mostra a arquitetura" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Ramo" + +#: app/flatpak-builtins-ps.c:55 +msgid "Show the application branch" +msgstr "Mostra o ramo do aplicativo" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Commit" + +#: app/flatpak-builtins-ps.c:56 +msgid "Show the application commit" +msgstr "Mostra o commit de aplicativo" + +#: app/flatpak-builtins-ps.c:57 +msgid "Runtime" +msgstr "Runtime" + +#: app/flatpak-builtins-ps.c:57 +msgid "Show the runtime ID" +msgstr "Mostra o ID de runtime" + +#: app/flatpak-builtins-ps.c:58 +msgid "Runtime Branch" +msgstr "Ramo do runtime" + +#: app/flatpak-builtins-ps.c:58 +msgid "Show the runtime branch" +msgstr "Mostra o ramo do runtime" + +#: app/flatpak-builtins-ps.c:59 +msgid "Runtime Commit" +msgstr "Commit do runtime" + +#: app/flatpak-builtins-ps.c:59 +msgid "Show the runtime commit" +msgstr "Mostra o commit de runtime" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" +msgstr "PID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "Mostra o PID do processo wrapper" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "PID filho" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "Mostra o PID do processo sandbox" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "Coluna ambígua: %s" + +#: app/flatpak-builtins-ps.c:98 +#, c-format +msgid "Unknown column: %s" +msgstr "Coluna desconhecida: %s" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "Colunas disponíveis:\n" + +#: app/flatpak-builtins-ps.c:119 +msgid "Show all columns" +msgstr "Mostra todas as colunas" + +#: app/flatpak-builtins-ps.c:156 +msgid "Instance" +msgstr "Instância" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr " – Enumera sandboxes em execução" + +#: app/flatpak-builtins-ps.c:264 +msgid "Extra arguments given" +msgstr "Argumentos extras dados" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Faz nada se o remoto fornecido existir" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "" +"LOCALIZAÇÃO especifica um arquivo de configuração, não a localização do repo" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Desabilita verificação GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Marca o remoto como não enumerado" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Marca o remoto como não usar para dependências" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Define prioridade (padrão 1, maior é mais prioritário)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORIDADE" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Um nome legal para usar para este remoto" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Ramo padrão para usar para este remoto" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importa uma chave GPG do ARQUIVO (- para stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Desabilita o remoto" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Não foi possível carregar a uri %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:206 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Não foi possível carregar o arquivo %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" +msgstr "Formato de arquivo inválido" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Versão inválida %s, há suporte apenas a 1" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Chave gpg inválida" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NOME LOCALIZAÇÃO – Adiciona um repositório remoto" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "Verificação GPG é exigida se coleções estiverem habilitadas" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "O remoto %s já existe" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Nenhuma url especificada no arquivo flatpakrepo" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Remove remoto ainda que ele esteja em uso" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NOME – Exclui um repositório remoto" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Commit para mostrar informações" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Exibe log" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Mostra pai" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" REMOTO REF – Mostra informações sobre um aplicativo ou runtime em um remoto" + +#: app/flatpak-builtins-remote-info.c:213 +msgid "Download size:" +msgstr "Tamanho baixado:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Histórico:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Assunto:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Data:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Commit:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Aviso: O commit %s possui nenhum metadado de flatpak\n" + +#: app/flatpak-builtins-remote-list.c:40 msgid "Show remote details" msgstr "Mostra os detalhes do remoto" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Mostra remotos desabilitados" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " – Lista repositórios remotos" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "Nome" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Título" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Prioridade" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Mostra arquiteturas e ramos" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Mostra apenas runtimes" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Mostra apenas aplicativos" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.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:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Limita a essa arquitetura (* para todas)" -#: 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:177 -msgid "Commit" -msgstr "Commit" +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr " [REMOTO ou URI] – Mostra runtimes e aplicativos disponíveis" -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Tamanho baixado" -#: 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" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Habilita verificação GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Arquitetura para a qual será tornada atual" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Marca o remoto como enumerado" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Marca o repositório como usado para dependências" -#: 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-remote-modify.c:57 +msgid "Set a new url" +msgstr "Define uma nova url" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "RAMO deve ser especificado" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Habilita o remoto" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Atualiza metadados extras de um arquivo de resumo" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NOME – Modifica um repositório remoto" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "NOME remoto deve ser especificado" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "Aplicativo %s ramo %s não está instalado" +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "Atualizando metadados extras para resumo de remoto para %s\n" -#: 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-remote-modify.c:214 +#, c-format +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Erro ao atualizar metadados extras para “%s”: %s\n" + +#: app/flatpak-builtins-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Não foi possível atualizar metadados extras para %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "Faltando objeto: %s.%s\n" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "%s, excluindo objeto\n" + +#: app/flatpak-builtins-repair.c:134 +#, c-format +msgid "Can't load object %s: %s\n" +msgstr "Não foi possível carregar o objeto %s: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Problemas ao carregar dados para %s: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Erro ao reinstalar %s: %s\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "– Corrige uma instalação do flatpak" + +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Removendo ref não implantada %s…\n" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "Verificando %s…\n" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "Excluindo ref %s por causa de objetos faltantes\n" + +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" +msgstr "Suprimindo objetos\n" + +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" +msgstr "Reinstalando refs removidas\n" #: app/flatpak-builtins-repo.c:48 -#, fuzzy, c-format +#, c-format msgid "Title: %s\n" -msgstr "Título" +msgstr "Título: %s\n" #: app/flatpak-builtins-repo.c:51 -#, fuzzy, c-format +#, c-format msgid "Collection ID: %s\n" -msgstr "ID de coleção" +msgstr "ID de coleção: %s\n" #: app/flatpak-builtins-repo.c:54 #, c-format msgid "Default branch: %s\n" -msgstr "" +msgstr "Ramo padrão: %s\n" #: app/flatpak-builtins-repo.c:57 #, c-format msgid "Redirect URL: %s\n" -msgstr "" +msgstr "URL de redirecionamento: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-repo.c:65 #, fuzzy, c-format -msgid "Redirect collection ID: %s\n" -msgstr "ID de coleção" +msgid "Deploy collection ID: %s\n" +msgstr "ID de coleção: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" -msgstr "" +msgstr "Hash de chave GPG: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" -msgstr "" +msgstr "%zd ramos\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Instalado" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Baixar" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Mostra informações gerais sobre um repositório" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "Lisa os ramos no repositório" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Mostra metadados para um ramo" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "LOCALIZAÇÃO – Manutenção de repositório" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Redireciona esse repositório a uma nova URL" +#: app/flatpak-builtins-run.c:59 +msgid "Command to run" +msgstr "Comando para executar" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Um nome legal para usar para este repositório" +#: app/flatpak-builtins-run.c:60 +msgid "Branch to use" +msgstr "Ramo para usar" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Ramo padrão para usar para este repositório" +#: app/flatpak-builtins-run.c:61 +msgid "Use development runtime" +msgstr "Usa runtime de desenvolvimento" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" -"Implementa permanentemente ID de coleção em configurações remotas de cliente" - -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importa nova chave pública GPG padrão do ARQUIVO" - -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "ID da chave GPG para assinar o sumário" - -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Gera arquivos delta" - -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Suprime objetos não usados" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "Atravessa apenas NÍVEL pais para cada commit (padrão: -1=infinito)" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "NÍVEL" - -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Gerando delta: %s (%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Gerando delta: %s (%.10s-%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:203 -#, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Falha ao gerar delta %s (%.10s): " - -#: app/flatpak-builtins-repo-update.c:206 -#, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Falha ao gerar delta %s (%.10s-%.10s): " - -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "LOCALIZAÇÃO – Atualiza metadados de um repositório" - -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Atualizando ramo do appstream\n" - -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Atualizando resumo\n" - -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Objetos totais: %u\n" - -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Nenhum objeto alcançável\n" - -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u objetos excluídos, %s liberado\n" - -#: app/flatpak-builtins-run.c:53 -msgid "Command to run" -msgstr "Comando para executar" - -#: app/flatpak-builtins-run.c:54 -msgid "Branch to use" -msgstr "Ramo para usar" - -#: app/flatpak-builtins-run.c:55 -msgid "Use development runtime" -msgstr "Usa runtime de desenvolvimento" - -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Runtime para usar" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Versão do runtime para usar" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Registra o log das chamadas de barramento de acessibilidade" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "Não fazer chamadas de barramento de acessibilidade" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "Não inicia portais" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Habilita encaminhamento de arquivo" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "Executa o commit especificado" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "Usa o commit de runtime especificado" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "Execute totalmente em sandbox" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "APLICATIVO [args…] – Executa um aplicativo" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "Arquitetura para pesquisar por" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" -msgstr "" +msgstr "TEXTO – Pesquisa aplicativos/runtimes remotos para texto" -#: app/flatpak-builtins-search.c:249 -#, fuzzy +#: app/flatpak-builtins-search.c:263 msgid "TEXT must be specified" -msgstr "REMOTO deve ser especificado" +msgstr "TEXTO deve ser especificado" -#: app/flatpak-builtins-search.c:305 -#, fuzzy +#: app/flatpak-builtins-search.c:316 msgid "Application ID" -msgstr "ID de coleção" +msgstr "ID de aplicativo" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" -msgstr "" - -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Ramo:" +msgstr "Versão" -#: app/flatpak-builtins-search.c:310 -#, fuzzy +#: app/flatpak-builtins-search.c:321 msgid "Remotes" -msgstr "Nenhum remoto %s" +msgstr "Remotos" -#: app/flatpak-builtins-search.c:311 -#, fuzzy +#: app/flatpak-builtins-search.c:322 msgid "Description" -msgstr "Descrição completa" +msgstr "Descrição" -#: app/flatpak-builtins-search.c:320 -#, fuzzy +#: app/flatpak-builtins-search.c:331 msgid "No matches found" -msgstr "Sem combinações com %s" +msgstr "Nenhuma combinação localizada" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Arquitetura para desinstalar" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" -msgstr "Mantém referência no repositório local" +msgstr "Mantém ref no repositório local" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" -msgstr "Não desinstala referências relacionadas" +msgstr "Não desinstala refs relacionadas" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Remove arquivos ainda que estejam em execução" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "Desinstalar todos" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "Desinstalar não usados" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REF… – Desinstala um aplicativo" -#: 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: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" +msgid "Must specify at least one REF, --unused or --all" +msgstr "Deve especificar pelo menos uma REF, --unused ou --all" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "Não pode especificar REFs ao usar --all" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "Não pode especificar REFs ao usar --unused" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "Nada não usado para desinstalar\n" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1830,45 +2198,264 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REF…] – Atualiza aplicativos ou runtimes" -#: app/flatpak-builtins-update.c:119 -#, fuzzy +#: app/flatpak-builtins-update.c:128 msgid "Looking for updates...\n" -msgstr "Nenhuma atualização.\n" +msgstr "Procurando por atualizações…\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" -msgstr "" +msgstr "Remote “%s” localizado em múltiplas instalações:\n" -#: app/flatpak-builtins-utils.c:372 -#, fuzzy +#: app/flatpak-builtins-utils.c:374 msgid "Which do you want to use (0 to abort)?" -msgstr "Qual você deseja instalar (0 para abortar)?" +msgstr "Qual você deseja usar (0 para abortar)?" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-utils.c:376 #, c-format msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" msgstr "" +"Nenhum remoto escolhido para resolver “%s” que existe em várias instalações" -#: 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:488 app/flatpak-builtins-utils.c:491 +#, c-format +msgid "Updating appstream data for user remote %s" +msgstr "Atualizando dados de appstream para remoto %s de usuário" -#: 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:498 app/flatpak-builtins-utils.c:501 +#, c-format +msgid "Updating appstream data for remote %s" +msgstr "Atualizando dados de appstream para remoto %s" -#: app/flatpak-builtins-utils.c:493 -#, fuzzy, c-format -msgid "Error updating: %s\n" -msgstr "Atualizando resumo\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "Erro ao atualizar" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-utils.c:553 #, c-format msgid "Remote \"%s\" not found" +msgstr "Remoto “%s” não localizado" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "Runtime exigido para %s (%s) localizado no remoto %s\n" + +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "Você deseja instalá-lo?" + +#: app/flatpak-cli-transaction.c:86 +#, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "Runtime exigido para %s (%s) localizado em remotos: %s\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Qual você deseja instalar (0 para abortar)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Configurando %s como novo remoto “%s”" + +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"O remoto “%s”, referido por “%s” na localização %s contém aplicativos " +"adicionais.\n" +"O remoto deve ser mantido para instalações futuras?" + +#: app/flatpak-cli-transaction.c:123 +#, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" msgstr "" +"Esse aplicativo %s depende de runtimes de:\n" +" %s\n" +"Configure esse como o novo remoto “%s”" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "instalar" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "atualizar" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "instala pacote" + +#: app/flatpak-cli-transaction.c:147 +msgid "uninstall" +msgstr "desinstalar" + +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Instalando para usuário: %s de %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Instalando: %s de %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Atualizando para usuário: %s de %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Atualizando: %s de %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Instalando para usuário: %s do pacote %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Instalando: %s do pacote %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Desinstalando para usuário: %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Desinstalando: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Nenhuma atualização.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Agora em %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Aviso: Falha ao %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "Falha ao %s %s: " + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Erro: Falha ao %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "Aviso: %s está em fim de vida, na preferência de %s\n" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "Aviso: %s está em fim de vida, com motivo: %s\n" + +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "novas permissões" + +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "permissões" + +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "novo acesso a arquivo" + +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "acesso a arquivo" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "novo acesso a dbus" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "acesso a dbus" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "nova propriedade dbus" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "propriedade dbus" + +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "novo acesso dbus de sistema" + +#: app/flatpak-cli-transaction.c:529 +msgid "system dbus access" +msgstr "acesso dbus de sistema" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "nova propriedade dbus de sistema" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "propriedade dbus de sistema" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "novas etiquetas" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "etiquetas" + +#: app/flatpak-cli-transaction.c:564 +#, c-format +msgid "Uninstalling from %s:\n" +msgstr "Desinstalando de %s:\n" + +#: app/flatpak-cli-transaction.c:586 +#, c-format +msgid "Installing in %s:\n" +msgstr "Instalando em %s:\n" + +#: app/flatpak-cli-transaction.c:623 +#, c-format +msgid "Updating in %s:\n" +msgstr "Atualizando em %s:\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "Isto está bom" + +#: app/flatpak-cli-transaction.c:728 +#, c-format +msgid "Skipping: %s\n" +msgstr "Ignorando: %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "Houve um ou mais erros" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1887,33 +2474,41 @@ msgid "Uninstall an installed application or runtime" msgstr "Desinstala um aplicativo ou runtime instalado" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Lista aplicativos e/ou runtimes instalados" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Mostra informações do aplicativo ou runtime instalado" -#: app/flatpak-main.c:68 -#, fuzzy +#: app/flatpak-main.c:70 msgid "Configure flatpak" -msgstr "Configurar remoto" +msgstr "Configura o flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 -#, fuzzy +msgid "Repair flatpak installation" +msgstr "Corrige instalação do flatpak" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "Coloca aplicativos e/ou runtimes em mídia removível" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" -msgstr "Assina um aplicativo ou runtime" +msgstr "" +"\n" +" Localizando aplicativos e runtimes" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" -msgstr "" +msgstr "Pesquisa por aplicativos/runtimes de remoto" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1921,24 +2516,28 @@ "\n" " Execução de aplicativos" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Executa um aplicativo" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Sobrepõe as permissões para um aplicativo" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Especifica a versão padrão para executar" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Insere o espaço de nome de um aplicativo em execução" +#: app/flatpak-main.c:84 +msgid "Enumerate running applications" +msgstr "Enumera aplicativos em execução" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1946,24 +2545,49 @@ "\n" " Gerência de acesso a arquivos" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Concede a um aplicativo acesso a um arquivo específico" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Revoga o acesso a um arquivo específico" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Mostra informações sobre um arquivo específico" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Lista arquivos exportados" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" +"\n" +" Mostra permissões dinâmicas" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "Remove item para armazenamento de permissão" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "Lista permissões" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "Mostra permissões de aplicativo" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "Redefine permissões de aplicativo" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1971,33 +2595,32 @@ "\n" " Gerência de repositórios remotos" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Lista todos os remotos configurados" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Adiciona um novo repositório remoto (via URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modifica as propriedades de um remoto configurado" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Exclui um remoto configurado" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Lista o conteúdo de um remoto configurado" -#: app/flatpak-main.c:96 -#, fuzzy +#: app/flatpak-main.c:108 msgid "Show information about a remote app or runtime" -msgstr "Mostra informações do aplicativo ou runtime instalado" +msgstr "Mostra informações sobre um aplicativo ou runtime de remoto" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2005,285 +2628,146 @@ "\n" " Compilação de aplicativos" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Inicializa um diretório para compilação" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 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:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Finaliza um diretório de compilação para exportar" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exporta um diretório de compilação para um repositório" -#: app/flatpak-main.c:104 -#, fuzzy +#: app/flatpak-main.c:116 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" +msgstr "Cria um arquivo de pacote a partir de um ref em um repositório local" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importa um arquivo de pacote" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Assina um aplicativo ou runtime" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Atualiza o arquivo de sumário num repositório" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" -msgstr "Cria um novo commit baseado numa referência existente" +msgstr "Cria um novo commit baseado numa ref existente" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Mostra informações sobre um repo" -#: app/flatpak-main.c:126 -#, fuzzy +#: app/flatpak-main.c:138 msgid "Print debug information during command processing, -vv for more detail" -msgstr "Exibe informações de depuração durante o processamento de comandos" +msgstr "" +"Exibe informações de depuração durante o processamento de comandos, -vv para " +"mais detalhes" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Mostra opções de ajuda" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Exibe informações sobre a versão e sai" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Exibe a arquitetura padrão e sai" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Exibe arquiteturas para as quais há suporte e sai" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Exibe drivers gl ativos e sai" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Trabalha em instalações do usuário" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Trabalha em instalações do sistema (padrão)" -#: app/flatpak-main.c:143 -#, fuzzy +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" -msgstr "Trabalha instalações específicas do sistema" - -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NOME" +msgstr "Trabalha em instalação(ões) específica(s) do sistema" -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Comandos embutidos:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" +"A opção --installation foi usada várias vezes para um comando que trabalha " +"em uma instalação" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Comando desconhecido “%s”" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Nenhum comando especificado" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "erro:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Localizado em diversos remotos:\n" - -#: 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: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: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: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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Remoto %s desabilitado, ignorando atualização de %s" - -#: app/flatpak-transaction.c:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s já instalado, ignorando\n" - -#: 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: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: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:765 -msgid "update" -msgstr "atualizar" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Agora em %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Nenhuma atualização.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "instala pacote" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Aviso: Falha ao %s %s: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "Uma ou mais operações falharam" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, 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-context.c:210 +#: common/flatpak-context.c:213 #, 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-context.c:248 +#: common/flatpak-context.c:251 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Nome de dbus inválido %s\n" +msgid "Invalid dbus name %s" +msgstr "Nome de dbus inválido %s" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, 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-context.c:290 +#: common/flatpak-context.c:293 #, 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-context.c:318 +#: common/flatpak-context.c:321 #, 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-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2292,479 +2776,1000 @@ "Localização de sistema de arquivos desconhecida %s, localizações válidas " "são: host, home, xdg-*[/…], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Formato de env inválido %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Compartilha com o host" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "COMPARTILHAR" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Desfaz compartilhamento com o host" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Expõe o soquete para o aplicativo" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOQUETE" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Não expõe o soquete para o aplicativo" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Expõe o dispositivo para o aplicativo" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "DISPOSITIVO" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Não expõe o dispositivo para o aplicativo" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" -msgstr "Permiti a funcionalidade" +msgstr "Permite a funcionalidade" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FUNCIONALIDADE" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Não permite funcionalidade" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 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-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "SISTEMA_DE_ARQUIVOS[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Não expõe o sistema de arquivos para o aplicativo" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SISTEMA_DE_ARQUIVOS" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Define uma variável de ambiente" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VAR=VALOR" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Permite o aplicativo ter um nome no barramento de sessão" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NOME_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 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-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Permite o aplicativo ter um nome no barramento de sistema" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 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-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Adiciona uma opção de política genérica" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSISTEMA.CHAVE=VALOR" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Remove uma opção de política genérica" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Persiste o diretório pessoal" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "ARQUIVO" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 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-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Enquanto executava pull de %s a partir do remoto %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Atualizando metadados extras para resumo de remoto para %s\n" + +#: common/flatpak-dir.c:284 +#, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Ref inexistente (%s, %s) no remoto %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Ref inexistente “%s” no remoto %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Nenhum cache de flatpak no sumário do remoto “%s”" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Nenhuma entrada para %s no cache de flatpak de sumário do remoto “%s” " + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Nenhuma entrada para %s no cache esparso de flatpak de sumário remoto " + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "Não foi possível conectar ao barramento de sistema" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Nenhuma substituição localizada para %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s não instalado" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "%s (commit %s) não instalado" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Ao abrir o repositório %s: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Commit para implementar" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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 +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Ref inexistente (%s, %s) no remoto %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Falha ao localizar a última revisão para ref %s de remoto %s: %s\n" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" +msgstr "" + +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Soma de verificação inválida para dados extras %s" + +#: common/flatpak-dir.c:3964 +#, c-format +msgid "Empty name for extra data uri %s" +msgstr "Nome vazio para uri de dados extras %s" + +#: common/flatpak-dir.c:3971 +#, c-format +msgid "Unsupported extra data uri %s" +msgstr "Sem suporte à uri de dados extras %s" + +#: common/flatpak-dir.c:3985 +#, c-format +msgid "Failed to load local extra-data %s: %s" +msgstr "Falha ao carregar extra-data local %s: %s" + +#: common/flatpak-dir.c:3988 +#, c-format +msgid "Wrong size for extra-data %s" +msgstr "Tamanho inválido para extra-data %s" + +#: common/flatpak-dir.c:4003 +#, c-format +msgid "While downloading %s: " +msgstr "Enquanto baixava %s: " + +#: common/flatpak-dir.c:4010 +#, c-format +msgid "Wrong size for extra data %s" +msgstr "Tamanho inválido para dados extras %s" + +#: common/flatpak-dir.c:4021 +#, c-format +msgid "Invalid checksum for extra data %s" +msgstr "Soma de verificação inválida para dados extras %s" + +#: common/flatpak-dir.c:4080 +msgid "Remote OCI index has no registry uri" +msgstr "Índice de OCI remoto possui nenhuma uri de registro" + +#: common/flatpak-dir.c:4181 +#, c-format +msgid "%s commit %s already installed" +msgstr "%s commit %s já está instalado" + +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 +#, c-format +msgid "While pulling %s from remote %s: " +msgstr "Enquanto executava pull de %s a partir do remoto %s: " + +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Nenhuma combinação localizada" + +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" + +#: common/flatpak-dir.c:5448 +msgid "Not enough memory" +msgstr "Memória insuficiente" + +#: common/flatpak-dir.c:5467 +msgid "Failed to read from exported file" +msgstr "Falha ao ler do arquivo exportado" + +#: common/flatpak-dir.c:5661 +msgid "Error reading mimetype xml file" +msgstr "Erro ao ler o arquivo xml de tipo mime" + +#: common/flatpak-dir.c:5666 +msgid "Invalid mimetype xml file" +msgstr "Arquivo inválido de xml de tipo mim" + +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 +msgid "While getting detached metadata: " +msgstr "Enquanto obtinha metadados destacados: " + +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Enquanto obtinha metadados destacados: " + +#: common/flatpak-dir.c:6308 +msgid "While creating extradir: " +msgstr "Enquanto criava extradir: " + +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Soma de verificação inválida para dados extras" + +#: common/flatpak-dir.c:6358 +msgid "Wrong size for extra data" +msgstr "Tamanho inválido para dados extras" + +#: common/flatpak-dir.c:6371 +#, c-format +msgid "While writing extra data file '%s': " +msgstr "Enquanto escrevia o arquivo de dados extras “%s”: " + +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Enquanto obtinha metadados destacados: " + +#: common/flatpak-dir.c:6557 +#, c-format +msgid "apply_extra script failed, exit status %d" +msgstr "script apply_extra falhou, status de saída %d" + +#: common/flatpak-dir.c:6641 +#, c-format +msgid "While trying to resolve ref %s: " +msgstr "Enquanto tentava resolver ref %s: " + +#: common/flatpak-dir.c:6656 +#, c-format +msgid "%s is not available" +msgstr "%s não está disponível" + +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 +#, c-format +msgid "%s branch %s already installed" +msgstr "%s ramo %s já está instalado" + +#: common/flatpak-dir.c:6689 +#, c-format +msgid "Failed to read commit %s: " +msgstr "Falha ao ler commit %s: " + +#: common/flatpak-dir.c:6709 +#, c-format +msgid "While trying to checkout %s into %s: " +msgstr "Enquanto tentava fazer checkout de %s para %s: " + +#: common/flatpak-dir.c:6734 +msgid "While trying to checkout metadata subpath: " +msgstr "Enquanto tentava fazer checkout do subcaminho de metadados: " + +#: common/flatpak-dir.c:6765 +#, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Enquanto tentava fazer checkout do subcaminho “%s”: " + +#: common/flatpak-dir.c:6775 +msgid "While trying to remove existing extra dir: " +msgstr "Enquanto tentava remover diretório extra existente: " + +#: common/flatpak-dir.c:6786 +msgid "While trying to apply extra data: " +msgstr "Enquanto tentava aplicar dados extras: " + +#: common/flatpak-dir.c:6813 +#, c-format +msgid "Invalid deployed ref %s: " +msgstr "Ref implantado inválido %s: " + +#: common/flatpak-dir.c:6820 +#, c-format +msgid "Invalid commit ref %s: " +msgstr "Ref de commit inválido %s: " + +#: common/flatpak-dir.c:6828 +#, c-format +msgid "Deployed ref %s kind does not match commit (%s)" +msgstr "O tipo do ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:6836 +#, c-format +msgid "Deployed ref %s name does not match commit (%s)" +msgstr "O nome do ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:6844 +#, c-format +msgid "Deployed ref %s arch does not match commit (%s)" +msgstr "A arquitetura do ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:6850 +#, c-format +msgid "Deployed ref %s branch does not match commit (%s)" +msgstr "O ramo do ref implementado %s não coincide com o commit (%s)" + +#: common/flatpak-dir.c:6856 +#, 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:6889 +msgid "Deployed metadata does not match commit" +msgstr "Metadados implementados não coincidem com o commit" + +#: common/flatpak-dir.c:7794 +#, c-format +msgid "This version of %s is already installed" +msgstr "Essa versão de %s já está instalada" + +#: common/flatpak-dir.c:7801 +msgid "Can't change remote during bundle install" +msgstr "Não é possível alterar remoto durante instalação de pacote" + +#: common/flatpak-dir.c:7968 +#, c-format +msgid "%s branch already installed" +msgstr "%s ramo já está instalado" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 +#, c-format +msgid "%s branch %s is not installed" +msgstr "%s ramo %s não está instalado" + +#: common/flatpak-dir.c:8552 +#, c-format +msgid "%s branch %s not installed" +msgstr "%s ramo %s não está instalado" + +#: common/flatpak-dir.c:8893 +#, c-format +msgid "Pruning repo failed: %s" +msgstr "A supressão de repositório falhou: %s" + +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Nenhum sumário ou cache do Flatpak disponível para o remoto %s" + +#: common/flatpak-dir.c:9716 +#, c-format +msgid "Multiple branches available for %s, you must specify one of: " +msgstr "Vários ramos disponíveis para %s, você deve especificar uma entre: " + +#: common/flatpak-dir.c:9737 +#, c-format +msgid "Nothing matches %s" +msgstr "Sem combinações com %s" + +#: common/flatpak-dir.c:9837 +#, c-format +msgid "Can't find ref %s%s%s%s%s" +msgstr "Não foi possível localizar ref %s%s%s%s%s" + +#: common/flatpak-dir.c:9884 +#, c-format +msgid "Error searching remote %s: %s" +msgstr "Erro ao pesquisar remoto %s: %s" + +#: common/flatpak-dir.c:9969 +#, c-format +msgid "Error searching local repository: %s" +msgstr "Erro ao pesquisar repositório local: %s" + +#: common/flatpak-dir.c:10114 +#, c-format +msgid "%s/%s/%s not installed" +msgstr "%s/%s/%s não instalado" + +#: common/flatpak-dir.c:10284 +#, c-format +msgid "Could not find installation %s" +msgstr "Não foi possível localizar instalação de %s" + +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Chave gpg inválida" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Formato de arquivo inválido" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Formato de arquivo inválido" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Formato de arquivo inválido" + +#: common/flatpak-dir.c:10871 +#, c-format +msgid "Runtime %s, branch %s is already installed" +msgstr "Runtime %s, ramo %s já está instalado" + +#: common/flatpak-dir.c:10872 +#, c-format +msgid "App %s, branch %s is already installed" +msgstr "Aplicativo %s, ramo %s já está instalado" + +#: common/flatpak-dir.c:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" + +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Ref inexistente “%s” no remoto %s" + +#: common/flatpak-dir.c:11255 +#, c-format +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Mostra metadados para um ramo" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s não instalado" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s não instalado" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Extensão %s exigida está apenas parcialmente instalada" + +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to find latest revision for ref %s from remote %s: %s\n" +msgid "No gpg key found with ID %s (homedir: %s)" msgstr "" -#: common/flatpak-dir.c:2761 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "sha256 inválido para uri de dados extras %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: 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-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Erro durante a migração: %s\n" -#: common/flatpak-dir.c:2773 -#, c-format -msgid "Unsupported extra data uri %s" -msgstr "Sem suporte à uri de dados extras %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Nenhum remoto %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-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Nenhum comando especificado" -#: common/flatpak-dir.c:2790 -#, c-format -msgid "Wrong size for extra-data %s" -msgstr "Tamanho inválido para extra-data %s" +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" +msgstr "Falha ao abrir arquivo de informação do aplicativo" -#: common/flatpak-dir.c:2805 -#, c-format -msgid "While downloading %s: " -msgstr "Enquanto baixava %s: " +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Não foi possível criar um pipe de sincronização" -#: common/flatpak-dir.c:2812 -#, c-format -msgid "Wrong size for extra data %s" -msgstr "Tamanho inválido para dados extras %s" +#: common/flatpak-run.c:824 +msgid "Failed to sync with dbus proxy" +msgstr "Falha ao sincronizar com proxy de dbus" -#: 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-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Falha ao abrir arquivo temporário: %s" -#: common/flatpak-dir.c:2882 -msgid "Remote OCI index has no registry uri" +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" msgstr "" -#: common/flatpak-dir.c:3100 -#, c-format -msgid "%s commit %s already installed" -msgstr "%s commit %s já está instalado" +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Não foi possível criar um pipe de sincronização" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 #, c-format -msgid "While pulling %s from remote %s: " -msgstr "Enquanto executava pull de %s a partir do remoto %s: " +msgid "Failed to open flatpak-info file: %s" +msgstr "Falha ao abrir arquivo flatpak-info: %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-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Falha ao abrir arquivo brwapinfo.json: %s" -#: common/flatpak-dir.c:4331 -msgid "Not enough memory" -msgstr "Memória insuficiente" +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Inicializa aplicativos a partir do aplicativo nomeado" -#: common/flatpak-dir.c:4350 -msgid "Failed to read from exported file" -msgstr "Falha ao ler do arquivo exportado" +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Falha ao escrever para arquivo temporário" -#: common/flatpak-dir.c:4541 -msgid "Error reading mimetype xml file" -msgstr "Erro ao ler o arquivo xml de tipo mime" +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" -#: common/flatpak-dir.c:4546 -msgid "Invalid mimetype xml file" -msgstr "Arquivo inválido de xml de tipo mim" +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Falha ao %s %s: " -#: common/flatpak-dir.c:5089 -msgid "While getting detached metadata: " -msgstr "Enquanto obtinha metadados destacados: " +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Falha ao ler do arquivo exportado" -#: common/flatpak-dir.c:5107 -msgid "While creating extradir: " -msgstr "Enquanto criava extradir: " +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Pid inválido %s" -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" -msgstr "sha256 inválido para dados extras" +#: common/flatpak-run.c:2828 +#, c-format +msgid "ldconfig failed, exit status %d" +msgstr "ldconfig falhou, status de saída %d" -#: common/flatpak-dir.c:5157 -msgid "Wrong size for extra data" -msgstr "Tamanho inválido para dados extras" +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Não foi possível abrir o espaço de nome %s: %s" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" -msgstr "Soma de verificação inválida para dados extras" +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Número incorreto de argumentos" -#: common/flatpak-dir.c:5170 +#: common/flatpak-transaction.c:1347 #, c-format -msgid "While writing extra data file '%s': " -msgstr "Enquanto escrevia o arquivo de dados extras “%s”: " +msgid "Warning: Problem looking for related refs: %s" +msgstr "Aviso: Problema ao procurar por refs relacionadas: %s" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "O Aplicativo %s requer %s, que não foi localizado" -#: common/flatpak-dir.c:5340 +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "O Aplicativo %s requer %s, que não está instalado" + +#: common/flatpak-transaction.c:1571 #, c-format -msgid "apply_extra script failed, exit status %d" -msgstr "script apply_extra falhou, status de saída %d" +msgid "Remote %s disabled, ignoring %s update" +msgstr "Remoto %s desabilitado, ignorando atualização de %s" -#: common/flatpak-dir.c:5419 +#: common/flatpak-transaction.c:1583 #, c-format -msgid "While trying to resolve ref %s: " -msgstr "Enquanto tentava resolver ref %s: " +msgid "%s is already installed" +msgstr "%s já está instalado" -#: common/flatpak-dir.c:5434 +#: common/flatpak-transaction.c:1586 #, c-format -msgid "%s is not available" -msgstr "%s não está disponível" +msgid "%s is already installed from remote %s" +msgstr "%s já está instalada pelo remoto %s" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Argumento de require-flatpak inválido %s\n" -#: 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 +#: common/flatpak-transaction.c:1787 #, c-format -msgid "%s branch %s already installed" -msgstr "%s ramo %s já está instalado" +msgid "Error updating remote metadata for '%s': %s" +msgstr "Erro ao atualizar metadados de remoto para “%s”: %s" -#: common/flatpak-dir.c:5468 +#: common/flatpak-transaction.c:2025 #, c-format -msgid "Failed to read commit %s: " -msgstr "Falha ao ler commit %s: " +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" +"Aviso: Tratando erro de obtenção de remoto como não fatal, já que %s já está " +"instalado: %s" -#: common/flatpak-dir.c:5488 +#: common/flatpak-transaction.c:2035 #, c-format -msgid "While trying to checkout %s into %s: " -msgstr "Enquanto tentava fazer checkout de %s para %s: " +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Aviso: Não foi possível localizar metadados %s para dependências: %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-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Argumento de require-flatpak inválido %s\n" -#: common/flatpak-dir.c:5554 -msgid "While trying to remove existing extra dir: " -msgstr "Enquanto tentava remover diretório extra existente: " +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "Abortado pelo usuário" -#: common/flatpak-dir.c:5565 -msgid "While trying to apply extra data: " -msgstr "Enquanto tentava aplicar dados extras: " +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "Ignorando %s por causa do erro anterior" -#: common/flatpak-dir.c:5592 -#, fuzzy, c-format -msgid "Invalid deployed ref %s: " -msgstr "Pid inválido %s" +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "Abortado por causa de falha" -#: common/flatpak-dir.c:5599 -#, fuzzy, c-format -msgid "Invalid commit ref %s: " -msgstr "Pid inválido %s" +#: common/flatpak-utils.c:638 +#, c-format +msgid "Migrating %s to %s\n" +msgstr "Migrando %s para %s\n" -#: 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-utils.c:644 +#, c-format +msgid "Error during migration: %s\n" +msgstr "Erro durante a migração: %s\n" -#: 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-utils.c:753 +msgid "Name can't be empty" +msgstr "" -#: 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-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" -#: 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-utils.c:773 +msgid "Name can't start with a period" +msgstr "" -#: common/flatpak-dir.c:5635 +#: common/flatpak-utils.c:779 #, 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" +msgid "Name can't start with %c" +msgstr "" -#: 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-utils.c:795 +msgid "Name can't end with a period" +msgstr "" -#: 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-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-utils.c:805 #, c-format -msgid "%s branch %s is not installed" -msgstr "%s ramo %s não está instalado" +msgid "Name segment can't start with %c" +msgstr "" -#: common/flatpak-dir.c:7304 +#: common/flatpak-utils.c:817 #, c-format -msgid "%s branch %s not installed" -msgstr "%s ramo %s não está instalado" +msgid "Name can't contain %c" +msgstr "" -#: common/flatpak-dir.c:7628 -#, c-format -msgid "Pruning repo failed: %s" +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-utils.c:1026 #, c-format -msgid "Multiple branches available for %s, you must specify one of: " +msgid "Branch can't start with %c" msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-utils.c:1036 #, c-format -msgid "Nothing matches %s" -msgstr "Sem combinações com %s" +msgid "Branch can't contain %c" +msgstr "" -#: common/flatpak-dir.c:8258 +#: common/flatpak-utils.c:1087 #, 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" +msgid "Wrong number of components in %s" +msgstr "Número incorreto de argumentos" -#: common/flatpak-dir.c:8300 +#: common/flatpak-utils.c:1093 #, fuzzy, c-format -msgid "Error searching remote %s: %s" -msgstr "Erro: Falha ao %s %s: %s\n" +msgid "%s is not application or runtime" +msgstr "Assina um aplicativo ou runtime" -#: common/flatpak-dir.c:8345 +#: common/flatpak-utils.c:1099 #, fuzzy, c-format -msgid "Error searching local repository: %s" -msgstr "Mantém referência no repositório local" +msgid "Invalid name %s: %s" +msgstr "Nome de dbus inválido %s" -#: common/flatpak-dir.c:8471 -#, c-format -msgid "%s %s not installed" -msgstr "%s %s não instalado" +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Pid inválido %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "Ramo padrão: %s\n" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Pid inválido %s" + +#: common/flatpak-utils.c:2738 +msgid "No extra data sources" +msgstr "Nenhuma fonte de dados extras" -#: common/flatpak-dir.c:8638 +#: common/flatpak-utils.c:3712 #, c-format -msgid "Could not find installation %s" -msgstr "Não foi possível localizar instalação de %s" +msgid "Extracting icons for component %s\n" +msgstr "Extraindo ícones para o componente %s\n" -#: common/flatpak-dir.c:9236 +#: common/flatpak-utils.c:3716 #, c-format -msgid "Runtime %s, branch %s is already installed" -msgstr "Runtime %s, ramo %s já está instalado" +msgid "Error copying 64x64 icon: %s\n" +msgstr "Erro ao copiar ícone 64x64: %s\n" -#: common/flatpak-dir.c:9237 +#: common/flatpak-utils.c:3721 #, c-format -msgid "App %s, branch %s is already installed" -msgstr "Aplicativo %s, ramo %s já está instalado" +msgid "Error copying 128x128 icon: %s\n" +msgstr "Erro ao copiar ícone 128x128: %s\n" -#: common/flatpak-dir.c:9717 -msgid "Remote title not set" -msgstr "Título remoto não definido" +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "%s está em fim de vida, ignorando\n" -#: common/flatpak-dir.c:9739 -msgid "Remote default-branch not set" -msgstr "Ramo padrão remoto não definido" +#: common/flatpak-utils.c:3926 +#, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Nenhum dado de appstream para %s: %s\n" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Nenhum cache de flatpak no sumário remoto" +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Soma de verificação inválida para dados extras" -#: common/flatpak-dir.c:10342 +#: common/flatpak-utils.c:4836 #, 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 " +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" -#: common/flatpak-run.c:1456 +#: common/flatpak-utils.c:5062 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Falha ao abrir arquivo temporário de flatpak-info: %s" +msgid "No ref specified for OCI image %s" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-utils.c:5068 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Falha ao abrir arquivo temporário: %s" +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" -#: 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-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" -#: common/flatpak-run.c:1910 +#: common/flatpak-utils.c:5648 #, c-format -msgid "Failed to open app info file: %s" -msgstr "Falha ao abrir arquivo informação do aplicativo: %s" +msgid "Downloading metadata: %u/(estimating) %s" +msgstr "Baixando metadados: %u/(estimando) %s" -#: common/flatpak-run.c:1940 -msgid "Failed to sync with dbus proxy" -msgstr "Falha ao sincronizar com proxy de dbus" +#: common/flatpak-utils.c:5672 +#, c-format +msgid "Downloading: %s/%s" +msgstr "Baixando: %s/%s" -#: 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:5693 +#, c-format +msgid "Downloading extra data: %s/%s" +msgstr "Baixando dados extras: %s/%s" -#: common/flatpak-utils.c:624 -#, fuzzy, c-format -msgid "Migrating %s to %s\n" -msgstr "Atualizando: %s de %s\n" +#: common/flatpak-utils.c:5698 +#, c-format +msgid "Downloading files: %d/%d %s" +msgstr "Baixando arquivos: %d/%d %s" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:5782 #, 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" +msgid "Invalid require-flatpak argument %s" +msgstr "Argumento de require-flatpak inválido %s\n" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:5789 #, c-format -msgid "Downloading metadata: %u/(estimating) %s" -msgstr "" +msgid "%s needs a later flatpak version (%s)" +msgstr "%s precisa de uma versão posterior do flatpak (%s)" -#: common/flatpak-utils.c:6600 -#, fuzzy, c-format -msgid "Downloading: %s/%s" -msgstr "Mostra tamanho" +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "A string vazia não é um número" -#: common/flatpak-utils.c:6620 -#, fuzzy, c-format -msgid "Downloading extra data: %s/%s" -msgstr "Mostra tamanho" +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "“%s” não é um número não assinado" -#: common/flatpak-utils.c:6625 -#, fuzzy, c-format -msgid "Downloading files: %d/%d %s" -msgstr "Mostra tamanho" +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "O número “%s” está fora dos limites [%s, %s]" #. SECURITY: #. - Normal users do not need authentication to install signed applications @@ -2831,14 +3836,12 @@ #. - 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 "Atualiza o arquivo de sumário num repositório" +msgstr "Atualiza repositório do sistema" #: system-helper/org.freedesktop.Flatpak.policy.in:107 -#, fuzzy msgid "Authentication is required to update the system repository" -msgstr "Autenticação é necessária para atualizar informações remotas" +msgstr "Autenticação é necessária para atualizar o repositório de sistema" #: system-helper/org.freedesktop.Flatpak.policy.in:117 msgid "Install bundle" @@ -2866,14 +3869,12 @@ 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" +msgstr "Configurar" #: 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" +msgstr "Autenticação é necessária para configurar a instalação de software" #. SECURITY: #. - Normal users do not require admin authentication to update @@ -2885,12 +3886,62 @@ msgid "Update appstream" msgstr "Atualizar appstream" -#~ msgid "No remote %s" -#~ msgstr "Nenhum remoto %s" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "ID de coleção de redirecionamento: %s\n" -#, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Mostra instalações do usuário" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "sha256 inválido para uri de dados extras %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "sha256 inválido para dados extras" + +#~ msgid "Is this ok?" +#~ msgstr "Isto está bom?" + +#~ msgid "Add OCI registry" +#~ msgstr "Adiciona registro OCI" + +#~ msgid "Installing: %s\n" +#~ msgstr "Instalando: %s\n" + +#~ msgid "Found in remote %s\n" +#~ msgstr "Localizado no remoto %s\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Localizado no remoto %s, você deseja instalá-lo?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Localizado em diversos remotos:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s já instalado, ignorando\n" + +#~ msgid "fetch remote info" +#~ msgstr "obtém info de remoto" + +#~ msgid "One or more operations failed" +#~ msgstr "Uma ou mais operações falharam" + +#~ msgid "" +#~ "/var/tmp does not suport xattrs which is needed for system-wide " +#~ "installation as a user. FLATPAK_SYSTEM_CACHE_DIR can be used to set an " +#~ "alternative path." +#~ msgstr "" +#~ "/var/tmp não possui suporte a xattrs que é necessário para instalação " +#~ "para todo sistema como usuário. FLATPAK_SYSTEM_CACHE_DIR pode ser usado " +#~ "para definir um caminho alternativo." + +#~ msgid "No ref information available in repository" +#~ msgstr "Nenhuma informação de ref disponível no repositório" + +#~ msgid "Remote title not set" +#~ msgstr "Título remoto não definido" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Ramo padrão remoto não definido" #, fuzzy #~ msgid "Search only system-wide installations" @@ -2906,9 +3957,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Falha ao desvincular arquivo temporário" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Falha ao escrever para arquivo temporário" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Instalando: %s\n" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/ru.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/ru.gmo differ diff -Nru flatpak-0.11.3/po/ru.po flatpak-1.0.7/po/ru.po --- flatpak-0.11.3/po/ru.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/ru.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-02-10 11:59+0300\n" "Last-Translator: Roman Kharin \n" "Language-Team: romiq.kh@gmail.com\n" @@ -19,217 +19,6 @@ "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.8.7.1\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Ничего не делать если удалённый репозиторий уже существует" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "ПУТЬ указывает на файл с конфигурацией, а не на репозиторий" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Включить проверку GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Пометить удалённый репозиторий как просматриваемый" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "" -"Пометить удалённый репозиторий как используемый для поиска зависимостей" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Указать новый адрес url" - -#: 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 "АДРЕС" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Включить удалённый репозиторий" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "" -"Обновить метаданные дополнительных данных из файла со сводной информацией" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Отключить проверку GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Пометить удалённый репозиторий как не просматриваемый" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "" -"Пометить удалённый репозиторий как не используемый для поиска зависимостей" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Установить приоритет (по умолчанию 1, чем больше тем выше приоритет)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "ПРИОРИТЕТ" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Красивое имя для удалённого репозитория" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "ЗАГОЛОВОК" - -#: app/flatpak-builtins-add-remote.c:78 -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 -msgid "BRANCH" -msgstr "ВЕТКА" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:82 -msgid "Import GPG key from FILE (- for stdin)" -msgstr "Импортировать ключ GPG из ФАЙЛА (- из стандартного потока ввода)" - -#: 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 "ФАЙЛ" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Отключить удалённый репозиторий" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "" - -#: 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: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: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: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: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: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: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:348 -msgid "GPG verification is required if collections are enabled" -msgstr "" - -#. Do nothing -#: app/flatpak-builtins-add-remote.c:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Удалённый репозиторий %s уже существует" - -#: app/flatpak-builtins-add-remote.c:371 -msgid "No url specified in flatpakrepo file" -msgstr "Не указан адрес в файле flatpakrepo" - -#: 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:464 -msgid "NAME - Modify a remote repository" -msgstr "ИМЯ - Изменить удалённый репозиторий" - -#: app/flatpak-builtins-add-remote.c:474 -msgid "Remote NAME must be specified" -msgstr "Должно быть указано ИМЯ для удалённого репозитория" - -#: 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:488 -#, c-format -msgid "Error updating extra metadata for '%s': %s\n" -msgstr "Ошибка при обновлении метаданных дополнительных данных для '%s': %s\n" - -#: 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:56 msgid "Export runtime instead of app" msgstr "Экспортировать среду исполнения вместо приложения" @@ -239,12 +28,13 @@ msgstr "Архитектура для пакета" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "АРХ" @@ -252,6 +42,14 @@ msgid "Url for repo" msgstr "Адрес url для репозитория" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "АДРЕС" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Адрес среды исполнения файла flatpakrepo" @@ -260,6 +58,14 @@ msgid "Add GPG key from FILE (- for stdin)" msgstr "Добавить ключ GPG из ФАЙЛА (- из стандартного потока ввода)" +#: app/flatpak-builtins-build-bundle.c:60 app/flatpak-builtins-build.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "ФАЙЛ" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Экспортировать образ oci вместо пакета flatpak" @@ -270,26 +76,29 @@ msgstr "ID Ключа GPG для подписи сводной информации" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "КЛЮЧ-ID" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "Домашний каталог GPG для поиска связок ключей" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "ДОМАШНИЙ_КАТАЛОГ" @@ -297,12 +106,12 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "ИЗМЕНЕНИЕ" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -310,25 +119,46 @@ "ПУТЬ ИМЯ_ФАЙЛА ИМЯ [ВЕТКА] - создать один файл с пакетом из локального " "репозитория" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Должны быть указаны ПУТЬ, ИМЯ_ФАЙЛА и ИМЯ" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Слишком много аргументов" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' не является корректным репозиторием" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "'%s' не является корректным именем: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' не является корректным именем ветки: %s" @@ -354,7 +184,7 @@ msgstr "Начать сборку в указанном каталоге" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "КАТАЛОГ" @@ -362,11 +192,11 @@ msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Каталог для поиска других sdk (по умолчанию 'usr')" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Использовать другой файл метаданных" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "" @@ -374,373 +204,427 @@ msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "Журналировать вызовы пользовательской шины" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Журналировать вызовы системной шины" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "КАТАЛОГ [КОМАНДА [параметры...]] - Сборка в каталоге" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "Должен быть указан КАТАЛОГ" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Каталог сборки %s не инициализирован, воспользуйтесь flatpak build-init" -#: app/flatpak-builtins-build.c:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "" "некорректные метаданные, не является ни приложением, ни средой выполнения" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "Не найдена точка расширения подходящая для %s в %s" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Отсутствует '=' в параметре связанного монтирования '%s'" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Невозможно запустить приложение" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Исходный каталог репозитория" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "ИСТОЧНИК-РЕПОЗИТОРИЙ" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Ссылка на репозиторий" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "ИСТОЧНИК-ССЫЛКА" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Тема в одну строку" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "ТЕМА" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Полное описание" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "ТЕЛО" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Обновить ветку appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Не обновлять сводную информацию" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 для подписи изменения" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:239 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" "НАЗН-РЕПО [НАЗН-ССЫЛКА]... - Зафиксировать изменение на основе существующего " "изменения (или изменений)" -#: app/flatpak-builtins-build-commit-from.c:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "Должен быть указан НАЗН-РЕПО" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Если --src-repo не задана, должна быть указана ровно одна ссылка назначения" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Если --src-ref задана, должна быть указана ровно одна ссылка назначения" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 msgid "Either --src-repo or --src-ref must be specified." msgstr "Должны быть задана --src-repo либо --src-ref." -#: app/flatpak-builtins-build-commit-from.c:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "Невозможно зафиксировать частичное изменение источника" -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Имя архитектуры для экспорта (должна быть совместима с хостом)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Зафиксировать среду исполнения (/usr) вместо приложения (/app)" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Использовать другой каталог для файлов" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "ПОДКАТАЛОГ" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Исключить файлы" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "ШАБЛОН" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Исключенные файлы для добавления" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" msgstr "" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, fuzzy, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" msgstr "Ошибка при открытии временного файла: %s" -#: app/flatpak-builtins-build-export.c:370 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Некорректный тип uri %s, поддерживается только http/https" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Не возможно найти базовое имя в %s, укажите имя явно" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "" "Не разрешается использовать символ '/' в названии дополнительных данных " -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Неверный формат контрольной суммы sha256: '%s'" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Дополнительные данные нулевого размера не поддерживаются" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "ПУТЬ КАТАЛОГ [ВЕТКА] - Создать репозиторий из каталога сборки" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "Должны быть указаны ПУТЬ и КАТАЛОГ" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, fuzzy, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "'%s' не является корректным именем приложения: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Не указано имя в метаданных" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, fuzzy, c-format msgid "Metadata Total: %u\n" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, fuzzy, c-format msgid "Metadata Written: %u\n" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "Указать команду" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "КОМАНДА" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Требовать версию flatpak" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Не делать экспорт" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Информация о дополнительных данных" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Добавить информацию о точке расширения" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "ИМЯ=ПЕРЕМЕННАЯ[=ЗНАЧЕНИЕ]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Добавить информацию о точке расширения" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +#, fuzzy +msgid "NAME" +msgstr "ИМЯ_ФАЙЛА" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Заменить sdk, используемое приложением" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 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-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "СРЕДА_ИСПОЛНЕНИЯ" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 #, fuzzy msgid "Set generic metadata option" msgstr "Удалить параметр обобщенной политики" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Отозвать у приложения право на запись" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, non-allowed export filename\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, fuzzy, c-format msgid "Exporting %s\n" msgstr "Обновление сводной информации\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Слишком мало элементов у параметра --extra-data %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, fuzzy, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -749,7 +633,8 @@ "Слишком мало элементов у параметра --extension %s, формат должен иметь вид " "ИМЯ=ПЕРЕМЕННАЯ[=ЗНАЧЕНИЕ]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -758,21 +643,21 @@ "Слишком мало элементов у параметра --extension %s, формат должен иметь вид " "ИМЯ=ПЕРЕМЕННАЯ[=ЗНАЧЕНИЕ]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "КАТАЛОГ - Финализировать каталог сборки" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Каталог сборки %s не инициализирован" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Каталог сборки %s уже финализирован" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Пожалуйста, перепроверьте экспортированные файлы и метаданные\n" @@ -788,140 +673,149 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Импортировать образ oci вместо пакета flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, fuzzy, c-format msgid "Ref '%s' not found in registry" msgstr "'%s' не является корректным репозиторием" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, fuzzy, c-format msgid "Importing %s (%s)\n" msgstr "Обновление: %s из %s\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "ПУТЬ ИМЯ_ФАЙЛА - Импортировать файл с пакетом в локальный репозиторий" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 msgid "LOCATION and FILENAME must be specified" msgstr "Должны быть указаны ПУТЬ и ИМЯ_ФАЙЛА" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Использовать архитектуру" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Инициализировать окружение из названной среды исполнения" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Инициализировать приложения из названного приложения" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "ПРИЛОЖЕНИЕ" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 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:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "ВЕРСИЯ" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Включить указанное базовое расширение" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "РАСШИРЕНИЕ" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "РАСШИРЕНИЕ" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Инициализировать каталог /usr с доступной для записи копией sdk" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Укажите тип сборки (app, runtime, extension)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "ТИП" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Добавить метку" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "МЕТКА" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Включить указанное расширение sdk в каталог /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Путь к sdk (по умолчанию 'usr')" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Переинициализировать sdk/окружение" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Требуемое расширение %s установлено частично" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Требуемое расширение %s не установлено" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "КАТАЛОГ ИМЯ_ПРИЛОЖЕНИЯ SDK СРЕДА_ИСП [ВЕТКА] - Инициализировать каталог для " "сборки" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "Должна быть указана СРЕДА_ИСП" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" "'%s' не является корректным именем для типа сборки, укажите app, runtime или " "extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' не является корректным именем приложения: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Каталог сборки %s уже инициализирован" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Архитектура для установки" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Искать среду исполнения с указанным именем" @@ -929,10 +823,120 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "ПУТЬ [ID [ВЕТКА]] - Подписать приложение или среду разработки" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "Должен быть указан ПУТЬ" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Ключ/кличи GPG не указаны" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Красивое имя для репозитория" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "ЗАГОЛОВОК" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Ветка по умолчанию для репозитория" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "ВЕТКА" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "ID Ключа GPG для подписи сводной информации" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Создать дельта файлы" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Очистить неиспользуемые объекты" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Следовать только до ГЛУБИНЫ при поиске родителей для каждого " +"зафиксированного изменения (по умолчанию: -1=бесконечно)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "ГЛУБИНА" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Создание дельты: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Создание дельты: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, fuzzy, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Ошибка при создании дельты %s (%.10s): %s\n" + +#: app/flatpak-builtins-build-update-repo.c:204 +#, fuzzy, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Ошибка при создании дельты %s (%.10s-%.10s): %s\n" + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "ПУТЬ - Обновить метаданные репозитория" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Обновление ветки appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Обновление сводной информации\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Всего объектов: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Нет недоступных объектов\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Удалено %u объектов, %s освобождено\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -949,35 +953,105 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, fuzzy, c-format msgid "Unknown configure key '%s'" msgstr "Неизвестная команда '%s'" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 #, fuzzy msgid "You must specify key" msgstr "Должно быть указано ПРИЛОЖЕНИЕ" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Искать приложение с указанным именем" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "ИМЯ - Удалить удалённый репозиторий" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Показать архитектуры" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "НАЗНАЧЕНИЕ=ИСТОЧНИК" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "Должны быть указаны УДАЛЁННЫЙ_РЕПО и ССЫЛКА" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Обновление ветки appstream для удалённого репозитория %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1127,212 +1201,191 @@ msgid "Can't switch uid" msgstr "Невозможно сменить пользователя" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Показать установленное только для пользователя" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Показать установленное для всех пользователей" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Показать установленное в указанном каталоге" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Показать ссылки" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Показать зафиксированные изменения" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Показать происхождение" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 #, fuzzy msgid "Show size" msgstr "Показать ссылки" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 #, fuzzy msgid "Show metadata" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Показать только среды исполнения" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Показать ссылки" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Показать параметры справки" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, fuzzy msgid "Query file access" msgstr "" "\n" " Управление доступом к файлам" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "ПУТЬ" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 #, fuzzy msgid "Show extensions" msgstr "Показать параметры справки" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Показать параметры справки" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "ИМЯ [ВЕТКА] - Получить информацию об установленных приложениях и/или средах " "исполнения" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "Должно быть указано ИМЯ" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 #, fuzzy msgid "Branch:" msgstr "Используемая ветка" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "Запустить приложение" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 #, fuzzy msgid "Installed size:" msgstr "Установка: %s\n" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 -#, fuzzy -msgid "Runtime:" -msgstr "Используемая среда исполнения" - -#: app/flatpak-builtins-info.c:242 -msgid "Installed subdirectories:" -msgstr "" - -#: app/flatpak-builtins-info.c:363 -#, fuzzy -msgid "Extension:" -msgstr "Показать параметры справки" - -#: app/flatpak-builtins-info.c:374 -msgid "Subpaths:" -msgstr "" - -#: 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 "Искать приложение с указанным именем" - -#: app/flatpak-builtins-info-remote.c:52 -msgid "Display log" +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" 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" +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" 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 +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 #, fuzzy -msgid "Download size:" -msgstr "Показать ссылки" - -#: app/flatpak-builtins-info-remote.c:223 -msgid "History:\n" -msgstr "" +msgid "Runtime:" +msgstr "Используемая среда исполнения" -#: app/flatpak-builtins-info-remote.c:244 -msgid " Subject:" +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" msgstr "" -#: app/flatpak-builtins-info-remote.c:245 -msgid " Date:" +#: app/flatpak-builtins-info.c:260 +msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info-remote.c:246 +#: app/flatpak-builtins-info.c:411 #, fuzzy -msgid " Commit:" -msgstr "Показать зафиксированные изменения" +msgid "Extension:" +msgstr "Показать параметры справки" -#: app/flatpak-builtins-info-remote.c:292 -#, c-format -msgid "Warning: Commit %s has no flatpak metadata\n" +#: app/flatpak-builtins-info.c:422 +msgid "Subpaths:" msgstr "" #: app/flatpak-builtins-install.c:58 @@ -1371,7 +1424,8 @@ msgid "Only install this subpath" msgstr "Устанавливать только указанный подкаталог" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Автоматически отвечать да на все вопросы" @@ -1380,51 +1434,27 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Это приложение зависит от сред исполнения из:\n" -" %s\n" -"Добавить его как новый удалённый репозиторий '%s'" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Должно быть указано имя файла с пакетом" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Пакеты из удалённых репозиториев не поддерживаются" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Должно быть указано имя файла или адрес" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Установка: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "" "ПУТЬ/УДАЛЁННЫЙ_РЕПО [ССЫЛКА] - Установить приложения или среды исполнения" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "Должны быть указаны УДАЛЁННЫЙ_РЕПО и ССЫЛКА" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Показать дополнительную информацию" @@ -1441,384 +1471,773 @@ msgid "Arch to show" msgstr "Показать архитектуры" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 #, fuzzy msgid "Installed size" msgstr "Установка: %s\n" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Показать список установленных приложений и/или сред исполнения" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Архитектура, которая станет текущей" + +#: app/flatpak-builtins-make-current.c:58 +msgid "APP BRANCH - Make branch of application current" +msgstr "ПРИЛОЖЕНИЕ ВЕТКА - Сделать ветку текущей для приложения" + +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Должно быть указано ПРИЛОЖЕНИЕ" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "Должна быть указана ВЕТКА" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +#, fuzzy +msgid "[APP] - Override settings [for application]" +msgstr "ПРИЛОЖЕНИЕ - Переопределить настройки для приложения" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Отозвать у приложения право на запись" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Слишком много аргументов" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Добавить разрешения приложению" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Слишком много аргументов" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Добавить разрешения приложению" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Показать отключённые удалённые репозитории" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "ФАЙЛ - Получить информацию об экспортированном файле" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Запустить приложение" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Запустить приложение" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Использовать архитектуру" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +#, fuzzy +msgid "Branch" +msgstr "Используемая ветка" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Показать архитектуры и ветки" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Показать параметры справки" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Используемая среда исполнения" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Показать только среды исполнения" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Используемая среда исполнения" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Показать только среды исполнения" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Используемая среда исполнения" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Показать только среды исполнения" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "ID_ПРИЛ" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Неизвестная команда '%s'" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Показать параметры справки" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "установить" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Информация о дополнительных данных" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Ничего не делать если удалённый репозиторий уже существует" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "ПУТЬ указывает на файл с конфигурацией, а не на репозиторий" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Отключить проверку GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Пометить удалённый репозиторий как не просматриваемый" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "" +"Пометить удалённый репозиторий как не используемый для поиска зависимостей" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Установить приоритет (по умолчанию 1, чем больше тем выше приоритет)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "ПРИОРИТЕТ" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Красивое имя для удалённого репозитория" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Указать ветку по умолчанию для удалённого репозитория" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Импортировать ключ GPG из ФАЙЛА (- из стандартного потока ввода)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Отключить удалённый репозиторий" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:206 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "Невозможно открыть пространство имён %s: %s" + +#: app/flatpak-builtins-remote-add.c:214 +#, fuzzy +msgid "Invalid file format" +msgstr "Неверный формат переменной окружения %s" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Некорректный тип uri %s, поддерживается только http/https" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Неверный pid %s" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "ИМЯ ПУТЬ - Добавить удалённый репозиторий" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Удалённый репозиторий %s уже существует" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Не указан адрес в файле flatpakrepo" + +#: app/flatpak-builtins-remote-add.c:383 +#, fuzzy, c-format +msgid "Warning: Could not update extra metadata for '%s': %s\n" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" + +#: app/flatpak-builtins-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Удалить удаленный репозиторий даже если он используется" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "ИМЯ - Удалить удалённый репозиторий" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 +#, fuzzy +msgid "Show parent" +msgstr "Показать ссылки" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:213 +#, fuzzy +msgid "Download size:" +msgstr "Показать ссылки" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 +#, fuzzy +msgid " Commit:" +msgstr "Показать зафиксированные изменения" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" msgstr "Показать подробности про удалённый репозиторий" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Показать отключённые удалённые репозитории" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Показать удалённые репозитории" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Показать архитектуры и ветки" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Показать только среды исполнения" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Показать только приложения" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Показать элементы с доступными обновлениями" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Показать только указанные архитектуры (* для всех)" -#: app/flatpak-builtins-ls-remote.c:96 +#: app/flatpak-builtins-remote-ls.c:101 #, fuzzy -msgid " [REMOTE] - Show available runtimes and applications" +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr " УДАЛЁННЫЙ_РЕПО - Показать доступные среды исполнения и приложения" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 #, fuzzy msgid "Download size" msgstr "Показать ссылки" -#: app/flatpak-builtins-ls-remote.c:304 -#, fuzzy -msgid "No ref information available in repository" -msgstr "ФАЙЛ - Получить информацию об экспортированном файле" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Включить проверку GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Архитектура, которая станет текущей" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Пометить удалённый репозиторий как просматриваемый" -#: app/flatpak-builtins-make-current.c:58 -msgid "APP BRANCH - Make branch of application current" -msgstr "ПРИЛОЖЕНИЕ ВЕТКА - Сделать ветку текущей для приложения" +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "" +"Пометить удалённый репозиторий как используемый для поиска зависимостей" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 -msgid "APP must be specified" -msgstr "Должно быть указано ПРИЛОЖЕНИЕ" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Указать новый адрес url" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Должна быть указана ВЕТКА" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Включить удалённый репозиторий" -#: app/flatpak-builtins-make-current.c:97 -#, c-format -msgid "App %s branch %s is not installed" -msgstr "Приложение %s ветка %s не установлено" +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "" +"Обновить метаданные дополнительных данных из файла со сводной информацией" -#: app/flatpak-builtins-override.c:54 -#, fuzzy -msgid "[APP] - Override settings [for application]" -msgstr "ПРИЛОЖЕНИЕ - Переопределить настройки для приложения" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "ИМЯ - Изменить удалённый репозиторий" -#: app/flatpak-builtins-repo.c:48 -#, c-format -msgid "Title: %s\n" -msgstr "" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Должно быть указано ИМЯ для удалённого репозитория" -#: app/flatpak-builtins-repo.c:51 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Collection ID: %s\n" +msgid "Updating extra metadata from remote summary for %s\n" msgstr "" +"Обновление метаданных дополнительных данных из файла со сводной информацией " +"в удалённом репозитории для %s\n" -#: app/flatpak-builtins-repo.c:54 +#: app/flatpak-builtins-remote-modify.c:214 #, c-format -msgid "Default branch: %s\n" -msgstr "" +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Ошибка при обновлении метаданных дополнительных данных для '%s': %s\n" -#: app/flatpak-builtins-repo.c:57 +#: app/flatpak-builtins-remote-modify.c:215 #, c-format -msgid "Redirect URL: %s\n" -msgstr "" +msgid "Could not update extra metadata for %s" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "Redirect collection ID: %s\n" +msgid "Object missing: %s.%s\n" msgstr "" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "GPG key hash: %s\n" +msgid "%s, deleting object\n" msgstr "" -#: app/flatpak-builtins-repo.c:77 -#, c-format -msgid "%zd branches\n" -msgstr "" +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Невозможно открыть пространство имён %s: %s" -#: app/flatpak-builtins-repo.c:99 -#, fuzzy -msgid "Installed" -msgstr "установить" +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Обновление ветки appstream для удалённого репозитория %s\n" -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "" +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Установка: %s\n" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repair.c:288 #, fuzzy -msgid "Print general information about the repository" -msgstr "ФАЙЛ - Получить информацию об экспортированном файле" +msgid "- Repair a flatpak installation" +msgstr "Показать установленное только для пользователя" -#: app/flatpak-builtins-repo.c:152 -#, fuzzy -msgid "List the branches in the repository" -msgstr "Ветка по умолчанию для репозитория" +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Неверный pid %s" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" msgstr "" -#: app/flatpak-builtins-repo.c:168 -#, fuzzy -msgid "LOCATION - Repository maintenance" -msgstr "ПУТЬ - Обновить метаданные репозитория" - -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Красивое имя для репозитория" - -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Ветка по умолчанию для репозитория" +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" +msgstr "Очистить неиспользуемые объекты" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Не устанавливать связанные ссылки" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "ID Ключа GPG для подписи сводной информации" - -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Создать дельта файлы" - -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Очистить неиспользуемые объекты" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" msgstr "" -"Следовать только до ГЛУБИНЫ при поиске родителей для каждого " -"зафиксированного изменения (по умолчанию: -1=бесконечно)" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "ГЛУБИНА" -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:54 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Создание дельты: %s (%.10s)\n" +msgid "Default branch: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Создание дельты: %s (%.10s-%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:65 #, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Ошибка при создании дельты %s (%.10s): %s\n" +msgid "Deploy collection ID: %s\n" +msgstr "Запустить приложение" -#: app/flatpak-builtins-repo-update.c:206 -#, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Ошибка при создании дельты %s (%.10s-%.10s): %s\n" +#: app/flatpak-builtins-repo.c:73 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "ПУТЬ - Обновить метаданные репозитория" +#: app/flatpak-builtins-repo.c:82 +#, c-format +msgid "%zd branches\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Обновление ветки appstream\n" +#: app/flatpak-builtins-repo.c:106 +#, fuzzy +msgid "Installed" +msgstr "установить" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Обновление сводной информации\n" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Всего объектов: %u\n" +#: app/flatpak-builtins-repo.c:175 +#, fuzzy +msgid "Print general information about the repository" +msgstr "ФАЙЛ - Получить информацию об экспортированном файле" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Нет недоступных объектов\n" +#: app/flatpak-builtins-repo.c:176 +#, fuzzy +msgid "List the branches in the repository" +msgstr "Ветка по умолчанию для репозитория" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Удалено %u объектов, %s освобождено\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "" + +#: app/flatpak-builtins-repo.c:192 +#, fuzzy +msgid "LOCATION - Repository maintenance" +msgstr "ПУТЬ - Обновить метаданные репозитория" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Команда для исполнения" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Используемая ветка" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Использовать среду исполнения для разработчиков" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Используемая среда исполнения" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Версия среды исполнения" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 #, fuzzy msgid "Log accessibility bus calls" msgstr "Журналировать вызовы пользовательской шины" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Журналировать вызовы пользовательской шины" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Не делать экспорт" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Показать установленные среды исполнения" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "ПРИЛОЖЕНИЕ [параметры...] - Запустить приложение" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Архитектура для установки" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-search.c:263 #, fuzzy msgid "TEXT must be specified" msgstr "Должен быть указан УДАЛЕННЫЙ_РЕПО" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 #, fuzzy msgid "Application ID" msgstr "Запустить приложение" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "" -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Используемая ветка" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "Нет удалённого репозитория %s" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 #, fuzzy msgid "Description" msgstr "Полное описание" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "Совпадений не обнаружено %s" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Удаляемая архитектура" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Сохранить ссылку в локальном репозитории" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Не удалять связанные ссылки" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Удалять файлы даже если запущено" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "установить" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Показать установленные среды исполнения" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "ССЫЛКА... - Удалить приложение" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Должна быть указана как минимум одна ССЫЛКА" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Установка: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Удаляемая архитектура" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1852,46 +2271,276 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[ССЫЛКА...] - Обновить приложения или среды исполнения" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" msgstr "Нет обновлений\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, fuzzy msgid "Which do you want to use (0 to abort)?" msgstr "Которую версию установить (0 - отмена)?" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Обновление ветки appstream для удалённого репозитория %s\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Обновление ветки appstream для удалённого репозитория %s\n" -#: app/flatpak-builtins-utils.c:493 -#, fuzzy, c-format -msgid "Error updating: %s\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" msgstr "Обновление сводной информации\n" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-utils.c:553 #, c-format msgid "Remote \"%s\" not found" msgstr "" +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "Требуемая среда исполнения для %s (%s) не установлена, поиск...\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Которую версию установить (0 - отмена)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "Требуемая среда исполнения для %s (%s) не установлена, поиск...\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Которую версию установить (0 - отмена)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Настройка %s как новый удаленный репозиторий '%s'" + +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Это приложение зависит от сред исполнения из:\n" +" %s\n" +"Добавить его как новый удалённый репозиторий '%s'" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "установить" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "обновить" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "установить пакет" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "установить" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Установка: %s из %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Установка: %s из %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Обновление: %s из %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Обновление: %s из %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Установка: %s из пакета %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Установка: %s из пакета %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Установка: %s из %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Установка: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Нет обновлений\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "В настоящее время на %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Предупреждение: Не удалось %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +" Управление доступом к файлам" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +" Управление доступом к файлам" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Журналировать вызовы системной шины" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Журналировать вызовы системной шины" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Установка: %s из %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Установка: %s\n" + +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "Обновление: %s из %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, fuzzy, c-format +msgid "Skipping: %s\n" +msgstr "Обновление сводной информации\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" + #. translators: please keep the leading space #: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" @@ -1909,33 +2558,42 @@ msgid "Uninstall an installed application or runtime" msgstr "Удалить установленное приложение или среду исполнения" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Показать список установленных приложений и/или сред исполнения" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Показать информацию об установленных приложениях или средах исполнения" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 #, fuzzy msgid "Configure flatpak" msgstr "Удалить настроенный удалённый репозиторий" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 #, fuzzy +msgid "Repair flatpak installation" +msgstr "Показать установленное только для пользователя" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +#, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Подписать приложение или среду исполнения" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1943,24 +2601,31 @@ "\n" " Запуск приложений" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Запустить приложение" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Переопределить разрешения для приложения" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Указать версию по умолчанию для запуска" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Войти в пространство имён запущенного приложения" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Запуск приложений" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1968,24 +2633,52 @@ "\n" " Управление доступом к файлам" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Разрешить доступ приложения к указанному файлу" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Отозвать разрешение на доступ к указанному файлу" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Показать информацию об указанном файле" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Список экспортированных файлов" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Отозвать у приложения право на запись" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Показать параметры справки" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Показать параметры справки" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1993,33 +2686,33 @@ "\n" " Управление удалёнными репозиториями" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Список всех настроенных удалённых репозиториев" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Добавить новый удалённый репозиторий (по АДРЕСУ)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Изменить свойства настроенного удалённого репозитория" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Удалить настроенный удалённый репозиторий" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Список содержимого удалённого репозитория" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 #, fuzzy msgid "Show information about a remote app or runtime" msgstr "Показать информацию об установленных приложениях или средах исполнения" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2027,287 +2720,144 @@ "\n" " Сборка приложений" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Инициализировать каталог для сборки" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Запустить команду сборки в каталоге сборки" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Финализировать каталог сборки для экспорта" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Экспортировать из каталога сборки в репозиторий" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, fuzzy msgid "Create a bundle file from a ref in a local repository" msgstr "Создать файл с пакетом из каталога сборки" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Импортировать файл с пакетом" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Подписать приложение или среду исполнения" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Обновить файл со сводной информацией в репозитории" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Создать новое изменение на базе существующей ссылки" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 #, fuzzy msgid "Print information about a repo" msgstr "ФАЙЛ - Получить информацию об экспортированном файле" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 #, fuzzy msgid "Print debug information during command processing, -vv for more detail" msgstr "Печатать отладочную информацию во время обработки команд" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:139 msgid "Print OSTree debug information during command processing" msgstr "Печатать отладочную информацию OSTree во время обработки команд" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Показать параметры справки" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Напечатать информацию о версии и выйти" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Напечатать архитектуру по умолчанию и выйти" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Напечатать поддерживаемые архитектуры и выйти" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Показать версию gl драйверов и выйти" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Работать с установленным только для пользователя" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Работать с установленным для всех пользователей (по умолчанию)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 #, fuzzy msgid "Work on specific system-wide installation(s)" msgstr "Работать с установленным в указанном каталоге" -#: app/flatpak-main.c:143 -#, fuzzy -msgid "NAME" -msgstr "ИМЯ_ФАЙЛА" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Встроенные команды:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Неизвестная команда '%s'" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Команда не указана" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "ошибка:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Обнаружено несколько удалённых репозиториев:\n" - -#: app/flatpak-transaction.c:327 -msgid "Which do you want to install (0 to abort)?" -msgstr "Которую версию установить (0 - отмена)?" - -#: 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:423 -#, c-format -msgid "The required runtime %s was not found in a configured remote.\n" -msgstr "" -"Требуемая среда исполнения %s не найдена в настроенных удалённых " -"репозиториях.\n" - -#: 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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Удалённый репозиторий %s отключен, обновление %s пропущено" - -#: app/flatpak-transaction.c:525 -#, fuzzy, c-format -msgid "%s already installed, skipping\n" -msgstr "%s уже установлено" - -#: 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: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: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:765 -msgid "update" -msgstr "обновить" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "В настоящее время на %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Нет обновлений\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "установить пакет" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Предупреждение: Не удалось %s %s: %s\n" - -#: app/flatpak-transaction.c:841 -#, c-format -msgid "Error: Failed to %s %s: %s\n" -msgstr "Ошибка: Не удалось %s %s: %s\n" - -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" -msgstr "Одна или более операций закончилась с ошибкой" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Неизвестный тип общего каталога %s, доступные типы: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Неизвестный тип политики %s, доступные типы: %s" -#: common/flatpak-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Некорректное имя dbus %s\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Неизвестный тип сокета %s, доступные типы: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Неизвестный тип устройства %s, доступные типы: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Неизвестный тип функционала %s, доступные типы: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, fuzzy, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2316,480 +2866,1002 @@ "Неизвестный путь файловой системы %s, доступные типы: host, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Неверный формат переменной окружения %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Добавить общий каталог с хостом" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "ОБЩ_КАТАЛОГ" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Убрать общий каталог с хостом" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Пробросить сокет приложению" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "СОКЕТ" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Убрать проброс сокета приложению" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Пробросить устройство приложению" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "УСТРОЙСТВО" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Убрать проброс устройства приложению" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Разрешить функционал" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "ФУНКЦИОНАЛ" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Запретить функционал" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Пробросить файловую систему приложению (:ro только для чтения)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "ФАЙЛ_СИСТЕМА[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Не пробрасывать файловую систему для приложения" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "ФАЙЛ_СИСТЕМА" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Установить переменную окружения" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Разрешить приложению владеть именем на сессионной шине" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Разрешить приложению обмениваться с именем на сессионной шине" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Разрешить приложению владеть именем на системной шине" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Разрешить приложению обмениваться с именем на системной шине" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Добавить параметр обобщенной политики" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ПОДСИСТЕМА.КЛЮЧ=ЗНАЧЕНИЕ" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Удалить параметр обобщенной политики" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Сохранять домашний каталог" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "ИМЯ_ФАЙЛА" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Во время получения %s из удалённого репозитория %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "" +"Обновление метаданных дополнительных данных из файла со сводной информацией " +"в удалённом репозитории для %s\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Не найден %s в удалённом репозитории %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Не найден %s в удалённом репозитории %s" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Отсутствует путь к кэшу в сводной информации удалённого репозитория" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Нет записи для %s в сводной информации кэша flatpak" + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Нет записи для %s в сводной информации кэша flatpak" + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Разрешить приложению владеть именем на системной шине" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Не найдено переопределений для %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s не установлено" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s не установлено" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Во время открытия репозитория %s:" -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Зафиксировать изменения для развёртывания" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Не найден %s в удалённом репозитории %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Не найден %s в удалённом репозитории %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" -#: common/flatpak-dir.c:2761 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Некорректная сумма sha256 для дополнительных данных по адресу %s" +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Некорректная контрольная сумма дополнительных данных по адресу %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "Пустое имя для дополнительных данных по адресу %s" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Не поддерживаемые дополнительные данные по адресу %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, fuzzy, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Ошибка чтения зафиксированного изменения %s: " -#: common/flatpak-dir.c:2790 +#: common/flatpak-dir.c:3988 #, fuzzy, c-format msgid "Wrong size for extra-data %s" msgstr "Неправильный размер дополнительных данных по адресу %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Во время загрузки %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Неправильный размер дополнительных данных по адресу %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Некорректная контрольная сумма дополнительных данных по адресу %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 #, fuzzy msgid "Remote OCI index has no registry uri" msgstr "ПУТЬ является реестром oci" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, fuzzy, c-format msgid "%s commit %s already installed" msgstr "%s ветка %s уже установлено" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Во время получения %s из удалённого репозитория %s: " -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Совпадений не обнаружено %s" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Не найден %s в удалённом репозитории %s" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Не достаточно памяти" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Ошибка чтения из экспортированного файла" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Во время получения отсоединённых метаданных:" -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Во время получения отсоединённых метаданных:" + +#: common/flatpak-dir.c:6308 msgid "While creating extradir: " msgstr "Во время создания каталога с дополнительными данными:" -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" -msgstr "Некорректная контрольная сумма sha256 для дополнительных данных" +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Некорректная контрольная сумма для дополнительных данных" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 msgid "Wrong size for extra data" msgstr "Некорректный размер дополнительных данных" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" -msgstr "Некорректная контрольная сумма для дополнительных данных" - -#: common/flatpak-dir.c:5170 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Во время записи в файл дополнительных данных '%s': " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Во время получения отсоединённых метаданных:" + +#: common/flatpak-dir.c:6557 #, fuzzy, c-format msgid "apply_extra script failed, exit status %d" msgstr "скрипт apply_extra закончился с ошибкой" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Во время поиска назначения ссылки %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s ветка %s уже установлено" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Ошибка чтения зафиксированного изменения %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, c-format msgid "While trying to checkout %s into %s: " msgstr "Во время получения %s в %s: " -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Во время получения метаданных подкаталога " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Во время получения %s в %s: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Во время удаления существующего каталога с дополнительными данными: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Во время применения дополнительных данных: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, fuzzy, c-format msgid "Invalid deployed ref %s: " msgstr "Неверный pid %s" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, fuzzy, c-format msgid "Invalid commit ref %s: " msgstr "Неверный pid %s" -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, c-format msgid "Deployed ref %s kind does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5615 +#: common/flatpak-dir.c:6836 #, c-format msgid "Deployed ref %s name does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5623 +#: common/flatpak-dir.c:6844 #, c-format msgid "Deployed ref %s arch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5629 +#: common/flatpak-dir.c:6850 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5635 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, c-format msgid "This version of %s is already installed" msgstr "Указанная версия %s уже установлена" -#: common/flatpak-dir.c:6540 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "Невозможно изменить удалённый репозиторий во время установки пакета" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s ветка %s уже установлено" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s ветка %s не установлено" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s ветка %s не установлена" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Отсутствует путь к кэшу в сводной информации удалённого репозитория" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Совпадений не обнаружено %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, fuzzy, c-format msgid "Error searching remote %s: %s" msgstr "Ошибка: Не удалось %s %s: %s\n" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, fuzzy, c-format msgid "Error searching local repository: %s" msgstr "Сохранить ссылку в локальном репозитории" -#: common/flatpak-dir.c:8471 -#, c-format -msgid "%s %s not installed" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "%s %s не установлено" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Не возможно найти %s в установленных" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Неверный pid %s" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Неверный формат переменной окружения %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Неверный формат переменной окружения %s" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Неверный формат переменной окружения %s" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Среда исполнения %s, ветка %s уже установлена" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Отсутствует путь к кэшу в сводной информации удалённого репозитория" +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Не найден %s в удалённом репозитории %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Нет записи для %s в сводной информации кэша flatpak" +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +msgid "No metadata branch for OCI" +msgstr "" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s не установлено" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s не установлено" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Требуемое расширение %s установлено частично" -#: common/flatpak-run.c:1456 +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Ошибка при открытии временного файла flatpak-info: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Ошибка при открытии временного файла: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Невозможно создать канал синхронизации" +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Ошибка: Не удалось %s %s: %s\n" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Нет удалённого репозитория %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Команда не указана" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "Ошибка при открытии файла с информацией о приложении: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Невозможно создать канал синхронизации" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Ошибка при синхронизации с прокси dbus" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Ошибка при открытии временного файла: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Невозможно создать канал синхронизации" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Ошибка при открытии временного файла flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Ошибка при открытии временного файла flatpak-info: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Инициализировать приложения из названного приложения" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Ошибка записи во временный файла" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Ошибка чтения из экспортированного файла" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Неверный pid %s" + +#: common/flatpak-run.c:2828 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "скрипт apply_extra закончился с ошибкой" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Невозможно открыть пространство имён %s: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Слишком много аргументов" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Предупреждение: Проблема при поиске связанных ссылок: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Приложение %s ветка %s не установлено" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Приложение %s ветка %s не установлено" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Удалённый репозиторий %s отключен, обновление %s пропущено" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s ветка %s уже установлено" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s ветка %s уже установлено" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Неверный pid %s" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Ошибка при обновлении метаданных дополнительных данных для '%s': %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Невозможно обновить метаданные дополнительных данных для %s" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Неверный pid %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, fuzzy, c-format msgid "Migrating %s to %s\n" msgstr "Обновление: %s из %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, fuzzy, c-format msgid "Error during migration: %s\n" msgstr "Ошибка: Не удалось %s %s: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Слишком много аргументов" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Подписать приложение или среду исполнения" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Некорректное имя dbus %s\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Неверный pid %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "'%s' не является корректным именем ветки: %s" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Неверный pid %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Нет источников дополнительных данных" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Ошибка: Не удалось %s %s: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Обновление ветки appstream для удалённого репозитория %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Некорректная контрольная сумма для дополнительных данных" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" msgstr "Показать ссылки" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" msgstr "Показать ссылки" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, fuzzy, c-format msgid "Downloading files: %d/%d %s" msgstr "Показать ссылки" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s требует более новую версию flatpak (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2917,12 +3989,46 @@ msgid "Update appstream" msgstr "Обновить ветку appstream для удалённого репозитория" -#~ msgid "No remote %s" -#~ msgstr "Нет удалённого репозитория %s" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Некорректная сумма sha256 для дополнительных данных по адресу %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Некорректная контрольная сумма sha256 для дополнительных данных" + +#~ msgid "Installing: %s\n" +#~ msgstr "Установка: %s\n" + +#, fuzzy +#~ msgid "Found in remote %s\n" +#~ msgstr "Обнаружено несколько удалённых репозиториев:\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Обнаружен удалённый репозиторий %s, установить?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Обнаружено несколько удалённых репозиториев:\n" + +#~ msgid "The required runtime %s was not found in a configured remote.\n" +#~ msgstr "" +#~ "Требуемая среда исполнения %s не найдена в настроенных удалённых " +#~ "репозиториях.\n" + +#, fuzzy +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s уже установлено" + +#~ msgid "One or more operations failed" +#~ msgstr "Одна или более операций закончилась с ошибкой" #, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Показать установленное только для пользователя" +#~ msgid "No ref information available in repository" +#~ msgstr "ФАЙЛ - Получить информацию об экспортированном файле" + +#~ msgid "Remote title not set" +#~ msgstr "Заголовок удаленного репозитория не установлен" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Ветка по умолчанию в удалённом репозитории не установлена" #, fuzzy #~ msgid "Search only system-wide installations" @@ -2938,9 +4044,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Ошибка удаления временного файла" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Ошибка записи во временный файла" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Установка: %s\n" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/sk.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/sk.gmo differ diff -Nru flatpak-0.11.3/po/sk.po flatpak-1.0.7/po/sk.po --- flatpak-0.11.3/po/sk.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/sk.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-01-23 18:19+0100\n" "Last-Translator: Dušan Kazik \n" "Language-Team: Slovak \n" @@ -18,217 +18,6 @@ "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" "X-Generator: Poedit 1.8.11\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Nevykoná nič, ak poskytnutý vzdialený repozitár už existuje" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Povolí overovanie pomocou GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Nastaví novú url" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Povolí vzdialený repozitár" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Aktualizuje metaúdaje navyše zo súboru zhrnutia" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Zakáže overovanie pomocou GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" -"Nastaví prioritu (predvolená hodnota je 1, vyššia hodnota znamená väčšiu " -"prioritu)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITA" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "NÁZOV" - -#: app/flatpak-builtins-add-remote.c:78 -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 -msgid "BRANCH" -msgstr "VETVA" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Zakáže vzdialený repozitár" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "" - -#: 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: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: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: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: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: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: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:348 -msgid "GPG verification is required if collections are enabled" -msgstr "" - -#. Do nothing -#: 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:371 -msgid "No url specified in flatpakrepo file" -msgstr "" - -#: 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:464 -msgid "NAME - Modify a remote repository" -msgstr "NÁZOV - Upraví vzdialený repozitár" - -#: 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:485 -#, c-format -msgid "Updating extra metadata from remote summary for %s\n" -msgstr "" - -#: 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: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:56 msgid "Export runtime instead of app" msgstr "Exportuje prostredie namiesto aplikácie" @@ -238,12 +27,13 @@ msgstr "" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARCHITEKTÚRA" @@ -251,6 +41,14 @@ msgid "Url for repo" msgstr "Url pre repozitár" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "" @@ -259,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "SÚBOR" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "" @@ -268,26 +74,29 @@ msgstr "" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "" @@ -295,36 +104,57 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "ZAČLENENIE" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" msgstr "" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Príliš veľa parametrov" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "„%s“ nie je platným repozitárom" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, 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:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "„%s“ nie je platným názvom vetvy: %s" @@ -350,7 +180,7 @@ msgstr "Spustí zostavenie v tomto adresári" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "ADRESÁR" @@ -358,11 +188,11 @@ msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Použije alternatívny súbor pre metaúdaje" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "" @@ -370,395 +200,448 @@ msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "ADRESÁR [PRÍKAZ [parametre...]] - Zostavenie v adresári" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "ADRESÁR musí byť určený" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" -#: app/flatpak-builtins-build.c:179 +#: app/flatpak-builtins-build.c:259 #, fuzzy msgid "metadata invalid, not application or runtime" msgstr "Podpíše aplikáciu alebo prostredie" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Nie je možné spustiť aplikáciu" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "ZDROJ-REPOZITÁR" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Predmet na jeden riadok" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "PREDMET" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Úplný popis" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TELO" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:239 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 msgid "Either --src-repo or --src-ref must be specified." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "" -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Súbory na vylúčenie" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "VZOR" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Vylúčené súbory na zahrnutie" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" msgstr "" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, 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-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 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 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "PRÍKAZ" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Nespracuje exporty" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Informácie o údajoch navyše" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +#, fuzzy +msgid "NAME" +msgstr "NÁZOV_SÚBORU" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 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-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "PROSTREDIE" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +msgid "Don't inherit permissions from runtime" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, non-allowed export filename\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, fuzzy, c-format msgid "Exporting %s\n" msgstr "Aktualizovanie zhrnutia\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " "GROUP=KEY[=VALUE]]" msgstr "" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " "NAME=VAR[=VALUE]" msgstr "" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 #, fuzzy msgid "DIRECTORY - Finalize a build directory" msgstr "ADRESÁR [PRÍKAZ [parametre...]] - Zostavenie v adresári" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Adresár zostavenia %s nie je inicializovaný" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Adresár zostavenia %s je už uzavretý" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "" @@ -774,136 +657,145 @@ msgid "Import oci image instead of flatpak bundle" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, fuzzy, c-format msgid "Ref '%s' not found in registry" msgstr "„%s“ nie je platným repozitárom" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, fuzzy, c-format msgid "Importing %s (%s)\n" msgstr "Aktualizovanie: %s z %s\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 msgid "LOCATION and FILENAME must be specified" msgstr "" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Architektúra , ktorá sa má použiť" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APLIKÁCIA" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERZIA" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Zahrnie toto základné rozšírenie" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "ROZŠÍRENIE" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "ROZŠÍRENIE" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Pridá značku" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ZNAČKA" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Požadované rozšírenie %s je nainštalované iba čiastočne" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "PROSTREDIE musí byť určené" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "„%s“ nie je platným názvom aplikácie: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Adresár zostavenia %s je už inicializovaný" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Architektúra, pre ktorú sa má inštalovať" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "" @@ -912,10 +804,118 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "Podpíše aplikáciu alebo rozhranie" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "UMIESTNENIE musí byť určené" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "NÁZOV" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "VETVA" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "HĹBKA" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Generovanie delta súboru: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Generovanie delta súboru: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, fuzzy, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Zlyhalo generovanie delta súboru %s (%.10s): %s\n" + +#: app/flatpak-builtins-build-update-repo.c:204 +#, fuzzy, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Zlyhalo generovanie delta súboru %s (%.10s-%.10s): %s\n" + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Aktualizovanie zhrnutia\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Objektov celkom: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Odstránených %u objektov, %s uvoľnených\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -932,35 +932,107 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, 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 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 #, fuzzy msgid "You must specify key" msgstr "NÁZOV musí byť určený" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Architektúra. ktorá sa má zobraziť" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "CIEĽ=ZDROJ" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "ADRESÁR musí byť určený" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1109,210 +1181,187 @@ msgid "Can't switch uid" msgstr "" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Zobrazí začlenenie" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Zobrazí pôvod" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 #, fuzzy msgid "Show size" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, 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-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "CESTA" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 #, fuzzy msgid "Show extensions" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NÁZOV musí byť určený" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 #, fuzzy msgid "Branch:" msgstr "Vetva, ktorá sa má použiť" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "Spustí aplikáciu" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 #, fuzzy msgid "Installed size:" msgstr "Nainštalovanie podpísaného prostredia" -#: 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:242 -msgid "Installed subdirectories:" -msgstr "" - -#: app/flatpak-builtins-info.c:363 -#, fuzzy -msgid "Extension:" -msgstr "Zobrazí voľby pomocníka" - -#: app/flatpak-builtins-info.c:374 -msgid "Subpaths:" -msgstr "" - -#: 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 "" - -#: app/flatpak-builtins-info-remote.c:52 -msgid "Display log" +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" 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" +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" 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 +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 #, fuzzy -msgid "Download size:" -msgstr "Zobrazí referenciu" - -#: app/flatpak-builtins-info-remote.c:223 -msgid "History:\n" -msgstr "" +msgid "Runtime:" +msgstr "Prostredie. ktoré sa má použiť" -#: app/flatpak-builtins-info-remote.c:244 -msgid " Subject:" +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" msgstr "" -#: app/flatpak-builtins-info-remote.c:245 -msgid " Date:" +#: app/flatpak-builtins-info.c:260 +msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info-remote.c:246 +#: app/flatpak-builtins-info.c:411 #, fuzzy -msgid " Commit:" -msgstr "Zobrazí začlenenie" +msgid "Extension:" +msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-builtins-info-remote.c:292 -#, c-format -msgid "Warning: Commit %s has no flatpak metadata\n" +#: app/flatpak-builtins-info.c:422 +msgid "Subpaths:" msgstr "" #: app/flatpak-builtins-install.c:58 @@ -1351,7 +1400,8 @@ msgid "Only install this subpath" msgstr "" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "" @@ -1360,52 +1410,29 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Táto aplikácia závisí na prostredí z:\n" -" %s\n" -"Konfigurovať ju ako nový vzdialený repozitár „%s“" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Názov súboru balíka musí byť určený" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Vzdialené balíky nie sú podporované" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 #, fuzzy msgid "Filename or uri must be specified" msgstr "Musí byť určený NÁZOV vzdialeného repozitára" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Inštalovanie: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 #, fuzzy msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "Podpíše aplikáciu alebo rozhranie" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +#, fuzzy +msgid "REMOTE and REF must be specified" +msgstr "ADRESÁR musí byť určený" + #: app/flatpak-builtins-list.c:43 #, fuzzy msgid "Show extra information" @@ -1423,379 +1450,763 @@ msgid "Arch to show" msgstr "Architektúra. ktorá sa má zobraziť" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 #, fuzzy msgid "Installed size" msgstr "Nainštalovanie podpísaného prostredia" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr "" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" msgstr "" -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" +#: app/flatpak-builtins-make-current.c:58 +msgid "APP BRANCH - Make branch of application current" msgstr "" -#: app/flatpak-builtins-list-remotes.c:53 -msgid " - List remote repositories" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" msgstr "" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "VETVA musí byť určená" + +#: app/flatpak-builtins-make-current.c:97 +#, c-format +msgid "App %s branch %s is not installed" msgstr "" -#: app/flatpak-builtins-list-remotes.c:69 -msgid "Title" +#: app/flatpak-builtins-override.c:42 +msgid "Remove existing overrides" msgstr "" -#: app/flatpak-builtins-list-remotes.c:71 -msgid "Priority" +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" msgstr "" -#: app/flatpak-builtins-ls-remote.c:45 -msgid "Show arches and branches" +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" msgstr "" -#: app/flatpak-builtins-ls-remote.c:46 -msgid "Show only runtimes" +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" msgstr "" -#: app/flatpak-builtins-ls-remote.c:47 -msgid "Show only apps" +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" msgstr "" -#: app/flatpak-builtins-ls-remote.c:48 -msgid "Show only those where updates are available" +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" msgstr "" -#: app/flatpak-builtins-ls-remote.c:49 -msgid "Limit to this arch (* for all)" +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" msgstr "" -#: app/flatpak-builtins-ls-remote.c:96 -msgid " [REMOTE] - Show available runtimes and applications" +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +msgid "TABLE ID - Remove item from permission store" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Príliš veľa parametrov" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" msgstr "" -#: app/flatpak-builtins-ls-remote.c:177 +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Príliš veľa parametrov" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +msgid "Show available columns" +msgstr "" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Vypíše informácie o verzii a skončí" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Spustí aplikáciu" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Spustí aplikáciu" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Architektúra , ktorá sa má použiť" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +#, fuzzy +msgid "Branch" +msgstr "Vetva, ktorá sa má použiť" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 msgid "Commit" msgstr "" -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-ps.c:56 #, fuzzy -msgid "Download size" +msgid "Show the application commit" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Prostredie. ktoré sa má použiť" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-ls-remote.c:304 +#: app/flatpak-builtins-ps.c:58 #, fuzzy -msgid "No ref information available in repository" -msgstr "Vypíše informácie o verzii a skončí" +msgid "Runtime Branch" +msgstr "Prostredie. ktoré sa má použiť" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Prostredie. ktoré sa má použiť" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-ps.c:60 +msgid "PID" msgstr "" -#: app/flatpak-builtins-make-current.c:58 -msgid "APP BRANCH - Make branch of application current" +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" msgstr "" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 -msgid "APP must be specified" +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" msgstr "" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "VETVA musí byť určená" +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-ps.c:89 #, c-format -msgid "App %s branch %s is not installed" +msgid "Ambiguous column: %s" msgstr "" -#: app/flatpak-builtins-override.c:54 -msgid "[APP] - Override settings [for application]" +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Neznámy príkaz „%s“" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" msgstr "" -#: app/flatpak-builtins-repo.c:48 -#, c-format -msgid "Title: %s\n" +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Nainštalovanie balíka" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" msgstr "" -#: app/flatpak-builtins-repo.c:51 -#, c-format -msgid "Collection ID: %s\n" +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Informácie o údajoch navyše" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Nevykoná nič, ak poskytnutý vzdialený repozitár už existuje" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" msgstr "" -#: app/flatpak-builtins-repo.c:54 -#, c-format -msgid "Default branch: %s\n" +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Zakáže overovanie pomocou GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" msgstr "" -#: app/flatpak-builtins-repo.c:57 +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "" +"Nastaví prioritu (predvolená hodnota je 1, vyššia hodnota znamená väčšiu " +"prioritu)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITA" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importuje kľúč GPG zo SÚBORU (- pre štandardný vstup)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Zakáže vzdialený repozitár" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 #, c-format -msgid "Redirect URL: %s\n" +msgid "Can't load uri %s: %s\n" msgstr "" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-remote-add.c:206 #, c-format -msgid "Redirect collection ID: %s\n" +msgid "Can't load file %s: %s\n" msgstr "" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-remote-add.c:214 +#, fuzzy +msgid "Invalid file format" +msgstr "Neplatný identifikátor pid %s" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 #, c-format -msgid "GPG key hash: %s\n" +msgid "Invalid version %s, only 1 supported" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Neplatný identifikátor pid %s" + +#: app/flatpak-builtins-remote-add.c:292 +#, fuzzy +msgid "NAME LOCATION - Add a remote repository" +msgstr "NÁZOV [UMIESTNENIE] - Pridanie vzdialeného repozitára" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" msgstr "" -#: app/flatpak-builtins-repo.c:77 +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 #, c-format -msgid "%zd branches\n" +msgid "Remote %s already exists" +msgstr "Vzdialený repozitár %s už existuje" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" msgstr "" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Odstráni vzdialený repozitár, aj keď sa používa" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 #, fuzzy -msgid "Installed" -msgstr "Nainštalovanie balíka" +msgid "Show parent" +msgstr "Zobrazí referenciu" -#: app/flatpak-builtins-repo.c:100 -msgid "Download" +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" msgstr "" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-remote-info.c:213 #, fuzzy -msgid "Print general information about the repository" -msgstr "Vypíše informácie o verzii a skončí" +msgid "Download size:" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 #, fuzzy -msgid "List the branches in the repository" -msgstr "Aktualizuje súbor zhrnutia v repozitári" +msgid " Commit:" +msgstr "Zobrazí začlenenie" -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" msgstr "" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" msgstr "" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" msgstr "" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" msgstr "" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" +#: app/flatpak-builtins-remote-list.c:69 +msgid "Title" msgstr "" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" +#: app/flatpak-builtins-remote-list.c:72 +msgid "Priority" msgstr "" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" +#: app/flatpak-builtins-remote-ls.c:45 +msgid "Show arches and branches" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:46 +msgid "Show only runtimes" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:47 +msgid "Show only apps" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:48 +msgid "Show only those where updates are available" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:49 +msgid "Limit to this arch (* for all)" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr "" + +#: app/flatpak-builtins-remote-ls.c:201 +#, fuzzy +msgid "Download size" +msgstr "Zobrazí referenciu" + +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Povolí overovanie pomocou GPG" + +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "" + +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "" + +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Nastaví novú url" + +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Povolí vzdialený repozitár" + +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Aktualizuje metaúdaje navyše zo súboru zhrnutia" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NÁZOV - Upraví vzdialený repozitár" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Musí byť určený NÁZOV vzdialeného repozitára" + +#: app/flatpak-builtins-remote-modify.c:211 +#, c-format +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "" + +#: app/flatpak-builtins-remote-modify.c:214 +#, 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-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "" + +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Objektov celkom: %u\n" + +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Inštalovanie: %s\n" + +#: app/flatpak-builtins-repair.c:288 +msgid "- Repair a flatpak installation" +msgstr "" + +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Neplatný identifikátor pid %s" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "HĹBKA" +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:54 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Generovanie delta súboru: %s (%.10s)\n" +msgid "Default branch: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Generovanie delta súboru: %s (%.10s-%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:65 #, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Zlyhalo generovanie delta súboru %s (%.10s): %s\n" +msgid "Deploy collection ID: %s\n" +msgstr "Spustí aplikáciu" -#: app/flatpak-builtins-repo-update.c:206 -#, fuzzy, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Zlyhalo generovanie delta súboru %s (%.10s-%.10s): %s\n" +#: app/flatpak-builtins-repo.c:73 +#, c-format +msgid "GPG key hash: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" +#: app/flatpak-builtins-repo.c:82 +#, c-format +msgid "%zd branches\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" +#: app/flatpak-builtins-repo.c:106 +#, fuzzy +msgid "Installed" +msgstr "Nainštalovanie balíka" + +#: app/flatpak-builtins-repo.c:107 +msgid "Download" msgstr "" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Aktualizovanie zhrnutia\n" +#: app/flatpak-builtins-repo.c:175 +#, fuzzy +msgid "Print general information about the repository" +msgstr "Vypíše informácie o verzii a skončí" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Objektov celkom: %u\n" +#: app/flatpak-builtins-repo.c:176 +#, fuzzy +msgid "List the branches in the repository" +msgstr "Aktualizuje súbor zhrnutia v repozitári" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" msgstr "" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Odstránených %u objektov, %s uvoľnených\n" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Príkaz, ktorý sa má spustiť" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Vetva, ktorá sa má použiť" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Použije vývojové prostredie" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Prostredie. ktoré sa má použiť" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Verzia prostredia, ktoré sa má použiť" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Nespracuje exporty" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Aktualizovanie podpísaného prostredia" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Architektúra, pre ktorú sa má inštalovať" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-search.c:263 #, fuzzy msgid "TEXT must be specified" msgstr "NÁZOV musí byť určený" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 #, fuzzy msgid "Application ID" msgstr "Spustí aplikáciu" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 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 +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "Žiadny vzdialený repozitár %s" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 #, fuzzy msgid "Description" msgstr "Úplný popis" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "Nič nevyhovuje názvu %s" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Odinštalovanie prostredia" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Odinštalovanie prostredia" + +#: app/flatpak-builtins-uninstall.c:155 #, fuzzy msgid "REF... - Uninstall an application" msgstr "Inštalácia podpísanej aplikácie" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +msgid "Must specify at least one REF, --unused or --all" msgstr "" -#: app/flatpak-builtins-uninstall.c:134 app/flatpak-transaction.c:355 -#, c-format -msgid "Warning: Problem looking for related refs: %s\n" +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Inštalovanie: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1830,47 +2241,278 @@ msgid "[REF...] - Update applications or runtimes" msgstr "Podpíše aplikáciu alebo rozhranie" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" msgstr "Žiadne aktualizácie.\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 msgid "Which do you want to use (0 to abort)?" msgstr "" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 +#, fuzzy, c-format +msgid "Updating appstream data for user remote %s" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for remote %s" 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 +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" +msgstr "Aktualizovanie zhrnutia\n" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "" +"Požadované prostredie pre %s (%s) nie je nainštalované. Vyhľadáva sa...\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Nájdené vo vzdialenom repozitári %s. Chcete vykonať inštaláciu?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Požadované prostredie pre %s (%s) nie je nainštalované. Vyhľadáva sa...\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "" + +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Táto aplikácia závisí na prostredí z:\n" +" %s\n" +"Konfigurovať ju ako nový vzdialený repozitár „%s“" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "" + +#: app/flatpak-cli-transaction.c:141 +#, fuzzy +msgid "update" +msgstr "Žiadne aktualizácie.\n" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "Odinštalovanie prostredia" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Aktualizovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Aktualizovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Inštalovanie: %s z balíka %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Inštalovanie: %s z balíka %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Inštalovanie: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Žiadne aktualizácie.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Teraz na začlenení %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Zlyhalo čítanie začlenenia %s: " + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +"Správa prístupu k súborom" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +"Správa prístupu k súborom" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +msgid "system dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Inštalovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Inštalovanie: %s\n" + +#: app/flatpak-cli-transaction.c:623 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating in %s:\n" +msgstr "Aktualizovanie: %s z %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" msgstr "" -"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" -"\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-cli-transaction.c:728 #, fuzzy, c-format -msgid "Error updating: %s\n" +msgid "Skipping: %s\n" msgstr "Aktualizovanie zhrnutia\n" -#: app/flatpak-builtins-utils.c:526 -#, c-format -msgid "Remote \"%s\" not found" +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" msgstr "" #. translators: please keep the leading space @@ -1891,33 +2533,41 @@ msgid "Uninstall an installed application or runtime" msgstr "" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 #, fuzzy msgid "Configure flatpak" msgstr "Konfigurácia vzdialeného repozitára" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +msgid "Repair flatpak installation" +msgstr "" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 #, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Podpíše aplikáciu alebo prostredie" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1925,24 +2575,31 @@ "\n" "Spúšťanie aplikácií" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Spustí aplikáciu" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +"Spúšťanie aplikácií" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1950,24 +2607,51 @@ "\n" "Správa prístupu k súborom" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 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:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Zobrazí voľby pomocníka" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Zobrazí voľby pomocníka" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1975,33 +2659,33 @@ "\n" "Správa vzdialených repozitárov" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Zoznam všetkých konfigurovaných vzdialených repozitárov" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 #, 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2009,772 +2693,1143 @@ "\n" "Zostavenie aplikácií" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exportuje adresár zostavenia do repozitára" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, 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:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importuje súbor balíka" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Podpíše aplikáciu alebo prostredie" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Aktualizuje súbor zhrnutia v repozitári" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 #, fuzzy msgid "Print information about a repo" msgstr "Vypíše informácie o verzii a skončí" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 #, 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:127 +#: app/flatpak-main.c:139 #, 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Zobrazí voľby pomocníka" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Vypíše informácie o verzii a skončí" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Vypíše predvolenú architektúru a skončí" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Vypíše podporované architektúry a skončí" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 #, fuzzy msgid "Print active gl drivers and exit" msgstr "Vypíše podporované architektúry a skončí" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" msgstr "" -#: app/flatpak-main.c:143 -#, fuzzy -msgid "NAME" -msgstr "NÁZOV_SÚBORU" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Vstavané príkazy:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Neznámy príkaz „%s“" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Nebol určený žiadny príkaz" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "chyba:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Nájdené v niekoľkých vzdialených repozitároch:\n" - -#: app/flatpak-transaction.c:327 -msgid "Which do you want to install (0 to abort)?" -msgstr "" - -#: 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:423 -#, c-format -msgid "The required runtime %s was not found in a configured remote.\n" -msgstr "" - -#: 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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "" - -#: 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: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: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: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:765 -#, fuzzy -msgid "update" -msgstr "Žiadne aktualizácie.\n" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Teraz na začlenení %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Žiadne aktualizácie.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "" - -#: app/flatpak-transaction.c:841 -#, c-format -msgid "Error: Failed to %s %s: %s\n" -msgstr "" - -#: app/flatpak-transaction.c:846 -#, fuzzy -msgid "One or more operations failed" -msgstr "Jedna alebo viacero aktualizácií zlyhali" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "" -#: common/flatpak-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" -msgstr "" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" +msgstr "Neplatný identifikátor pid %s" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" "*[/...], ~/dir, /dir" msgstr "" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Zdieľa s hostiteľom" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "ZARIADENIE" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Umožní funkciu" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FUNKCIA" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Neumožní funkciu" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "SYSTÉM_SÚBOROV" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "NÁZOV_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "NÁZOV_SÚBORU" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "" + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Zlyhalo čítanie začlenenia %s: " + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "" + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "" + +#: common/flatpak-dir.c:1142 +msgid "Unable to connect to system bus" +msgstr "" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "Aplikácia %s %s nie je nainštalovaná" + +#: common/flatpak-dir.c:2321 #, 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 +#: common/flatpak-dir.c:2581 +msgid "No appstream commit to deploy" +msgstr "" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" -#: common/flatpak-dir.c:2761 -#, c-format -msgid "Invalid sha256 for extra data uri %s" +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" msgstr "" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Nesprávna veľkosť pre údaje navyše %s" + +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, fuzzy, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Zlyhalo čítanie začlenenia %s: " -#: common/flatpak-dir.c:2790 +#: common/flatpak-dir.c:3988 #, 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 +#: common/flatpak-dir.c:4003 #, fuzzy, c-format msgid "While downloading %s: " msgstr "Počas otvárania repozitára %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Nesprávna veľkosť pre údaje navyše %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 #, fuzzy msgid "Remote OCI index has no registry uri" msgstr "NÁZOV [UMIESTNENIE] - Pridanie vzdialeného repozitára" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, 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 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "" -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Nič nevyhovuje názvu %s" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" + +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Nedostatok pamäte" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Zlyhalo čítanie z exportovaného súboru" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "" -#: common/flatpak-dir.c:5089 -msgid "While getting detached metadata: " +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 +msgid "While getting detached metadata: " +msgstr "" + +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +msgid "Extra data missing in detached metadata" msgstr "" -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6308 msgid "While creating extradir: " msgstr "" -#: common/flatpak-dir.c:5128 -msgid "Invalid sha256 for extra data" +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" msgstr "" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 msgid "Wrong size for extra data" msgstr "" -#: common/flatpak-dir.c:5161 -msgid "Invalid checksum for extra data" +#: common/flatpak-dir.c:6371 +#, c-format +msgid "While writing extra data file '%s': " msgstr "" -#: common/flatpak-dir.c:5170 +#: common/flatpak-dir.c:6378 #, c-format -msgid "While writing extra data file '%s': " +msgid "Extra data %s missing in detached metadata" msgstr "" -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6557 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "" -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "Aplikácia %s vetva %s je už nainštalovaná" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Zlyhalo čítanie začlenenia %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, c-format msgid "While trying to checkout %s into %s: " msgstr "" -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "" -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "" + +#: common/flatpak-dir.c:6775 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 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Počas pokusu o aplikáciu údajov navyše: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, fuzzy, c-format msgid "Invalid deployed ref %s: " msgstr "Neplatný identifikátor pid %s" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, fuzzy, c-format msgid "Invalid commit ref %s: " msgstr "Neplatný identifikátor pid %s" -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, c-format msgid "Deployed ref %s kind does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5615 +#: common/flatpak-dir.c:6836 #, c-format msgid "Deployed ref %s name does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5623 +#: common/flatpak-dir.c:6844 #, c-format msgid "Deployed ref %s arch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5629 +#: common/flatpak-dir.c:6850 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5635 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, 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 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "Aplikácia %s vetva %s nie je nainštalovaná" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "Aplikácia %s vetva %s nie je nainštalovaná" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Nič nevyhovuje názvu %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, c-format msgid "Error searching remote %s: %s" msgstr "" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, c-format msgid "Error searching local repository: %s" msgstr "" -#: common/flatpak-dir.c:8471 -#, c-format -msgid "%s %s not installed" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "Aplikácia %s %s nie je nainštalovaná" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Nepodarilo sa nájsť inštaláciu %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Neplatný identifikátor pid %s" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Prostredie %s, vetva %s je už nainštalovaná" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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" +#: common/flatpak-dir.c:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" 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:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Nedá sa nájsť %s vo vzdialenom repozitári %s" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" +#: common/flatpak-dir.c:11255 +#, c-format +msgid "No configuration for remote %s specified" msgstr "" -#: common/flatpak-dir.c:10342 -#, c-format -msgid "No entry for %s in remote summary flatpak cache " +#: common/flatpak-dir.c:11496 +msgid "No metadata branch for OCI" msgstr "" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:751 #, fuzzy, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Zlyhalo otvorenie dočasného súboru flatpak-info" +msgid "Ref %s not installed" +msgstr "Aplikácia %s %s nie je nainštalovaná" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-installation.c:793 #, fuzzy, c-format -msgid "Failed to open temp file: %s" -msgstr "Zlyhalo otvorenie súboru temp" +msgid "App %s not installed" +msgstr "Aplikácia %s %s nie je nainštalovaná" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Požadované rozšírenie %s je nainštalované iba čiastočne" + +#: common/flatpak-oci-registry.c:1679 +#, c-format +msgid "No gpg key found with ID %s (homedir: %s)" msgstr "" -#: common/flatpak-run.c:1910 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open app info file: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" + +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Inštalovanie: %s\n" + +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Žiadny vzdialený repozitár %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Nebol určený žiadny príkaz" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "Zlyhalo otvorenie súboru s informáciami o aplikácii: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Zlyhalo otvorenie súboru temp" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +msgid "Unable to allocate instance id" +msgstr "" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Zlyhalo otvorenie dočasného súboru flatpak-info" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Zlyhalo otvorenie dočasného súboru flatpak-info" + +#: common/flatpak-run.c:2187 +msgid "Initialize seccomp failed" +msgstr "" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Zlyhal zápis dočasného súboru" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Zlyhalo čítanie začlenenia %s: " + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Zlyhalo čítanie z exportovaného súboru" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +msgid "Can't open generated ld.so.cache" +msgstr "" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Príliš veľa parametrov" + +#: common/flatpak-transaction.c:1347 +#, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Na inštaláciu softvéru sa vyžaduje overenie totožnosti" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Na inštaláciu softvéru sa vyžaduje overenie totožnosti" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Nepodarilo sa aktualizovať metaúdaje navyše pre %s" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, fuzzy, c-format msgid "Migrating %s to %s\n" msgstr "Aktualizovanie: %s z %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Príliš veľa parametrov" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Podpíše aplikáciu alebo prostredie" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "„%s“ nie je platným názvom vetvy: %s" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Žiadne zdroje údajov navyše" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Aktualizovanie zhrnutia\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Aktualizovanie zhrnutia\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "" +"Chyba počas aktualizácie metaúdajov navyše pre „%s“: %s\n" +"\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Neplatný identifikátor pid %s" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" msgstr "Zobrazí referenciu" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" msgstr "Zobrazí referenciu" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, fuzzy, c-format msgid "Downloading files: %d/%d %s" msgstr "Zobrazí referenciu" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2899,15 +3954,35 @@ msgid "Update appstream" msgstr "" -#~ msgid "No remote %s" -#~ msgstr "Žiadny vzdialený repozitár %s" +#~ msgid "Installing: %s\n" +#~ msgstr "Inštalovanie: %s\n" + +#, fuzzy +#~ msgid "Found in remote %s\n" +#~ msgstr "Nájdené v niekoľkých vzdialených repozitároch:\n" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Nájdené v niekoľkých vzdialených repozitároch:\n" + +#, fuzzy +#~ msgid "%s already installed, skipping\n" +#~ msgstr "Aplikácia %s vetva %s je už nainštalovaná" + +#, fuzzy +#~ msgid "One or more operations failed" +#~ msgstr "Jedna alebo viacero aktualizácií zlyhali" + +#, fuzzy +#~ msgid "No ref information available in repository" +#~ msgstr "Vypíše informácie o verzii a skončí" + +#, fuzzy +#~ msgid "Remote default-branch not set" +#~ msgstr "Vypíše predvolenú architektúru a skončí" #~ 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 "Installing %s" #~ msgstr "Inštalovanie: %s\n" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/sv.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/sv.gmo differ diff -Nru flatpak-0.11.3/po/sv.po flatpak-1.0.7/po/sv.po --- flatpak-0.11.3/po/sv.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/sv.po 2019-02-11 12:42:42.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-12-01 03:20+0100\n" "Last-Translator: Josef Andersson \n" "Language-Team: Swedish \n" @@ -18,210 +18,6 @@ "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 2.0.4\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Gör ingenting om angivet fjärrförråd existerar" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "PLATS specificerar en konfigurationsfil, inte förrådsplatsen" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Aktivera GPG-verifiering" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Markera fjärrförrådet som uppräkningsbart" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Markera fjärrförrådet med att det används för beroenden" - -#: app/flatpak-builtins-add-remote.c:66 -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: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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Aktivera fjärrförrådet" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Uppdatera extra metadata från sammanfattningsfilen" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Inaktivera GPG-verifiering" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Markera fjärrförrådet som icke uppräkningsbart" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Markera fjärrförrådet med att det inte används för beroenden" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Ställ in prioritet (standard är 1, högre är mer prioriterade)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "PRIORITET" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Ett enkelt namn att använda för detta fjärrförråd" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "TITEL" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Standardgren att använda för detta fjärrförråd" - -#: 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 -msgid "BRANCH" -msgstr "GREN" - -#: 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 "Samlings-ID" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "SAMLINGS-ID" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Inaktivera fjärrförrådet" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Lägg till OCI-register" - -#: 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: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: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: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: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: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: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: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:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Fjärrförrådet %s existerar redan" - -#: 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: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:464 -msgid "NAME - Modify a remote repository" -msgstr "NAMN - Modifiera ett fjärrförråd" - -#: 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: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: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: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:56 msgid "Export runtime instead of app" msgstr "Exportera exekveringsmiljö istället för program" @@ -231,12 +27,13 @@ msgstr "Arkitektur att skapa bunt för" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "ARK" @@ -244,6 +41,14 @@ msgid "Url for repo" msgstr "URL till arkiv" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Url för flatpakrepo-fil i exekveringsmiljö" @@ -252,6 +57,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "FIL" + #: 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" @@ -261,26 +74,29 @@ msgstr "GPG-nyckel-ID att signera OCI-avbilden med" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "NYCKEL-ID" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 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:63 -#: app/flatpak-builtins-build-commit-from.c:56 -#: app/flatpak-builtins-build-export.c:64 +#: app/flatpak-builtins-build-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "HEMKAT" @@ -288,37 +104,58 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "INCHECKNING" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 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:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "PLATS, FILNAMN och NAMN måste anges" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "För många argument" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "”%s” är inte ett giltigt arkiv" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "”%s” är inte ett giltigt namn: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "”%s” är inte ett giltigt grennamn: %s" @@ -345,7 +182,7 @@ msgstr "Starta bygge i denna katalog" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "KAT" @@ -353,11 +190,11 @@ 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:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Använd alternativ fil för metadata" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Döda processen när den överordnade processen dör" @@ -365,368 +202,423 @@ msgid "Export application homedir directory to build" msgstr "Exportera programmets hemkatalog till bygge" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "Logga sessionsbussanrop" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Logga systembussanrop" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "KATALOG [KOMMANDO [argument…]] - Bygg i katalog" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "KATALOG måste anges" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "metadata ogiltigt, inte program eller exekveringsmiljö" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, 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:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Saknar ”=” i bindningsmonteringsargument ”%s”" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Kunde inte starta program" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Katalog för källarkiv" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "KÄLL-REPO" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Ref i källarkiv" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "KÄLL-REF" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Enradsämne" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "ÄMNE" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Fullständig beskrivning" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "TEXT" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Uppdatera appstream-grenen" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Uppdatera inte sammanfattningen" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "GPG-nyckel-ID att signera incheckning med" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#, fuzzy +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Åsidosätt tidsstämpel för incheckningen" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +#, fuzzy +msgid "TIMESTAMP" +msgstr "ISO-8601-TIDSSTÄMPEL" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "DST-ARKIV måste anges" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: ingen förändring\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Arkitektur att exportera till (måste vara värdkompatibel)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Checka in exekveringsmiljö (/usr), inte /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Använd alternativ katalog för filerna" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "UNDERKAT" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Filer att exkludera" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "MÖNSTER" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Exkluderade filer att inkludera" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Åsidosätt tidsstämpel för incheckningen" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ISO-8601-TIDSSTÄMPEL" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "Samlings-ID" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, 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 +#: app/flatpak-builtins-build-export.c:353 #, 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 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, 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 +#: app/flatpak-builtins-build-export.c:389 #, 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 +#: app/flatpak-builtins-build-export.c:417 #, 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 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Ogiltig urityp %s, endast http/https stöds" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Kunde inte hitta basnamn i %s, ange ett namn explicit" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Inga snedstreck tillåtna i namn för extra data" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Ogiltigt format för sha256-kontrollsumman: ”%s”" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Extra datastorlekar med noll i storlek stöds ej" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "PLATS KATALOG [GREN] - Skapa ett arkiv från en byggkatalog" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "PLATS och KATALOG måste anges" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "”%s” är inte ett giltigt samlings-ID: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Inget namn angivet i metadata" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Incheckning: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Total metadata: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Skriven metadata: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Totalt innehåll: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Skrivet innehåll: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Skrivna innehållsbyte:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 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:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "KOMMANDO" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Flatpak-version att kräva" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "MAJOR.MINOR.MICRO" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Behandla inte exporter" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Extra datainfo" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Lägg till info om utökningspunkt" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "NAMN=VARIABEL[=VÄRDE]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Lägg till info om utökningspunkt" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "NAMN" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Ställ in prioritet för tillägg (endast för tillägg)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Ändra vilken sdk som används för programmet" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Checka in exekveringsmiljö använd för programmet" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "EXEKVERINGSMILJÖ" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Ange alternativet generell metadata" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 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" +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Återkalla skrivrättigheter för programmet" + +#: app/flatpak-builtins-build-finish.c:155 +#, fuzzy, c-format +msgid "Not exporting %s, wrong extension\n" msgstr "Exporterar inte %s, fel prefix\n" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:163 +#, fuzzy, c-format +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "Exporterar inte %s, fel prefix\n" + +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "Exporterar %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "Fler än en körbar fil funnen\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "Använder %s som ett kommando\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Ingen körbar fil funnen\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "För få element i --extra-data-argumentet %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -734,7 +626,8 @@ msgstr "" "För få element i --metadata-argumentet %s, formatet är GRUPP=NYCKEL[=VÄRDE]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -742,21 +635,21 @@ msgstr "" "För få element i --extension-argumentet %s, formatet är NAMN=VAR[=VÄRDE]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "KATALOG - Slutför en byggkatalog" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Byggkatalog %s är inte initierad" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Byggkatalog %s redan avslutad" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Granska de exporterade filerna och metadatan\n" @@ -772,138 +665,147 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Importera oci-avbild istället för flatpak-bunt" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Ref ”%s” hittades inte i registret" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "Importerar %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "PLATS FILNAMN - Importera en filbunt in i ett lokalt arkiv" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 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:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Ark att använda" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Initiera var. från angiven exekveringsmiljö" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Initiera program från namngivet program" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "APP" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "Ange version för --base" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "VERSION" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Inkludera detta grundtillägg" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "TILLÄGG" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "TILLÄGG" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Initiera /usr med en skrivbar kopia av SDK:n" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "Ange byggtypen (app, runtime, extension)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TYP" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Lägg till en tagg" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "TAGG" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Inkludera detta SDK-tillägg i /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Var SDK:n ska sparas (standardvärdet är ”usr”)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Återinitiera SDK/var" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Begärt tillägg %s är bara delvis installerat" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Begärt tillägg %s är inte installerat" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "KATALOG PROGNAMN SDK EXEKVERINGSMILJÖ [GREN] - Initiera katalog för bygge" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "EXEKVERINGSMILJÖ måste anges" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "”%s” är inte ett giltigt programnamn: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Byggkatalog %s är redan initierad" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Ark att installera för" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Leta efter exekveringsmiljö med angivet namn" @@ -911,10 +813,121 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "PLATS [ID [GREN]] - Signera ett program eller en exekveringsmiljö" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "PLATS måste anges" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Inga GPG-nyckel-ID angivna" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Omdirigera detta arkiv till en ny URL" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Ett enkelt namn att använda för detta förråd" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "TITEL" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Standardgren att använda för detta förråd" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "GREN" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "SAMLINGS-ID" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "Distribuera permanent samlings-ID till fjärrklienters konfigurationer" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Importera ny öppen GPG-standardnyckel från FIL" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "GPG-nyckel-ID att signera sammanfattningen med" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Generera deltafiler" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Ta bort oanvända objekt" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Gå endast DJUP föräldrar upp för varje incheckning (standard: -1=oändligt)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "DJUP" + +# sebras: from-empty? why is there a dash? +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Genererar delta: %s (%.10s)\n" + +# sebras: from-empty? why is there a dash? +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Genererar delta: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Misslyckades med att generera delta %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Misslyckades med att generera delta %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "PLATS - Uppdatera förrådsmetadata" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Uppdaterar appstream-gren\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Uppdaterar sammanfattning\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Totalt antal objekt: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Inga onåbara objekt\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Tog bort %u objekt, %s frigjort\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "Lista konfigurationsnycklar och värden" @@ -931,36 +944,106 @@ msgid "Unset configuration for KEY" msgstr "Ta bort konfiguration för NYCKEL" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, c-format msgid "Unknown configure key '%s'" msgstr "Okänd konfigurationsnyckel ”%s”" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Du måste ange nyckel" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 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 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[NYCKEL [VÄRDE]] - Hantera konfiguration" # TODO: one on -> one of ? -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 #, 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: 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-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "NAMN - Ta bort ett fjärrförråd" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Ark att visa" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "DEST=KÄLLA" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "FJÄRRFÖRRÅD och REF måste anges" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "Varning: Det gick inte att uppdatera extra metadata för ”%s”: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Varning: Det går inte att finna beroenden: %s\n" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "Varning: Det går inte att finna beroenden: %s\n" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Uppdatera appstream för fjärrförrådet %s\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1113,207 +1196,186 @@ msgid "Can't switch uid" msgstr "Det går inte att byta uid" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Visa användarinstallationer" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Visa systeminstallationer" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Visa specifika systemomfattande installationer" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Visa ref" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Visa incheckning" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Visa ursprung" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Visa storlek" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Visa metadata" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Visa endast exekveringsmiljöer" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Visa storlek" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Visa tillägg" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, 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-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "SÖKVÄG" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Visa tillägg" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Visa hjälpalternativ" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "NAMN [GREN] - Hämta information om installerat program och/eller " "exekveringsmiljö" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "NAMN måste anges" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "ref fanns inte i källa" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Ref:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "ID:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Ark:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Gren:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Origin:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "Samlings-ID" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "Datum:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "Ämne:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Aktiv incheckning:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Senaste incheckning:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Incheckning:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "alt-id:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "Överordnad:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Plats:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Installerad storlek:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Exekvering:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Installerade underkataloger:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Tillägg:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Undersökvägar:" -#: app/flatpak-builtins-info-remote.c:49 -msgid "Commit to show info for" -msgstr "Incheckning att visa information för" - -#: 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-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" @@ -1350,7 +1412,8 @@ msgid "Only install this subpath" msgstr "Installera endast denna underkatalog" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Svara automatiskt ja på alla frågor" @@ -1359,53 +1422,26 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Detta program är beroende av exekveringsmiljöer från:\n" -" %s\n" -"Konfigurera det som ett nytt fjärrförråd ”%s”" - -# sebras: how to translate in here? -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Buntfilnamn måste anges" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Fjärrbuntar stöds ej" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" -"Fjärrförråd ”%s” på plats %s innehåller ytterligare program.\n" -"Vill du behålla fjärrförrådet för framtida installationer?" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Filnamn eller uri måste anges" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Installerar: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 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:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "FJÄRRFÖRRÅD och REF måste anges" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Visa extra information" @@ -1422,370 +1458,755 @@ msgid "Arch to show" msgstr "Ark att visa" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Lista alla referenser (inklusive locale/debug)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Ref" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Origin" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Aktiv incheckning" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Senaste incheckning" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Installerad storlek" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Flaggor" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Lista installerade program och/eller exekveringsmiljöer" -#: app/flatpak-builtins-list-remotes.c:40 +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Ark att göra aktuell för" + +#: 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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "PROG måste anges" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "GREN måste anges" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +#, fuzzy +msgid "[APP] - Override settings [for application]" +msgstr "PROG - Åsidosätt inställningar för program" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +#, fuzzy +msgid "Object" +msgstr "Ämne:" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Visa tillägg" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Återkalla skrivrättigheter för programmet" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "För många argument" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Lägg till rättigheter för detta program" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "För många argument" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Lägg till rättigheter för detta program" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Visa inaktiverade fjärrförråd" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Skriv ut information om ett arkiv" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Program-ID" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Program-ID" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Ark att använda" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Gren" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Visa arkitekturer och grenar" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Incheckning" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Visa hjälpalternativ" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Exekvering:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Visa endast exekveringsmiljöer" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Exekvering:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Visa endast exekveringsmiljöer" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Aktiv incheckning" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Visa endast exekveringsmiljöer" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "PROGID" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Okänt kommando ”%s”" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Visa hjälpalternativ" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Installerad" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Extra datainfo" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Gör ingenting om angivet fjärrförråd existerar" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "PLATS specificerar en konfigurationsfil, inte förrådsplatsen" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Inaktivera GPG-verifiering" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Markera fjärrförrådet som icke uppräkningsbart" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Markera fjärrförrådet med att det inte används för beroenden" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Ställ in prioritet (standard är 1, högre är mer prioriterade)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "PRIORITET" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Ett enkelt namn att använda för detta fjärrförråd" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Standardgren att använda för detta fjärrförråd" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Importera GPG-nyckel från FIL (- för standard in)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Inaktivera fjärrförrådet" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, 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-remote-add.c:206 +#, 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-remote-add.c:214 +msgid "Invalid file format" +msgstr "Ogiltigt filformat" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Ogiltig version %s, endast 1 stöds" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Ogiltig gpg-nyckel" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "NAMN PLATS - Lägg till ett fjärrförråd" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "GPG-verifiering krävs om samlingar är aktiverat" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Fjärrförrådet %s existerar redan" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Ingen url angiven i flatpakrepo-fil" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Ta bort fjärrförrådet även om det används" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "NAMN - Ta bort ett fjärrförråd" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Incheckning att visa information för" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Visa logg" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Visa överordnad" + +#: app/flatpak-builtins-remote-info.c:126 +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-remote-info.c:213 +msgid "Download size:" +msgstr "Hämtningsstorlek:" + +#: app/flatpak-builtins-remote-info.c:229 +#, fuzzy +msgid "History:\n" +msgstr "Historik:" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Ämne:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Datum:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Incheckning:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 msgid "Show remote details" msgstr "Visa detaljer för fjärrförrådet" -#: app/flatpak-builtins-list-remotes.c:41 +#: app/flatpak-builtins-remote-list.c:41 msgid "Show disabled remotes" msgstr "Visa inaktiverade fjärrförråd" -#: app/flatpak-builtins-list-remotes.c:53 +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Lista fjärrförråd" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "Namn" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Titel" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Prioritet" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Visa arkitekturer och grenar" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Visa endast exekveringsmiljöer" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Visa endast program" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.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:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Begränsa till denna ark (* för alla)" -#: app/flatpak-builtins-ls-remote.c:96 -msgid " [REMOTE] - Show available runtimes and applications" +#: app/flatpak-builtins-remote-ls.c:101 +#, fuzzy +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr " [FJÄRRFÖRRÅD] - Visa tillgängliga exekveringsmiljöer och program" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Incheckning" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Hämtningsstorlek" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "Ingen ref-information tillgänglig i arkiv" - -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Ark att göra aktuell för" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Aktivera GPG-verifiering" -#: 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-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Markera fjärrförrådet som uppräkningsbart" -#: 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-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Markera fjärrförrådet med att det används för beroenden" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "GREN måste anges" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Ställ in en ny URL" -#: 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-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Aktivera fjärrförrådet" -#: 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-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Uppdatera extra metadata från sammanfattningsfilen" -#: app/flatpak-builtins-repo.c:48 -#, c-format -msgid "Title: %s\n" -msgstr "Titel: %s\n" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "NAMN - Modifiera ett fjärrförråd" -#: app/flatpak-builtins-repo.c:51 -#, c-format -msgid "Collection ID: %s\n" -msgstr "Samlings-ID: %s\n" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Fjärrförråd-NAMN måste anges" -#: app/flatpak-builtins-repo.c:54 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Default branch: %s\n" -msgstr "Standardgren: %s\n" +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-repo.c:57 +#: app/flatpak-builtins-remote-modify.c:214 #, c-format -msgid "Redirect URL: %s\n" -msgstr "Omflyttnings-URL: %s\n" +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Fel vid uppdatering av extra metadata för ”%s”: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-remote-modify.c:215 #, c-format -msgid "Redirect collection ID: %s\n" -msgstr "Dirigera om samlings-ID: %s\n" +msgid "Could not update extra metadata for %s" +msgstr "Det gick inte att uppdatera extra metadata för %s" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "GPG key hash: %s\n" -msgstr "GPG-nyckelhash: %s\n" +msgid "Object missing: %s.%s\n" +msgstr "" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "%zd branches\n" -msgstr "%zd grenar\n" - -#: app/flatpak-builtins-repo.c:99 -msgid "Installed" -msgstr "Installerad" - -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "Hämta" - -#: app/flatpak-builtins-repo.c:151 -msgid "Print general information about the repository" -msgstr "Skriv ut allmän information om arkivet" - -#: app/flatpak-builtins-repo.c:152 -msgid "List the branches in the repository" -msgstr "Lista grenar i arkivet" - -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" -msgstr "Skriv ut metadata för en gren" - -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" -msgstr "PLATS - underhåll av arkiv" +msgid "%s, deleting object\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Omdirigera detta arkiv till en ny URL" +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "Det går inte att läsa in filen %s: %s\n" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Ett enkelt namn att använda för detta förråd" +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Uppdatera appstream för fjärrförrådet %s\n" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Standardgren att använda för detta förråd" +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Avinstallerar: %s\n" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" -msgstr "Distribuera permanent samlings-ID till fjärrklienters konfigurationer" +#: app/flatpak-builtins-repair.c:288 +#, fuzzy +msgid "- Repair a flatpak installation" +msgstr "Sök endast användarinstallationer" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" -msgstr "Importera ny öppen GPG-standardnyckel från FIL" +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Ogiltig distribuerad ref %s: " -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "GPG-nyckel-ID att signera sammanfattningen med" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Generera deltafiler" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" msgstr "Ta bort oanvända objekt" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" -"Gå endast DJUP föräldrar upp för varje incheckning (standard: -1=oändligt)" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "Avinstallerar relaterade: %s\n" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "DJUP" +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" +msgstr "Titel: %s\n" -# sebras: from-empty? why is there a dash? -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:51 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Genererar delta: %s (%.10s)\n" +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" -# sebras: from-empty? why is there a dash? -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Genererar delta: %s (%.10s-%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "Omflyttnings-URL: %s\n" + +#: app/flatpak-builtins-repo.c:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "Samlings-ID: %s\n" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:73 #, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Misslyckades med att generera delta %s (%.10s): " +msgid "GPG key hash: %s\n" +msgstr "GPG-nyckelhash: %s\n" -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-repo.c:82 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Misslyckades med att generera delta %s (%.10s-%.10s): " +msgid "%zd branches\n" +msgstr "%zd grenar\n" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "PLATS - Uppdatera förrådsmetadata" +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" +msgstr "Installerad" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Uppdaterar appstream-gren\n" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "Hämta" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Uppdaterar sammanfattning\n" +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" +msgstr "Skriv ut allmän information om arkivet" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Totalt antal objekt: %u\n" +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" +msgstr "Lista grenar i arkivet" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Inga onåbara objekt\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "Skriv ut metadata för en gren" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Tog bort %u objekt, %s frigjort\n" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "PLATS - underhåll av arkiv" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Kommando att köra" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Gren att använda" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Använd utvecklingsexekveringsmiljö" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Exekveringsmiljö att använda" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Version av exekveringsmiljö att använda" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Logga hjälpmedelsbussanrop" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Logga hjälpmedelsbussanrop" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Använd inte statiska delta" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Aktivera filvidarebefordran" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +#, fuzzy +msgid "Run specified commit" +msgstr "Aktiv incheckning" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "Uppdatera signerad exekveringsmiljö" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "PROG [argument…] - Kör ett program" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Ark att installera för" + +#: app/flatpak-builtins-search.c:254 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 +#: app/flatpak-builtins-search.c:263 msgid "TEXT must be specified" msgstr "TEXT måste anges" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 msgid "Application ID" msgstr "Program-ID" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "Version" -#: app/flatpak-builtins-search.c:308 -msgid "Branch" -msgstr "Gren" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 msgid "Remotes" msgstr "Fjärrförråd" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 msgid "Description" msgstr "Beskrivning" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 msgid "No matches found" msgstr "Inga träffar" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Ark att avinstallera" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Behåll ref i lokalt förråd" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Avinstallera inte relaterade ref:ar" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Ta bort filer även om de kör" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Avinstallera program" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Avinstallera exekveringsmiljö" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REF… - Avinstallera ett program" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "Måste specificera åtminstone en REF" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, c-format -msgid "Uninstalling: %s\n" -msgstr "Avinstallerar: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Ark att avinstallera" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1819,45 +2240,278 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REF…]] - Uppdatera ett program eller exekveringsmiljö" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 msgid "Looking for updates...\n" msgstr "Söker efter uppdateringar...\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, 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 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Uppdatera appstream för fjärrförrådet %s\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Uppdatera appstream för fjärrförrådet %s\n" -#: app/flatpak-builtins-utils.c:493 -#, c-format -msgid "Error updating: %s\n" +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" msgstr "Fel vid uppdatering: %s\n" -#: app/flatpak-builtins-utils.c:526 +#: app/flatpak-builtins-utils.c:553 #, fuzzy, c-format msgid "Remote \"%s\" not found" msgstr "Data inte funnen" +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "Krävd exekveringsmiljö för %s (%s) inte installerad, söker…\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Vilka vill du installera (0 för att avbryta)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "Krävd exekveringsmiljö för %s (%s) inte installerad, söker…\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Vilka vill du installera (0 för att avbryta)?" + +# sebras: how to translate in here? +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Konfigurerar %s som ett nytt fjärrförråd ”%s”" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"Fjärrförråd ”%s” på plats %s innehåller ytterligare program.\n" +"Vill du behålla fjärrförrådet för framtida installationer?" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Detta program är beroende av exekveringsmiljöer från:\n" +" %s\n" +"Konfigurera det som ett nytt fjärrförråd ”%s”" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "installera" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "uppdatera" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "installera bunt" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "installera" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Installerar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Installerar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Uppdaterar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Uppdaterar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Installerar: %s från bunten %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Installerar: %s från bunten %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Installerar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Avinstallerar: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Inga uppdateringar.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Nu på %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Varning: Misslyckades med %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Fel: Misslyckades med %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Fel: Misslyckades med %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Visa tillägg" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Visa tillägg" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +" Hantera filåtkomst" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +" Hantera filåtkomst" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Logga systembussanrop" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Logga systembussanrop" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Installerar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Installerar: %s\n" + +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "Uppdaterar: %s från %s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 +#, fuzzy, c-format +msgid "Skipping: %s\n" +msgstr "Exporterar %s\n" + +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "" + #. translators: please keep the leading space #: app/flatpak-main.c:62 msgid " Manage installed apps and runtimes" @@ -1875,20 +2529,29 @@ msgid "Uninstall an installed application or runtime" msgstr "Avinstallera ett installerat program eller en exekveringsmiljö" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Lista installerade program och/eller exekveringsmiljöer" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "Visa information för installerade program eller exekveringsmiljöer" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Konfigurera flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 +#, fuzzy +msgid "Repair flatpak installation" +msgstr "Sök endast användarinstallationer" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" @@ -1896,12 +2559,12 @@ "\n" "Hitta program eller exekveringsmiljöer" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 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 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1909,24 +2572,31 @@ "\n" " Körande program" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Kör ett program" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Åsidosätt rättigheter för ett program" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Ange standardversion att köra" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Ange namnrymden för ett körande program" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Körande program" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1934,24 +2604,52 @@ "\n" " Hantera filåtkomst" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Ge ett program tillgång till en specifik fil" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Återkalla tillgång till en specifik fil" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Visa information om en specifik fil" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Lista exporterade filer" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Visa tillägg" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Återkalla skrivrättigheter för programmet" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Visa tillägg" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Visa tillägg" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Visa tillägg" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1959,32 +2657,32 @@ "\n" " Hantera fjärrförråd" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Lista alla konfigurerade fjärrförråd" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Lägg till ett nytt fjärrförråd (efter URL)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Modifiera egenskaper för ett konfigurerat fjärrförråd" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Ta bort ett konfigurerat fjärrförråd" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Lista innehåll för ett konfigurerat fjärrförrådet" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -1992,286 +2690,145 @@ "\n" " Bygg program" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Initiera en katalog för bygge" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Kör ett byggkommando inuti byggkatalogen" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Avsluta en byggkatalog för export" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Exportera en byggkatalog till ett förråd" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, 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:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Importera en buntfil" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Signera ett program eller en exekveringsmiljö" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Uppdatera sammanfattningsfilen i ett förråd" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Skapa ny incheckning baserad på existerande ref" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Skriv ut information om ett arkiv" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 msgid "Print debug information during command processing, -vv for more detail" msgstr "" "Skriv ut felsökningsinformation under kommandohantering, -vv för ytterligare " "detaljer" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:139 msgid "Print OSTree debug information during command processing" msgstr "Skriv ut OSTree-felsökningsinformation under kommandohantering" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Visa hjälpalternativ" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Skriv ut versionsinformation och avsluta" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Skriv ut standardarkitektur och avsluta" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Skriv ut arkitekturer som stöds och avsluta" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Skriv ut aktiva gl-drivrutiner och avsluta" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Arbeta på användarinstallationer" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Arbeta på systeminstallationer (standard)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 #, fuzzy msgid "Work on specific system-wide installation(s)" msgstr "Arbeta på en specifik systemomfattande installation" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "NAMN" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Inbyggda kommandon:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Okänt kommando ”%s”" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Inget kommando angivet" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "fel:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Hittades i flera fjärrförråd;\n" - -#: 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: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: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: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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Fjärrförråd %s inaktiverat, ignorerar %s uppdatering" - -#: app/flatpak-transaction.c:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s redan installerad, ignorerar\n" - -#: 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: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: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:765 -msgid "update" -msgstr "uppdatera" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Nu på %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Inga uppdateringar.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "installera bunt" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Varning: Misslyckades med %s %s: %s\n" - -#: 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:846 -msgid "One or more operations failed" -msgstr "En eller flera åtgärder misslyckades" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Okänd delningstyp %s, giltiga typer är: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Okänd policytyp %s, giltiga typer är: %s" -#: common/flatpak-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Ogiltigt dbusnamn %s\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Okänd uttagstyp %s, giltiga typer är %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Okänd enhetstyp %s, giltiga typer är: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, 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-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2280,485 +2837,1011 @@ "Okänd filsystemsplats %s, giltiga platser är: host, home, xdg-*[/…], ~/kat, /" "kat" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Ogiltigt miljöformat %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Dela med värd" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "DELA" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Avsluta delning med värd" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Exponera uttag för program" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "UTTAG" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Exponera inte detta uttag för program" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Exponera enhet för program" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "ENHET" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Exponera inte enhet till program" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Tillåt funktion" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "FUNKTION" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Tillåt inte funktion" # sebras: can ro be translated? -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 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-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "FILSYSTEM[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Exponera inte filsystem för program" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "FILSYSTEM" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Ställ in miljövariabel" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "VAR=VÄRDE" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Tillåt program att äga namn på sessionsbussen" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "DBUSNAMN" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Tillåt program att prata med namn på sessionsbussen" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Tillåt program att äga namn på systembussen" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Tillåt program att prata med namn på systembussen" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Lägg till alternativ för generell policy" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "SUBSYSTEM.KEY=VALUE" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Ta bort alternativet för generell policy" # sebras: persist or persistant? -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Beständig hemkatalog" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "FILNAMN" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Kräv inte en körande session (inget cgroups-skapande)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Medan %s hämtas från fjärrförrådet %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Uppdaterar extra metadata från sammanfattning av fjärrförråd för %s\n" + +# sebras: how to translate in here? +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Kan inte hitta %s i fjärrförrådet %s" + +# sebras: how to translate in here? +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Kan inte hitta %s i fjärrförrådet %s" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Ingen flatpak-cache i fjärrförrådets sammanfattning" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Ingen post för %s i sammanfattningen av fjärrförrådets flatpak-cache " + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Ingen post för %s i sammanfattningen av fjärrförrådets flatpak-cache " + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Tillåt program att äga namn på systembussen" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Inga åsidosättningar funna för %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s inte installerad" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s inte installerad" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Medan förråd %s öppnas: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Incheckning att distribuera" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +# sebras: how to translate in here? +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Kan inte hitta %s i fjärrförrådet %s" + +# sebras: how to translate in here? +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Kan inte hitta %s i fjärrförrådet %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" 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:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Ogiltig kontrollsumma för extra data %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "Tomt namn för extra data-uri %s" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Extra data-uri som ej stöds %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, 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 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Fel storlek för extra data %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Medan %s hämtas: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Fel storlek för extra data %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Ogiltig kontrollsumma för extra data %s" -#: common/flatpak-dir.c:2882 +#: common/flatpak-dir.c:4080 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 +#: common/flatpak-dir.c:4181 #, c-format msgid "%s commit %s already installed" msgstr "%s incheckning %s redan installerat" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, 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 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Inga träffar" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Kan inte hitta %s i fjärrförrådet %s" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Inte tillräckligt med minne" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Misslyckades med att läsa från exporterad fil" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Fel vid läsning av xml-fil för mimetyp" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Ogiltig xml-fil för mimetyp" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Under hämtning av frånkopplad metadata: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Under hämtning av frånkopplad metadata: " + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Ogiltig kontrollsumma för extra data" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Fel vid skrivning av extra data-filen ”%s”: " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Under hämtning av frånkopplad metadata: " + +#: common/flatpak-dir.c:6557 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "misslyckades med skriptet apply_extra, avslutningsstatus %d" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Under upplösningsförsök för ref %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s gren %s redan installerat" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Misslyckades läsa incheckning %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Under utcheckningsförsök av metadataundersökväg: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Medan utcheckningsförsök av %s i %s: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Under försök att ta bort extra existerande katalog: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Under försök att tillämpa extra data: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Ogiltig distribuerad ref %s: " -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Ogiltig incheckningsref %s: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, 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 +#: common/flatpak-dir.c:6836 #, 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 +#: common/flatpak-dir.c:6844 #, 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 +#: common/flatpak-dir.c:6850 #, 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 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "Distribuerad ref %s matchar inte incheckning (%s)" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Distribuerad metadata matchar inte incheckning" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, 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:7801 +msgid "Can't change remote during bundle install" +msgstr "Kan inte ändra fjärrförråd under buntinstallering" + +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s gren %s redan installerat" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s gren %s är inte installerad" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s gren %s inte installerad" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "Rensning av förråd misslyckades: %s" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, fuzzy, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "Fjärrtitel inte tillgänglig; servern har ingen sammanfattningsfil" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Ingen flatpak-cache i fjärrförrådets sammanfattning" + +#: common/flatpak-dir.c:9716 #, 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 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Ingenting matchar %s" # sebras: how to translate in here? -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, 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 +#: common/flatpak-dir.c:9969 #, 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" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "%s %s inte installerad" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Kunde inte hitta installationen %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Ogiltig gpg-nyckel" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Ogiltigt filformat" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Ogiltigt filformat" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Ogiltigt filformat" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Exekveringsmiljö %s, gren %s är redan installerad" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Ingen flatpak-cache i fjärrförrådets sammanfattning" +# sebras: how to translate in here? +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Kan inte hitta %s i fjärrförrådet %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, 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 " +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Skriv ut metadata för en gren" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s inte installerad" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s inte installerad" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Begärt tillägg %s är bara delvis installerat" + +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Misslyckades med att öppna temporär flatpak-info-fil: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Misslyckades med att öppna temporärfil: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" + +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Fel vid migrering: %s\n" + +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Inget fjärrförråd %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Inget kommando angivet" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" +msgstr "Misslyckades med att öppna prog-info-fil: %s" # sebras: sync? -#: common/flatpak-run.c:1883 +#: common/flatpak-run.c:790 msgid "Unable to create sync pipe" msgstr "Kan inte skapa sync-rör" -#: 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:1940 +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Misslyckades med att synkronisera med dbus-proxy" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Misslyckades med att öppna temporärfil: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +# sebras: sync? +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Kan inte skapa sync-rör" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Misslyckades med att öppna temporär flatpak-info-fil: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Misslyckades med att öppna temporär flatpak-info-fil: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Initiera program från namngivet program" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Misslyckades med att skriva till temporärfil" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Fel: Misslyckades med %s %s: %s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Misslyckades med att läsa från exporterad fil" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Ogiltig pid %s" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "misslyckades med ldconfig, avslutningsstatus %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "Kan inte öppna %s-namnrymd: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "För många argument" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Varning: Problem vid sökning efter relaterade ref:ar: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Program %s gren %s är inte installerad" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Program %s gren %s är inte installerad" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Fjärrförråd %s inaktiverat, ignorerar %s uppdatering" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s incheckning %s redan installerat" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s incheckning %s redan installerat" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Ogiltigt argument för require-flatpak %s\n" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Fel vid uppdatering av fjärrmetadata för ”%s”: %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Varning: Det går inte att finna beroenden: %s\n" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Ogiltigt argument för require-flatpak %s\n" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "Migrerar %s till %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Fel vid migrering: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "För många argument" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Signera ett program eller en exekveringsmiljö" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Ogiltigt dbusnamn %s\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Ogiltig pid %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "Standardgren: %s\n" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Ogiltig pid %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Inga extra data-källor" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Fel vid migrering: %s\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Fel vid migrering: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Uppdatera appstream för fjärrförrådet %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Ogiltig kontrollsumma för extra data" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Hämtar ned metadata: %u/(beräknad) %s" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Hämtar: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Hämtar extra data: %s/%s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Hämtar filer: %d/%d %s" +#: common/flatpak-utils.c:5782 +#, fuzzy, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "Ogiltigt argument för require-flatpak %s\n" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s behöver en senare flatpak-version (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2874,11 +3957,49 @@ msgid "Update appstream" msgstr "Uppdatera appstream" -#~ msgid "No remote %s" -#~ msgstr "Inget fjärrförråd %s" +#~ msgid "Redirect collection ID: %s\n" +#~ msgstr "Dirigera om samlings-ID: %s\n" + +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Ogiltig sha256 för extra data-uri %s" + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Ogiltigt sha256 för extradata" -#~ msgid "Search only user installations" -#~ msgstr "Sök endast användarinstallationer" +#~ msgid "Add OCI registry" +#~ msgstr "Lägg till OCI-register" + +#~ msgid "Installing: %s\n" +#~ msgstr "Installerar: %s\n" + +#~ msgid "Found in remote %s\n" +#~ msgstr "Hittad i fjärrförråd %s\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Hittades i fjärrförrådet %s, vill du installera den?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Hittades i flera fjärrförråd;\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s redan installerad, ignorerar\n" + +#~ msgid "One or more operations failed" +#~ msgstr "En eller flera åtgärder misslyckades" + +#~ msgid "No ref information available in repository" +#~ msgstr "Ingen ref-information tillgänglig i arkiv" + +#~ msgid "Remote title not set" +#~ msgstr "Titel för fjärrförråd inte angett" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Standardfjärrgren inte inställd" #~ msgid "Search only system-wide installations" #~ msgstr "Sök endast systeminstallationer" @@ -2892,9 +4013,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Misslyckades med att avlänka temporärfil" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Misslyckades med att skriva till temporärfil" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Installerar: %s\n" @@ -2936,10 +4054,6 @@ #~ msgid "No manfest found for arch %s, os %s" #~ msgstr "Data inte funnen för ref %s" -#, fuzzy -#~ msgid "Remote extra metadata not available; server has no summary file" -#~ msgstr "Fjärrtitel inte tillgänglig; servern har ingen sammanfattningsfil" - #~ msgid "Data not available; server has no summary file" #~ msgstr "Data inte tillgänglig; servern har ingen sammanfattningsfil" @@ -2953,9 +4067,6 @@ #~ msgid "REPOSITORY and NAME must be specified" #~ msgstr "ARKIV och NAMN måste anges" -#~ msgid "Uninstalling related: %s\n" -#~ msgstr "Avinstallerar relaterade: %s\n" - #~ msgid "Warning: Failed to uninstall related ref: %s\n" #~ msgstr "Varning: Misslyckades med att installera relaterad ref: %s\n" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/tr.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/tr.gmo differ diff -Nru flatpak-0.11.3/po/tr.po flatpak-1.0.7/po/tr.po --- flatpak-0.11.3/po/tr.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/tr.po 2019-02-11 12:42:42.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: flatpak master\n" "Report-Msgid-Bugs-To: https://github.com/flatpak/flatpak/issues\n" -"POT-Creation-Date: 2018-02-19 14:20+0100\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" "PO-Revision-Date: 2017-05-20 08:19+0300\n" "Last-Translator: Muhammet Kara \n" "Language-Team: Türkçe \n" @@ -19,212 +19,6 @@ "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Gtranslator 2.91.7\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Sağlanan uzak varsa hiçbir şey yapma" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "KONUM bir yapılandırma dosyasını belirtir, bir arşiv konumunu değil" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "GPG doğrulamayı etkinleştir" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Uzağı belirtilmiş olarak işaretle" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "Uzağı bağımlılık için olarak işaretle" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Yeni bir url belirle" - -#: 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" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Uzağı etkinleştir" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Özet dosyasından ek üst veri güncelle" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "GPG doğrulamayı devredışı bırak" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Uzağı belirtilmemiş olarak işaretle" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "Uzağı bağımlılık için olarak işaretleme" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "Öncelik belirle (öntanımlı 1, yüksek sayı daha öncelikli)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "ÖNCELİK" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Bu uzak için kullanılacak güzel bir isim" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "BAŞLIK" - -#: app/flatpak-builtins-add-remote.c:78 -msgid "Default branch to use for this remote" -msgstr "Bu uzak için kullanılacak varsayılan dal" - -#: 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 -msgid "BRANCH" -msgstr "DAL" - -#: 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 "" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "" - -#: app/flatpak-builtins-add-remote.c:82 -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: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" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Uzağı devredışı bırak" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "OCI sicili ekle" - -#: 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: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: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: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: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: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: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:348 -msgid "GPG verification is required if collections are enabled" -msgstr "" - -#. Do nothing -#: 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:371 -msgid "No url specified in flatpakrepo file" -msgstr "Flatpakrepo dosyasında url belirtilmemiş" - -#: 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:464 -msgid "NAME - Modify a remote repository" -msgstr "İSİM - Uzak arşivi düzenle" - -#: app/flatpak-builtins-add-remote.c:474 -msgid "Remote NAME must be specified" -msgstr "Uzak İSİM belirtilmelidir" - -#: 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: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: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:56 msgid "Export runtime instead of app" msgstr "Uygulama yerine çalışma ortamı dışa aktar" @@ -234,12 +28,13 @@ msgstr "Paketleneceği mimari" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "MİMARİ" @@ -247,6 +42,14 @@ msgid "Url for repo" msgstr "Arşiv için url" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "URL" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Çalışma ortamı flatpakrepo dosyası için url" @@ -255,6 +58,14 @@ 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.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "DOSYA" + #: 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" @@ -264,26 +75,29 @@ msgstr "OCI görüntüsünün imzalanacağı GPG Anahtar Kimliği" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "ANAHTAR-KİMLİK" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "Anahtarlık aramak için GPG Evdizini" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "EVDİZİN" @@ -291,36 +105,57 @@ 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-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "DEĞİŞİKLİK" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 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:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "KONUM, DOSYAADI ve İSİM belirtilmelidir" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Çok fazla argüman" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "'%s' geçerli bir arşiv değil" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, 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:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "'%s' geçerli bir dal ismi değil: %s" @@ -346,7 +181,7 @@ msgstr "İnşaya bu dizinde başla" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "DİZİN" @@ -355,11 +190,11 @@ msgstr "" "Özel yazılım geliştirme kiti dizini için bakılacak yer ('usr'ye öntanımlar)" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Üst veri için alternatif dosya kullan" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "" @@ -367,368 +202,421 @@ msgid "Export application homedir directory to build" msgstr "" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 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 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Sistem veri yolu çağrılarını günlükle" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "DİZİN [KOMUT [arg...]] - Dizinde inşa et" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "DİZİN belirtilmelidir" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, 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:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "Üst veriye geçersiz, uygulama veya çalışma ortamı değil" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "%s'e uyan eklenti noktası %s'te yok" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Bağlama noktası seçeneği '%s'te eksik '='" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Uygulama başlatılamadı" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Kaynak arşiv dizini" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "KAYNAK-ARŞİV" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Kaynak arşiv referansı" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "KAYNAK-REFERANS" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Tek satır konu" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "KONU" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Tam açıklama" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "GÖVDE" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Appstream dalını güncelle" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Özeti güncelleme" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "Değişikliği imzalamak için GPG Anahtar Kimliği" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:239 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:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "HEDEF-ARŞİV belirtilmelidir" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 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:246 +#: app/flatpak-builtins-build-commit-from.c:257 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:249 +#: app/flatpak-builtins-build-commit-from.c:260 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:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "" + +#: app/flatpak-builtins-build-commit-from.c:425 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 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Dışa aktarılacağı mimari (makinayla uyumlu olmalıdır)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Çalışma ortamını (/usr) değiştir, /app'i değil" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Dosyalar için alternatif dizin kullan" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "ALTDİZİN" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Hariç tutulacak dosyalar" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "KALIP" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Dahil edilecek hariç tutulmuş dosyalar" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" msgstr "" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, 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 +#: app/flatpak-builtins-build-export.c:374 #, 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 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Geçersiz uri tipi %s, sadece http/https destekli" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "%s'te temel isim bulunamadı, bir isim belirtin" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "Ek veri isminde yan çizgi kullanılamaz" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "sha256 sağlama toplamı için geçersiz format: '%s'" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Sıfır ek veri boyutu desteklenmemektedir" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "KONUM DİZİN [DAL] - İnşa dizininden yeni arşiv oluştur" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "KONUM ve DİZİN belirtilmelidir" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, 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-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "Üst veride isim belirtilmemiş" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, fuzzy, c-format msgid "Metadata Total: %u\n" msgstr "Üst veri:" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, fuzzy, c-format msgid "Metadata Written: %u\n" msgstr "Üst veri:" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "Belirlenecek komut" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "KOMUT" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Gerektirilecek Flatpak sürümü" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "BÜYÜK.KÜÇÜK.MİNİK" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Dışa aktarmaları işleme" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Ek veri bilgisi" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Eklenti noktası bilgisi ekle" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "İSİM=DEĞİŞKEN[=DEĞER]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +#, fuzzy +msgid "Remove extension point info" +msgstr "Eklenti noktası bilgisi ekle" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "İSİM" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Uygulama için kullanılan yazılım geliştirme kitini değiştir" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "YGK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 msgid "Change the runtime used for the app" msgstr "Uygulama için kullanılan çalışma ortamını değiştir" -#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:50 -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "ÇALIŞMAORTAMI" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Genel üst veri seçeneğini belirle" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "GRUP=ANAHTAR[=DEĞER]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Uygulamanın yazma izinlerini geri çek" + +#: app/flatpak-builtins-build-finish.c:155 #, c-format -msgid "Not exporting %s, wrong prefix\n" +msgid "Not exporting %s, wrong extension\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:163 +#, c-format +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "" + +#: app/flatpak-builtins-build-finish.c:167 #, fuzzy, c-format msgid "Exporting %s\n" msgstr "Özet güncelleniyor\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "--extra-data argümanı %s'te çok az eleman " -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -736,7 +624,8 @@ msgstr "" "--extension argümanı %s'te çok az öge, format GRUP=ANAHTAR[=DEĞER] olmalıdır" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -745,21 +634,21 @@ "--extension argümanı %s'te çok az argüman, format İSİM=DEĞİŞKEN[=DEĞER] " "olmalıdır" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "DİZİN - İnşa dizinini sonlandır" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "İnşa dizini %s ilklendirilmemiş" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "İnşa dizini %s zaten sonlandırılmış" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Lütfen dışa aktarılmış dosyaları ve üst veriyi gözden geçirin\n" @@ -775,140 +664,149 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Flatpak paketi yerine oci görüntüsü içe aktar" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Referans '%s' sicilde bulunamadı" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 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 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, 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 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "KONUM DOSYAADI - Bir yerel arşive dosya paketi içe aktar" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 msgid "LOCATION and FILENAME must be specified" msgstr "KONUM ve DOSYAADI belirtilmelidir" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Kullanılacak mimari" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "var'ı adlandırılmış çalışma ortamından ilklendir" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Uygulamaları adlandırılmış uygulamadan ilklendir" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "UYGULAMA" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 msgid "Specify version for --base" msgstr "--base için sürüm belirt" -#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-build-init.c:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "SÜRÜM" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Temel eklentisini dahil et" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "EKLENTİ" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "" + +#: app/flatpak-builtins-build-init.c:57 +#, fuzzy +msgid "EXTENSION_TAG" +msgstr "EKLENTİ" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "" "/usr'yi yazılım geliştirme kitinin yazılabilir bir kopyasıyla ilklendir" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "İnşa tipini belirt (uygulama, çalışma ortamı, eklenti)" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "TİP" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Etiket ekle" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "ETİKET" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Bu yazılım geliştirme kiti eklentisini /usr'ye dahil et" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Yazılım geliştirme kitinin saklanacağı yer ('usr'ye öntanımlar)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Sdk/var'ı yeniden ilklendir" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Talep edilen eklenti %s sadece kısmi olarak yüklenmiş" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Talep edilen eklenti %s yüklü değil" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "DİZİN UYGULAMAADI YGK ÇALIŞMAORTAMI [DAL] - Bir dizini inşa için ilklendir" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "ÇALIŞMAORTAMI belirtilmelidir" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" 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:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "'%s' geçerli bir uygulama ismi değil: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "İnşa dizini %s zaten ilklendirilmiş" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Yükleneceği mimari" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Belirtilmiş isimle çalışma ortamı ara" @@ -916,10 +814,120 @@ msgid "LOCATION [ID [BRANCH]] - Sign an application or runtime" msgstr "KONUM [KİMLİK [DAL]] - Bir uygulamayı veya çalışma ortamını imzala" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "KONUM belirtilmelidir" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Gpg anahtar kimliği belirtilmemiş" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Bu arşiv için kullanılacak güzel bir ad" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "BAŞLIK" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Bu arşiv için kullanılacak öntanımlı dal" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "DAL" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "Özetin imzalanacağı GPG anahtar kimliği" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Delta dosyaları oluştur" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Kullanılmayan nesneleri kes" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Her değişiklik için sadece DERİNLİK ebeveynlerini çaprazla (öntanımlı: " +"-1=infinite)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "DERİNLİK" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Delta oluşturuluyor: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Delta oluşturuluyor: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "%s delta oluşturulamadı (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "%s delta oluşturulamadı (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "KONUM - Arşiv üst verisini güncelle" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Appstream dalı güncelleniyor\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Özet güncelleniyor\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Toplam nesneler: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Ulaşılamayan nesne yok\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "%u nesne silindi, %s temizlendi\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "" @@ -936,35 +944,105 @@ msgid "Unset configuration for KEY" msgstr "" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, fuzzy, c-format msgid "Unknown configure key '%s'" msgstr "Bilinmeyen komut '%s'" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 #, fuzzy msgid "You must specify key" msgstr "UYGULAMA belirtilmelidir" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "" -#: app/flatpak-builtins-config.c:223 +#: app/flatpak-builtins-config.c:224 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-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Belirtilmiş isimle uygulama ara" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "İSİM - Bir uzak arşivi sil" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Gösterilecek mimari" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "HEDEF=KAYNAK" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "UZAK ve REFERANS belirtilmelidir" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "%s için ek üst veri güncellenemedi" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "%s için ek üst veri güncellenemedi" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "%s için ek üst veri güncellenemedi" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Appstream uzak %s için güncelleniyor\n" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1112,204 +1190,183 @@ msgid "Can't switch uid" msgstr "uid değiştirilemedi" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Kullanıcı yüklemelerini göster" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Sistem-geneli yüklemeleri göster" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Belirli sistem-geneli yüklemeleri göster" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Referansı göster" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Değişikliği göster" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Kökeni göster" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Boyut göster" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Üst veri göster" -#: app/flatpak-builtins-info.c:60 +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +#, fuzzy +msgid "Show runtime" +msgstr "Sadece çalışma ortamlarını göster" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +#, fuzzy +msgid "Show sdk" +msgstr "Boyut göster" + +#: app/flatpak-builtins-info.c:65 #, fuzzy msgid "Show permissions" msgstr "Eklentileri göster" -#: app/flatpak-builtins-info.c:61 +#: app/flatpak-builtins-info.c:66 #, 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-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "VERİYOLU" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Eklentileri göster" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +#, fuzzy +msgid "Show location" +msgstr "Yardım seçeneklerini göster" + +#: app/flatpak-builtins-info.c:127 +#, fuzzy +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" "İSİM [DAL] - Yüklü uygulamalar ve/veya çalışma ortamları hakkında bilgi edin" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "İSİM belirtilmelidir" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" msgstr "" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Dal:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 #, fuzzy msgid "Collection ID:" msgstr "Bir uygulama çalıştır" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" msgstr "" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" msgstr "" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" msgstr "" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Yüklü boyut:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 -msgid "Runtime:" -msgstr "Çalışma zamanı:" - -#: app/flatpak-builtins-info.c:242 -msgid "Installed subdirectories:" -msgstr "" - -#: app/flatpak-builtins-info.c:363 -msgid "Extension:" -msgstr "Uzantı:" - -#: app/flatpak-builtins-info.c:374 -msgid "Subpaths:" -msgstr "" - -#: 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 "Belirtilmiş isimle uygulama ara" - -#: app/flatpak-builtins-info-remote.c:52 -msgid "Display log" +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" 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" +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" 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.c:253 app/flatpak-builtins-remote-info.c:220 +msgid "Runtime:" +msgstr "Çalışma zamanı:" -#: app/flatpak-builtins-info-remote.c:244 -msgid " Subject:" +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" msgstr "" -#: app/flatpak-builtins-info-remote.c:245 -msgid " Date:" +#: app/flatpak-builtins-info.c:260 +msgid "Installed subdirectories:" msgstr "" -#: app/flatpak-builtins-info-remote.c:246 -#, fuzzy -msgid " Commit:" -msgstr "Değişikliği göster" +#: app/flatpak-builtins-info.c:411 +msgid "Extension:" +msgstr "Uzantı:" -#: app/flatpak-builtins-info-remote.c:292 -#, c-format -msgid "Warning: Commit %s has no flatpak metadata\n" +#: app/flatpak-builtins-info.c:422 +msgid "Subpaths:" msgstr "" #: app/flatpak-builtins-install.c:58 @@ -1348,7 +1405,8 @@ msgid "Only install this subpath" msgstr "Sadece bu alt yolunu yükle " -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Tüm soruları otomatik olarak evetle cevapla" @@ -1357,50 +1415,26 @@ 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Uygulama şuradan çalışma ortamlarına bağımlı:\n" -" %s\n" -"Bunu yeni uzak '%s' olarak yapılandır" - -#: 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:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Paket dosya adı belirtilmelidir" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Uzak paketler desteklenmemektedir" -#: app/flatpak-builtins-install.c:338 -#, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Dosya adı veya uri belirtilmelidir" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Yükleniyor: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "KONUM/UZAK [REFERANS...] - Uygulamalar veya çalışma ortamları yükle" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "UZAK ve REFERANS belirtilmelidir" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Ek bilgi göster" @@ -1417,378 +1451,762 @@ msgid "Arch to show" msgstr "Gösterilecek mimari" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Referans" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Yüklü boyut" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Yüklü uygulamaları ve/veya çalışma ortamlarını listele" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" -msgstr "Uzak detaylarını göster" - -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" -msgstr "Devredışı bırakılmış uzakları göster" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Mevcutun yapılacağı mimariler" -#: app/flatpak-builtins-list-remotes.c:53 +#: 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:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "UYGULAMA belirtilmelidir" + +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "DAL belirtilmelidir" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +#, fuzzy +msgid "[APP] - Override settings [for application]" +msgstr "UYGULAMA - Uygulama için ayarları geçersiz kıl" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +#, fuzzy +msgid "Permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "Uygulamanın yazma izinlerini geri çek" + +#: app/flatpak-builtins-permission-remove.c:91 +#, fuzzy +msgid "Too few arguments" +msgstr "Çok fazla argüman" + +#: app/flatpak-builtins-permission-reset.c:108 +#, fuzzy +msgid "APP_ID - Reset permissions for an app" +msgstr "Bu uygulama için izinler ekle" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +#, fuzzy +msgid "Wrong number of arguments" +msgstr "Çok fazla argüman" + +#: app/flatpak-builtins-permission-show.c:112 +#, fuzzy +msgid "APP_ID - Show permissions for an app" +msgstr "Bu uygulama için izinler ekle" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Devredışı bırakılmış uzakları göster" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Bir arşiv hakkında bilgi yazdır" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Bir uygulama çalıştır" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Bir uygulama çalıştır" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Kullanılacak mimari" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +#, fuzzy +msgid "Branch" +msgstr "Dal:" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Mimarileri ve dalları göster" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Yardım seçeneklerini göster" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Çalışma zamanı:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Sadece çalışma ortamlarını göster" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Çalışma zamanı:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Sadece çalışma ortamlarını göster" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Kullanılacak çalışma ortamı" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Sadece çalışma ortamlarını göster" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "UYGULAMAKİMLİĞİ" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" + +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Bilinmeyen komut '%s'" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Yardım seçeneklerini göster" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Yüklü" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Ek veri bilgisi" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Sağlanan uzak varsa hiçbir şey yapma" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "KONUM bir yapılandırma dosyasını belirtir, bir arşiv konumunu değil" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "GPG doğrulamayı devredışı bırak" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Uzağı belirtilmemiş olarak işaretle" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "Uzağı bağımlılık için olarak işaretleme" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "Öncelik belirle (öntanımlı 1, yüksek sayı daha öncelikli)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "ÖNCELİK" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Bu uzak için kullanılacak güzel bir isim" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Bu uzak için kullanılacak varsayılan dal" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "DOSYA'dan GPG anahtarı içe aktar (stdin için -)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Uzağı devredışı bırak" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "" + +#: app/flatpak-builtins-remote-add.c:206 +#, fuzzy, c-format +msgid "Can't load file %s: %s\n" +msgstr "%s ad alanı açılamadı: %s" + +#: app/flatpak-builtins-remote-add.c:214 +#, fuzzy +msgid "Invalid file format" +msgstr "Geçersiz env formatı %s" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, fuzzy, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Geçersiz uri tipi %s, sadece http/https destekli" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +#, fuzzy +msgid "Invalid gpg key" +msgstr "Geçersiz pid %s" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "İSİM KONUM - Uzak bir arşiv ekle" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "%s uzağı zaten var" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "Flatpakrepo dosyasında url belirtilmemiş" + +#: app/flatpak-builtins-remote-add.c:383 +#, 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-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Uzağı kullanılıyor olsa da kaldır" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "İSİM - Bir uzak arşivi sil" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:57 +#, fuzzy +msgid "Show parent" +msgstr "Referansı göster" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:213 +#, fuzzy +msgid "Download size:" +msgstr "İndirme boyutu" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr "" + +#: app/flatpak-builtins-remote-info.c:252 +#, fuzzy +msgid " Commit:" +msgstr "Değişikliği göster" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Uzak detaylarını göster" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Devredışı bırakılmış uzakları göster" + +#: app/flatpak-builtins-remote-list.c:53 msgid " - List remote repositories" msgstr " - Uzak arşivleri listele" -#: app/flatpak-builtins-list-remotes.c:66 +#: app/flatpak-builtins-remote-list.c:66 msgid "Name" msgstr "" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Mimarileri ve dalları göster" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Sadece çalışma ortamlarını göster" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Sadece uygulamaları göster" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Sadece güncellemeleri olanları göster" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Bu mimariyle kısıtla (hepsi için *)" -#: app/flatpak-builtins-ls-remote.c:96 +#: app/flatpak-builtins-remote-ls.c:101 #, fuzzy -msgid " [REMOTE] - Show available runtimes and applications" +msgid " [REMOTE or URI] - Show available runtimes and applications" msgstr " UZAK - Kullanılabilir çalışma ortamlarını ve uygulamaları listele" -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "" - -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "İndirme boyutu" -#: app/flatpak-builtins-ls-remote.c:304 -#, fuzzy -msgid "No ref information available in repository" -msgstr "Arşiv hakkında genel bilgileri yazdır" - -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Mevcutun yapılacağı mimariler" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "GPG doğrulamayı etkinleştir" -#: 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-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Uzağı belirtilmiş olarak işaretle" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 -msgid "APP must be specified" -msgstr "UYGULAMA belirtilmelidir" +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "Uzağı bağımlılık için olarak işaretle" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "DAL belirtilmelidir" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Yeni bir url belirle" -#: 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-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Uzağı etkinleştir" -#: 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-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Özet dosyasından ek üst veri güncelle" -#: app/flatpak-builtins-repo.c:48 -#, c-format -msgid "Title: %s\n" -msgstr "" +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "İSİM - Uzak arşivi düzenle" -#: app/flatpak-builtins-repo.c:51 -#, c-format -msgid "Collection ID: %s\n" -msgstr "" +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Uzak İSİM belirtilmelidir" -#: app/flatpak-builtins-repo.c:54 +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "Default branch: %s\n" -msgstr "" +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-repo.c:57 +#: app/flatpak-builtins-remote-modify.c:214 #, c-format -msgid "Redirect URL: %s\n" -msgstr "" +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "'%s' için ek üst veri güncellenirken hata: %s\n" -#: app/flatpak-builtins-repo.c:60 +#: app/flatpak-builtins-remote-modify.c:215 #, c-format -msgid "Redirect collection ID: %s\n" -msgstr "" +msgid "Could not update extra metadata for %s" +msgstr "%s için ek üst veri güncellenemedi" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repair.c:63 #, c-format -msgid "GPG key hash: %s\n" +msgid "Object missing: %s.%s\n" msgstr "" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repair.c:69 #, c-format -msgid "%zd branches\n" +msgid "%s, deleting object\n" msgstr "" -#: app/flatpak-builtins-repo.c:99 -msgid "Installed" -msgstr "Yüklü" - -#: app/flatpak-builtins-repo.c:100 -msgid "Download" -msgstr "İndir" - -#: app/flatpak-builtins-repo.c:151 -msgid "Print general information about the repository" -msgstr "Arşiv hakkında genel bilgileri yazdır" - -#: app/flatpak-builtins-repo.c:152 -msgid "List the branches in the repository" -msgstr "Arşivdeki dalları listele" - -#: app/flatpak-builtins-repo.c:153 -msgid "Print metadata for a branch" -msgstr "Dal için üst veriyi yazdır" +#: app/flatpak-builtins-repair.c:134 +#, fuzzy, c-format +msgid "Can't load object %s: %s\n" +msgstr "%s ad alanı açılamadı: %s" -#: app/flatpak-builtins-repo.c:168 -msgid "LOCATION - Repository maintenance" -msgstr "KONUM - Arşiv bakım" +#: app/flatpak-builtins-repair.c:253 +#, fuzzy, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Appstream uzak %s için güncelleniyor\n" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "" +#: app/flatpak-builtins-repair.c:266 +#, fuzzy, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Yükleniyor: %s\n" -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Bu arşiv için kullanılacak güzel bir ad" +#: app/flatpak-builtins-repair.c:288 +#, fuzzy +msgid "- Repair a flatpak installation" +msgstr "Kullanıcı yüklemelerini göster" -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -msgstr "Bu arşiv için kullanılacak öntanımlı dal" +#: app/flatpak-builtins-repair.c:343 +#, fuzzy, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Geçersiz pid %s" -#: app/flatpak-builtins-repo-update.c:57 -msgid "Permanently deploy collection ID to client remote configurations" +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:59 -msgid "Import new default GPG public key from FILE" +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" msgstr "" -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "Özetin imzalanacağı GPG anahtar kimliği" - -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Delta dosyaları oluştur" - -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" +#: app/flatpak-builtins-repair.c:359 +#, fuzzy +msgid "Pruning objects\n" msgstr "Kullanılmayan nesneleri kes" -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +#: app/flatpak-builtins-repair.c:394 +#, fuzzy +msgid "Reinstalling removed refs\n" +msgstr "İlişkili referansları yükleme" + +#: app/flatpak-builtins-repo.c:48 +#, c-format +msgid "Title: %s\n" msgstr "" -"Her değişiklik için sadece DERİNLİK ebeveynlerini çaprazla (öntanımlı: " -"-1=infinite)" -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "DERİNLİK" +#: app/flatpak-builtins-repo.c:51 +#, c-format +msgid "Collection ID: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:193 +#: app/flatpak-builtins-repo.c:54 #, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Delta oluşturuluyor: %s (%.10s)\n" +msgid "Default branch: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:195 +#: app/flatpak-builtins-repo.c:57 #, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Delta oluşturuluyor: %s (%.10s-%.10s)\n" +msgid "Redirect URL: %s\n" +msgstr "" + +#: app/flatpak-builtins-repo.c:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "Bir uygulama çalıştır" -#: app/flatpak-builtins-repo-update.c:203 +#: app/flatpak-builtins-repo.c:73 #, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "%s delta oluşturulamadı (%.10s): " +msgid "GPG key hash: %s\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:206 +#: app/flatpak-builtins-repo.c:82 #, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "%s delta oluşturulamadı (%.10s-%.10s): " +msgid "%zd branches\n" +msgstr "" -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "KONUM - Arşiv üst verisini güncelle" +#: app/flatpak-builtins-repo.c:106 +msgid "Installed" +msgstr "Yüklü" -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Appstream dalı güncelleniyor\n" +#: app/flatpak-builtins-repo.c:107 +msgid "Download" +msgstr "İndir" -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Özet güncelleniyor\n" +#: app/flatpak-builtins-repo.c:175 +msgid "Print general information about the repository" +msgstr "Arşiv hakkında genel bilgileri yazdır" -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Toplam nesneler: %u\n" +#: app/flatpak-builtins-repo.c:176 +msgid "List the branches in the repository" +msgstr "Arşivdeki dalları listele" -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Ulaşılamayan nesne yok\n" +#: app/flatpak-builtins-repo.c:177 +msgid "Print metadata for a branch" +msgstr "Dal için üst veriyi yazdır" -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "%u nesne silindi, %s temizlendi\n" +#: app/flatpak-builtins-repo.c:192 +msgid "LOCATION - Repository maintenance" +msgstr "KONUM - Arşiv bakım" -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Çalıştırılacak komut" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Kullanılacak dal" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Geliştirme çalışma ortamı kullan" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Kullanılacak çalışma ortamı" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Kullanılacak çalışma ortamı sürümü" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 #, fuzzy msgid "Log accessibility bus calls" msgstr "Oturum veri yolu çağrılarını günlükle" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +#, fuzzy +msgid "Don't proxy accessibility bus calls" +msgstr "Oturum veri yolu çağrılarını günlükle" + +#: app/flatpak-builtins-run.c:68 +#, fuzzy +msgid "Don't start portals" +msgstr "Dural deltaları kullanma" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "" + +#: app/flatpak-builtins-run.c:71 +#, fuzzy +msgid "Use specified runtime commit" +msgstr "İmzalı çalışma ortamı güncelle" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "UYGULAMA [arg...] - Bir uygulamayı çalıştır" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +#, fuzzy +msgid "Arch to search for" +msgstr "Yükleneceği mimari" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" msgstr "" -#: app/flatpak-builtins-search.c:249 +#: app/flatpak-builtins-search.c:263 #, fuzzy msgid "TEXT must be specified" msgstr "UZAK belirtilmelidir" -#: app/flatpak-builtins-search.c:305 +#: app/flatpak-builtins-search.c:316 #, fuzzy msgid "Application ID" msgstr "Bir uygulama çalıştır" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" msgstr "" -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Dal:" - -#: app/flatpak-builtins-search.c:310 +#: app/flatpak-builtins-search.c:321 #, fuzzy msgid "Remotes" msgstr "%s uzak yok" -#: app/flatpak-builtins-search.c:311 +#: app/flatpak-builtins-search.c:322 #, fuzzy msgid "Description" msgstr "Tam açıklama" -#: app/flatpak-builtins-search.c:320 +#: app/flatpak-builtins-search.c:331 #, fuzzy msgid "No matches found" msgstr "%s için eşleşme yok" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Silinecek mimari" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Referansı yerel arşivde sakla" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "İlişkili referansları sil" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Dosyaları çalışıyor olsalar da kaldır" -#: app/flatpak-builtins-uninstall.c:70 +#: app/flatpak-builtins-uninstall.c:56 +#, fuzzy +msgid "Uninstall all" +msgstr "Uygulama kaldır" + +#: app/flatpak-builtins-uninstall.c:57 +#, fuzzy +msgid "Uninstall unused" +msgstr "Çalışma ortamı kaldır" + +#: app/flatpak-builtins-uninstall.c:155 msgid "REF... - Uninstall an application" msgstr "REFERANS... - Bir uygulamayı sil" -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" +#: app/flatpak-builtins-uninstall.c:164 +#, fuzzy +msgid "Must specify at least one REF, --unused or --all" msgstr "En az bir REFERANS belirtilmelidir" -#: 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:167 +msgid "Must not specify REFs when using --all" +msgstr "" -#: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Yükleniyor: %s\n" +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "" + +#: app/flatpak-builtins-uninstall.c:307 +#, fuzzy +msgid "Nothing unused to uninstall\n" +msgstr "Silinecek mimari" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1822,44 +2240,274 @@ msgid "[REF...] - Update applications or runtimes" msgstr "[REFERANS...] - Uygulamaları veya çalışma ortamlarını güncelle" -#: app/flatpak-builtins-update.c:119 +#: app/flatpak-builtins-update.c:128 #, fuzzy msgid "Looking for updates...\n" msgstr "Güncelleme yok.\n" -#: app/flatpak-builtins-utils.c:365 +#: app/flatpak-builtins-utils.c:367 #, c-format msgid "Remote ‘%s’ found in multiple installations:\n" msgstr "" -#: app/flatpak-builtins-utils.c:372 +#: app/flatpak-builtins-utils.c:374 #, 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 +#: app/flatpak-builtins-utils.c:376 #, 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 +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 #, fuzzy, c-format -msgid "Updating appstream data for user remote %s\n" +msgid "Updating appstream data for user remote %s" msgstr "Appstream uzak %s için güncelleniyor\n" -#: app/flatpak-builtins-utils.c:486 app/flatpak-builtins-utils.c:488 +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 #, fuzzy, c-format -msgid "Updating appstream data for remote %s\n" +msgid "Updating appstream data for remote %s" msgstr "Appstream uzak %s için güncelleniyor\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +#, fuzzy +msgid "Error updating" +msgstr "Özet güncelleniyor\n" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "%s için gerekli çalışma ortamı (%s) yüklü değil, aranıyor...\n" + +#: app/flatpak-cli-transaction.c:81 +#, fuzzy +msgid "Do you want to install it?" +msgstr "Hangisini yüklemek istiyorsunuz (iptal etmek için 0)?" + +#: app/flatpak-cli-transaction.c:86 +#, fuzzy, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "%s için gerekli çalışma ortamı (%s) yüklü değil, aranıyor...\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Hangisini yüklemek istiyorsunuz (iptal etmek için 0)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "%s yeni uzak %s olarak yapılandırılıyor" + +#: app/flatpak-cli-transaction.c:116 +#, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Uygulama şuradan çalışma ortamlarına bağımlı:\n" +" %s\n" +"Bunu yeni uzak '%s' olarak yapılandır" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "yükle" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "güncelle" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "paket yükle" + +#: app/flatpak-cli-transaction.c:147 +#, fuzzy +msgid "uninstall" +msgstr "yükle" + +#: app/flatpak-cli-transaction.c:238 +#, fuzzy, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Yükleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Yükleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:245 +#, fuzzy, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:254 +#, fuzzy, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Yükleniyor: paket %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Yükleniyor: paket %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:262 +#, fuzzy, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Yükleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:264 +#, fuzzy, c-format +msgid "Uninstalling: %s\n" +msgstr "Yükleniyor: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Güncelleme yok.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Şimdi %s'te\n" + +#: app/flatpak-cli-transaction.c:321 +#, 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-cli-transaction.c:329 +#, fuzzy, c-format +msgid "Failed to %s %s: " +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: app/flatpak-cli-transaction.c:335 +#, 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-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "new permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-cli-transaction.c:509 +#, fuzzy +msgid "permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "new file access" +msgstr "" +"\n" +"Dosya erişimini yönet" + +#: app/flatpak-cli-transaction.c:514 +#, fuzzy +msgid "file access" +msgstr "" +"\n" +"Dosya erişimini yönet" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "new system dbus access" +msgstr "Sistem veri yolu çağrılarını günlükle" + +#: app/flatpak-cli-transaction.c:529 +#, fuzzy +msgid "system dbus access" +msgstr "Sistem veri yolu çağrılarını günlükle" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" + +#: app/flatpak-cli-transaction.c:564 +#, fuzzy, c-format +msgid "Uninstalling from %s:\n" +msgstr "Yükleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:586 +#, fuzzy, c-format +msgid "Installing in %s:\n" +msgstr "Yükleniyor: %s\n" + +#: app/flatpak-cli-transaction.c:623 +#, fuzzy, c-format +msgid "Updating in %s:\n" +msgstr "Güncelleniyor: %2$s'ten %1$s\n" + +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "" + +#: app/flatpak-cli-transaction.c:728 #, fuzzy, c-format -msgid "Error updating: %s\n" +msgid "Skipping: %s\n" msgstr "Özet güncelleniyor\n" -#: app/flatpak-builtins-utils.c:526 -#, c-format -msgid "Remote \"%s\" not found" +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" msgstr "" #. translators: please keep the leading space @@ -1879,33 +2527,42 @@ msgid "Uninstall an installed application or runtime" msgstr "Yüklü bir uygulama veya çalışma ortamını kaldır" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Yüklü uygulama ve/veya çalışma ortamlarını listele" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 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 +#: app/flatpak-main.c:70 #, fuzzy msgid "Configure flatpak" msgstr "Uzak Yapılandır" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 #, fuzzy +msgid "Repair flatpak installation" +msgstr "Kullanıcı yüklemelerini göster" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 +#, fuzzy msgid "" "\n" " Finding applications and runtimes" msgstr "Bir uygulamayı veya çalışma ortamını imzala" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" msgstr "" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1913,24 +2570,31 @@ "\n" " Çalışan uygulamalar" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Bir uygulama çalıştır" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Bir uygulama için izinleri geçersiz kıl" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Çalıştırılacak öntanımlı sürümü belirt" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Çalışan bir uygulamanın ad alanına gir" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Çalışan uygulamalar" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1938,24 +2602,52 @@ "\n" "Dosya erişimini yönet" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Bir uygulamaya belirli bir dosyaya erişim tanı" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Belirli bir dosyaya erişimi geri çek" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Belirli bir dosya hakkında bilgi göster" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Dışa aktarılmış dosyaları listele" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +#, fuzzy +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-main.c:95 +#, fuzzy +msgid "Remove item from permission store" +msgstr "Uygulamanın yazma izinlerini geri çek" + +#: app/flatpak-main.c:96 +#, fuzzy +msgid "List permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-main.c:97 +#, fuzzy +msgid "Show app permissions" +msgstr "Eklentileri göster" + +#: app/flatpak-main.c:98 +#, fuzzy +msgid "Reset app permissions" +msgstr "Eklentileri göster" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1963,33 +2655,33 @@ "\n" " Uzak arşivleri yönet" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Tüm yapılandırılmış uzakları listele" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Yeni bir uzak arşiv ekle (URL'yle)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Yapılandırılmış bir uzağın niteliklerini düzenle" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Yapılandırılmış bir uzağı sil" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Yapılandırılmış bir uzağın içeriklerini listele" -#: app/flatpak-main.c:96 +#: app/flatpak-main.c:108 #, 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:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -1997,283 +2689,143 @@ "\n" " Uygulamaları inşa et" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "İnşa için bir dizini ilklendir" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "İnşa dizininde bir inşa komutu çalıştır" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Bir inşa dizinini dışa aktarma için bitir" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Bir inşa dizinini bir arşive dışa aktar" -#: app/flatpak-main.c:104 +#: app/flatpak-main.c:116 #, 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:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Bir paket dosyası içe aktar" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Bir uygulamayı veya çalışma ortamını imzala" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Bir arşivdeki özet dosyasını güncelle" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Var olan referansa dayalı yeni değişiklik yarat" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Bir arşiv hakkında bilgi yazdır" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 #, 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:127 +#: app/flatpak-main.c:139 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:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Yardım seçeneklerini göster" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Sürüm bilgisini yaz ve çık" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Öntanımlı mimariyi yaz ve çık" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Desteklenen mimarileri yaz ve çık" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Etkin gl sürücülerini yazdır ve çık" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Kullanıcı yüklemeleri üzerinde çalış" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Sistem geneli yüklemeler üzerinde çalış (öntanımlı)" -#: app/flatpak-main.c:143 +#: app/flatpak-main.c:155 #, fuzzy msgid "Work on specific system-wide installation(s)" msgstr "Belirli bir sistem geneli yükleme üzerinde çalış" -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "İSİM" - -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Yerleşik Komutlar:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Bilinmeyen komut '%s'" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Komut belirtilmemiş" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "hata:" -#: 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:322 -msgid "Found in several remotes:\n" -msgstr "Birkaç farklı uzakta bulundu:\n" - -#: 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: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: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: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: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:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s zaten yüklü, atlanıyor\n" - -#: 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: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: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:765 -msgid "update" -msgstr "güncelle" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Şimdi %s'te\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Güncelleme yok.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "paket yükle" - -#: 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: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: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:846 -msgid "One or more operations failed" -msgstr "Bir veya daha fazla seçenek başarılamadı" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Bilinmeyen paylaşım tipi %s, geçerli tipler: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Bilinmeyen ilke tipi %s, geçerli tipler: %s" -#: common/flatpak-context.c:248 -#, c-format -msgid "Invalid dbus name %s\n" +#: common/flatpak-context.c:251 +#, fuzzy, c-format +msgid "Invalid dbus name %s" msgstr "Geçersiz dbus ismi %s\n" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Bilinmeyen soket tipi %s, geçerli tipler: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Bilinmeyen cihaz tiği %s, geçerli tipler: %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Bilinmeyen özellik tipi %s, geçerli tipler: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2282,480 +2834,1001 @@ "Bilinmeyen dosya sistemi konumu %s, geçerli konumlar: makina, home, xdg-" "*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Geçersiz env formatı %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Makinayla paylaş" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "PAYLAŞ" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Makinayla paylaşma" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Soketi uygulamaya göster" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "SOKET" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Soketi uygulamaya gösterme" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Cihazı uygulamaya göster" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "CİHAZ" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Cihazı uygulamaya gösterme" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Özelliğe izin ver" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "ÖZELLİK" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Özelliğe izin verme" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Dosya sistemini uygulamaya göster (salt-okuma için :ro)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "DOSYASİSTEMİ[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Dosya sistemini uygulamaya gösterme" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "DOSYASİSTEMİ" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Ortam değişkeni tanımla" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "DEĞİŞKEN=DEĞER" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Uygulamanın oturum veri yolunda kendi adı olmasına izin ver" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "DBUS_İSMİ" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 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-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Uygulamanın sistem veri yolunda kendi adı olmasına izin ver" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 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-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Genel ilke seçeneği ekle" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ALTSİSTEM.ANAHTAR=DEĞER" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Genel ilke seçeneğini kaldır" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Ev dizinini koru" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "DOSYAİSMİ" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Çalışan oturum gerektirme (cgroups yaratımı yok)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Uzak %2$s'ten %1$s çekerken:" + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "%s için uzak özetinden ek üst veri güncelleniyor\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Uzak %2$s'te %1$s bulunamadı" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, fuzzy, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Uzak %2$s'te %1$s bulunamadı" + +#: common/flatpak-dir.c:365 +#, fuzzy, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "Uzak özetinde flatpak önbelleği yok" + +#: common/flatpak-dir.c:374 +#, fuzzy, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Uzak özeti flatpak önbelleğinde %s için girdi yok" + +#: common/flatpak-dir.c:420 +#, fuzzy, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Uzak özeti flatpak önbelleğinde %s için girdi yok" + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Uygulamanın sistem veri yolunda kendi adı olmasına izin ver" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "%s için geçersiz kılma bulunamadı" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s yüklü değil" + +#: common/flatpak-dir.c:1754 +#, fuzzy, c-format +msgid "%s (commit %s) not installed" +msgstr "%s %s yüklü değil" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Arşiv %s'i açarken:" -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Dağıtılacak değişiklik" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Uzak %2$s'te %1$s bulunamadı" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Uzak %2$s'te %1$s bulunamadı" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" 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:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Ek veri %s için geçeresiz sağlama toplamı" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, 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 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Desteklenmeyen ek veri uri'si %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, fuzzy, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Değişiklik %s okunamadı:" -#: common/flatpak-dir.c:2790 +#: common/flatpak-dir.c:3988 #, fuzzy, c-format msgid "Wrong size for extra-data %s" msgstr "Ek veri %s için yanlış boyut" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "%s indirilirken:" -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Ek veri %s için yanlış boyut" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, 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 +#: common/flatpak-dir.c:4080 #, fuzzy msgid "Remote OCI index has no registry uri" msgstr "KONUM'un bir oci sicili olduğunu varsay " -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, 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 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Uzak %2$s'ten %1$s çekerken:" -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "%s için eşleşme yok" + +#: common/flatpak-dir.c:4704 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Uzak %2$s'te %1$s bulunamadı" +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 +#, c-format +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" + +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Yeterli bellek yok" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Dışa aktarılmış dosyadan okunamadı" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Ayrık üst veri alınırken:" -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Ayrık üst veri alınırken:" + +#: common/flatpak-dir.c:6308 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:6329 common/flatpak-dir.c:6362 +msgid "Invalid checksum for extra data" +msgstr "Ek veri için geçersiz sağlama toplamı" -#: common/flatpak-dir.c:5157 +#: common/flatpak-dir.c:6358 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 +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Ek veri dosyası '%s' yazılırken:" -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Ayrık üst veri alınırken:" + +#: common/flatpak-dir.c:6557 #, 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 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Referans %s çözülmeye çalışılırken:" -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "%s dalı %s zaten yüklü" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Değişiklik %s okunamadı:" -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, 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 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Üst veri alt dizini geçirilmeye çalışılırken:" -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "%s'i %s'e geçirmeye çalışırken:" + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Var olan ek dizini kaldırmaya çalışırken:" -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Ek veriyi uygulamaya çalışırken:" -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, fuzzy, c-format msgid "Invalid deployed ref %s: " msgstr "Geçersiz pid %s" -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, fuzzy, c-format msgid "Invalid commit ref %s: " msgstr "Geçersiz pid %s" -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, c-format msgid "Deployed ref %s kind does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5615 +#: common/flatpak-dir.c:6836 #, c-format msgid "Deployed ref %s name does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5623 +#: common/flatpak-dir.c:6844 #, c-format msgid "Deployed ref %s arch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5629 +#: common/flatpak-dir.c:6850 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5635 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, 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 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "Paket yüklemesi sırasında uzak değiştirilemedi" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, fuzzy, c-format +msgid "%s branch already installed" +msgstr "%s dalı %s zaten yüklü" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s dalı %s yüklü değil" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s dalı %s yüklü değil" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, fuzzy, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Uzak özetinde flatpak önbelleği yok" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "%s için eşleşme yok" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, 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 +#: common/flatpak-dir.c:9884 #, 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 +#: common/flatpak-dir.c:9969 #, 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" +#: common/flatpak-dir.c:10114 +#, fuzzy, c-format +msgid "%s/%s/%s not installed" msgstr "%s %s yüklü değil" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Yükleme %s bulunamadı" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Geçersiz pid %s" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Geçersiz env formatı %s" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Geçersiz env formatı %s" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Geçersiz env formatı %s" + +#: common/flatpak-dir.c:10871 #, 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 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "Uzak özetinde flatpak önbelleği yok" +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Uzak %2$s'te %1$s bulunamadı" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Uzak özeti flatpak önbelleğinde %s için girdi yok" +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Dal için üst veriyi yazdır" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s yüklü değil" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s yüklü değil" + +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Talep edilen eklenti %s sadece kısmi olarak yüklenmiş" -#: common/flatpak-run.c:1456 +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Flatpak-info geçici dosyası açılamadı: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Geçici dosya açılamadı: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" -#: common/flatpak-run.c:1883 -msgid "Unable to create sync pipe" -msgstr "Eşzamanlama veri yolu yaratılamadı" +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "%s uzak yok" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Komut belirtilmemiş" + +#: common/flatpak-run.c:690 +#, fuzzy +msgid "Failed to open app info file" msgstr "Uygulama bilgi dosyası açılamadı: %s" -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:790 +msgid "Unable to create sync pipe" +msgstr "Eşzamanlama veri yolu yaratılamadı" + +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Dbus vekiliyle eşzamanlanamadı" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Geçici dosya açılamadı: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Eşzamanlama veri yolu yaratılamadı" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Flatpak-info geçici dosyası açılamadı: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Flatpak-info geçici dosyası açılamadı: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Uygulamaları adlandırılmış uygulamadan ilklendir" + +#: common/flatpak-run.c:2226 +#, fuzzy +msgid "Failed to add architecture to seccomp filter" +msgstr "Geçici dosyaya yazılamadı" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Dışa aktarılmış dosyadan okunamadı" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Geçersiz pid %s" + +#: common/flatpak-run.c:2828 #, fuzzy, c-format msgid "ldconfig failed, exit status %d" msgstr "apply_extra betiği başarısız oldu" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "%s ad alanı açılamadı: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Çok fazla argüman" + +#: common/flatpak-transaction.c:1347 +#, fuzzy, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Uyarı: İlişkili referansları ararken sorun: %s\n" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Uygulama %s dal %s yüklenmemiş" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Uygulama %s dal %s yüklenmemiş" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Uzak %s devredışı, %s güncellemesi yok sayılıyor" + +#: common/flatpak-transaction.c:1583 +#, fuzzy, c-format +msgid "%s is already installed" +msgstr "%s değişikliği %s zaten yüklü" + +#: common/flatpak-transaction.c:1586 +#, fuzzy, c-format +msgid "%s is already installed from remote %s" +msgstr "%s değişikliği %s zaten yüklü" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Geçersiz pid %s" + +#: common/flatpak-transaction.c:1787 +#, fuzzy, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "'%s' için ek üst veri güncellenirken hata: %s\n" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, fuzzy, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "%s için ek üst veri güncellenemedi" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Geçersiz pid %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "" + +#: common/flatpak-utils.c:638 #, fuzzy, c-format msgid "Migrating %s to %s\n" msgstr "Güncelleniyor: %2$s'ten %1$s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, 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 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Çok fazla argüman" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Bir uygulamayı veya çalışma ortamını imzala" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Geçersiz dbus ismi %s\n" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Geçersiz pid %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "'%s' geçerli bir dal ismi değil: %s" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Geçersiz pid %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Ek veri kaynağı yok" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "" + +#: common/flatpak-utils.c:3716 +#, fuzzy, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: common/flatpak-utils.c:3721 +#, fuzzy, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Hata: %2$s'i %1$s başarılamadı: %3$s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "" + +#: common/flatpak-utils.c:3926 +#, fuzzy, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Appstream uzak %s için güncelleniyor\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Ek veri için geçersiz sağlama toplamı" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, fuzzy, c-format msgid "Downloading: %s/%s" msgstr "İndirme boyutu" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, fuzzy, c-format msgid "Downloading extra data: %s/%s" msgstr "İndirme boyutu" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, fuzzy, c-format msgid "Downloading files: %d/%d %s" msgstr "İndirme boyutu" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s daha üst bir flatpak versiyonu gerektiriyor (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2876,12 +3949,46 @@ msgid "Update appstream" msgstr "Appstream'i güncelle" -#~ msgid "No remote %s" -#~ msgstr "%s uzak yok" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Ek veri uri'si %s için geçersiz sha256 " + +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Ek veri için geçersiz sha256" + +#~ msgid "Add OCI registry" +#~ msgstr "OCI sicili ekle" + +#~ msgid "Installing: %s\n" +#~ msgstr "Yükleniyor: %s\n" + +#, fuzzy +#~ msgid "Found in remote %s\n" +#~ msgstr "Birkaç farklı uzakta bulundu:\n" + +#~ msgid "Found in remote %s, do you want to install it?" +#~ msgstr "Uzak %s'te bulundu, yüklemek ister misiniz?" + +#~ msgid "Found in several remotes:\n" +#~ msgstr "Birkaç farklı uzakta bulundu:\n" + +#~ 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" + +#~ msgid "%s already installed, skipping\n" +#~ msgstr "%s zaten yüklü, atlanıyor\n" + +#~ msgid "One or more operations failed" +#~ msgstr "Bir veya daha fazla seçenek başarılamadı" #, fuzzy -#~ msgid "Search only user installations" -#~ msgstr "Kullanıcı yüklemelerini göster" +#~ msgid "No ref information available in repository" +#~ msgstr "Arşiv hakkında genel bilgileri yazdır" + +#~ msgid "Remote title not set" +#~ msgstr "Uzak başlığı ayarlı değil" + +#~ msgid "Remote default-branch not set" +#~ msgstr "Uzak öntanımlı dalı ayarlı değil" #, fuzzy #~ msgid "Search only system-wide installations" @@ -2897,9 +4004,6 @@ #~ msgid "Failed to unlink temporary file" #~ msgstr "Geçici dosya bağı koparılamadı" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Geçici dosyaya yazılamadı" - #, fuzzy #~ msgid "Installing %s" #~ msgstr "Yükleniyor: %s\n" Binary files /tmp/tmp2Y3Rkd/7u3b6wYhCg/flatpak-0.11.3/po/uk.gmo and /tmp/tmp2Y3Rkd/kSilmuZ1cb/flatpak-1.0.7/po/uk.gmo differ diff -Nru flatpak-0.11.3/po/uk.po flatpak-1.0.7/po/uk.po --- flatpak-0.11.3/po/uk.po 2018-02-19 13:20:14.000000000 +0000 +++ flatpak-1.0.7/po/uk.po 2019-02-11 12:42:42.000000000 +0000 @@ -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: 2018-02-19 14:20+0100\n" -"PO-Revision-Date: 2017-10-23 20:15+0200\n" +"POT-Creation-Date: 2019-02-11 13:42+0100\n" +"PO-Revision-Date: 2018-07-01 15:32+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -19,213 +19,6 @@ "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 2.0\n" -#: app/flatpak-builtins-add-remote.c:57 -msgid "Do nothing if the provided remote exists" -msgstr "Нічого не робити, якщо вказане сховище існує" - -#: app/flatpak-builtins-add-remote.c:58 -msgid "LOCATION specifies a configuration file, not the repo location" -msgstr "МІСЦЕ вказує на файл налаштувань, а не на розташування сховища" - -#: app/flatpak-builtins-add-remote.c:63 -msgid "Enable GPG verification" -msgstr "Увімкнути перевірку GPG" - -#: app/flatpak-builtins-add-remote.c:64 -msgid "Mark the remote as enumerate" -msgstr "Позначити віддалене сховище як таке, яке входить до переліку" - -#: app/flatpak-builtins-add-remote.c:65 -msgid "Mark the remote as used for dependencies" -msgstr "" -"Позначити віддалене сховище як таке, що використовується для залежностей" - -#: app/flatpak-builtins-add-remote.c:66 -msgid "Set a new url" -msgstr "Встановити нову адресу" - -#: 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 "АДРЕСА" - -#: app/flatpak-builtins-add-remote.c:67 -msgid "Enable the remote" -msgstr "Увімкнути віддалене сховище" - -#: app/flatpak-builtins-add-remote.c:68 -msgid "Update extra metadata from the summary file" -msgstr "Оновити додаткові метадані з файла резюме" - -#: app/flatpak-builtins-add-remote.c:73 -msgid "Disable GPG verification" -msgstr "Вимкнути перевірку GPG" - -#: app/flatpak-builtins-add-remote.c:74 -msgid "Mark the remote as don't enumerate" -msgstr "Позначити віддалене сховище як таке, яке не входить до переліку" - -#: app/flatpak-builtins-add-remote.c:75 -msgid "Mark the remote as don't use for deps" -msgstr "" -"Позначити віддалене сховище як таке, яке не використовується для залежностей" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "Set priority (default 1, higher is more prioritized)" -msgstr "" -"Встановити пріоритетність (типово 1, більше значення — вища пріоритетність)" - -#: app/flatpak-builtins-add-remote.c:76 -msgid "PRIORITY" -msgstr "ПРІОРИТЕТНІСТЬ" - -#: app/flatpak-builtins-add-remote.c:77 -msgid "A nice name to use for this remote" -msgstr "Зрозуміла назва для використання цього віддаленого сховища" - -#: app/flatpak-builtins-add-remote.c:77 app/flatpak-builtins-repo-update.c:53 -msgid "TITLE" -msgstr "ЗАГОЛОВОК" - -#: app/flatpak-builtins-add-remote.c:78 -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 -msgid "BRANCH" -msgstr "ГІЛКА" - -#: 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 "Ідентифікатор збірки" - -#: app/flatpak-builtins-add-remote.c:80 app/flatpak-builtins-repo-update.c:56 -msgid "COLLECTION-ID" -msgstr "ІД-ЗБІРКИ" - -#: app/flatpak-builtins-add-remote.c:82 -msgid "Import GPG key from FILE (- for stdin)" -msgstr "Імпортувати ключ GPG з ФАЙЛА (- — імпортувати із stdin)" - -#: 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 "ФАЙЛ" - -#: app/flatpak-builtins-add-remote.c:83 -msgid "Disable the remote" -msgstr "Вимкнути віддалене сховище" - -#: app/flatpak-builtins-add-remote.c:84 -msgid "Add OCI registry" -msgstr "Додати реєстр OCI" - -#: 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:233 -#, c-format -msgid "Can't load file %s: %s\n" -msgstr "Не вдалося завантажити файл %s: %s\n" - -#: app/flatpak-builtins-add-remote.c:241 -msgid "Invalid file format" -msgstr "Некоректний формат файла" - -#: app/flatpak-builtins-add-remote.c:249 -#, c-format -msgid "Invalid version %s, only 1 supported" -msgstr "Некоректна версія %s, передбачено підтримку лише версії 1" - -#: app/flatpak-builtins-add-remote.c:293 -msgid "Invalid gpg key" -msgstr "Некоректний ключ gpg" - -#: app/flatpak-builtins-add-remote.c:320 -msgid "NAME LOCATION - Add a remote repository" -msgstr "НАЗВА РОЗТАШУВАННЯ - Додати віддалене сховище" - -#: 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: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: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: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: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: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:348 -msgid "GPG verification is required if collections are enabled" -msgstr "Якщо увімкнено збірку, слід пройти перевірку GPG" - -#. Do nothing -#: app/flatpak-builtins-add-remote.c:363 -#, c-format -msgid "Remote %s already exists" -msgstr "Запис віддаленого сховища %s вже існує" - -#: app/flatpak-builtins-add-remote.c:371 -msgid "No url specified in flatpakrepo file" -msgstr "У файлі flatpakrepo не вказано адреси" - -#: 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:464 -msgid "NAME - Modify a remote repository" -msgstr "НАЗВА - Змінити віддалене сховище" - -#: app/flatpak-builtins-add-remote.c:474 -msgid "Remote NAME must be specified" -msgstr "Має бути вказано НАЗВУ віддаленого сховища" - -#: 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:488 -#, c-format -msgid "Error updating extra metadata for '%s': %s\n" -msgstr "Помилка під час оновлення додаткових метаданих для «%s»: %s\n" - -#: 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:56 msgid "Export runtime instead of app" msgstr "Експортувати середовище виконання замість програми" @@ -235,12 +28,13 @@ msgstr "Архітектура для пакунка" #: 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: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 +#: app/flatpak-builtins-build-export.c:56 app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-create-usb.c:44 +#: app/flatpak-builtins-info.c:54 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-list.c:46 app/flatpak-builtins-make-current.c:38 +#: app/flatpak-builtins-remote-info.c:50 app/flatpak-builtins-remote-ls.c:49 +#: app/flatpak-builtins-run.c:58 app/flatpak-builtins-search.c:35 +#: app/flatpak-builtins-uninstall.c:50 app/flatpak-builtins-update.c:53 msgid "ARCH" msgstr "АРХ" @@ -248,6 +42,14 @@ msgid "Url for repo" msgstr "Адреса сховища" +#: app/flatpak-builtins-build-bundle.c:58 +#: app/flatpak-builtins-build-bundle.c:59 +#: app/flatpak-builtins-build-update-repo.c:52 +#: app/flatpak-builtins-remote-list.c:70 +#: app/flatpak-builtins-remote-modify.c:57 +msgid "URL" +msgstr "АДРЕСА" + #: app/flatpak-builtins-build-bundle.c:59 msgid "Url for runtime flatpakrepo file" msgstr "Адреса файла flatpakrepo середовища виконання" @@ -256,6 +58,14 @@ msgid "Add GPG key from FILE (- for stdin)" msgstr "Додати ключ GPG з ФАЙЛА (- якщо дані слід взяти з stdin)" +#: app/flatpak-builtins-build-bundle.c:60 app/flatpak-builtins-build.c:54 +#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-update-repo.c:57 +#: app/flatpak-builtins-install.c:67 app/flatpak-builtins-remote-add.c:67 +#: app/flatpak-builtins-remote-modify.c:71 +msgid "FILE" +msgstr "ФАЙЛ" + #: app/flatpak-builtins-build-bundle.c:61 msgid "Export oci image instead of flatpak bundle" msgstr "Експортувати образ OCI замість пакунка flatpak" @@ -265,39 +75,42 @@ msgstr "Ідентифікатор ключа GPG для підписування образу OCI" #: 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-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-import-bundle.c:46 -#: app/flatpak-builtins-build-sign.c:43 app/flatpak-builtins-repo-update.c:60 +#: app/flatpak-builtins-build-sign.c:43 +#: app/flatpak-builtins-build-update-repo.c:58 msgid "KEY-ID" msgstr "ІД КЛЮЧА" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "GPG Homedir to use when looking for keyrings" msgstr "Домашній каталог GPG, яким слід користуватися для пошуку сховищ ключів" #: 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-commit-from.c:60 +#: app/flatpak-builtins-build-export.c:65 #: app/flatpak-builtins-build-import-bundle.c:47 -#: app/flatpak-builtins-build-sign.c:44 app/flatpak-builtins-repo-update.c:61 +#: app/flatpak-builtins-build-sign.c:44 +#: app/flatpak-builtins-build-update-repo.c:59 msgid "HOMEDIR" msgstr "ДОМАШНІЙ-КАТАЛОГ" #: app/flatpak-builtins-build-bundle.c:64 msgid "OSTree commit to create a delta bundle from" -msgstr "" +msgstr "Внесок OSTree для створення пакунка відмінностей від" -#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-info-remote.c:49 +#: app/flatpak-builtins-build-bundle.c:64 app/flatpak-builtins-remote-info.c:51 #: app/flatpak-builtins-update.c:54 msgid "COMMIT" msgstr "COMMIT" -#: app/flatpak-builtins-build-bundle.c:451 +#: app/flatpak-builtins-build-bundle.c:549 msgid "" "LOCATION FILENAME NAME [BRANCH] - Create a single file bundle from a local " "repository" @@ -305,25 +118,46 @@ "РОЗТАШУВАННЯ НАЗВА_ФАЙЛА НАЗВА [ГІЛКА] - Створити пакунок з одного файла на " "основі локального сховища" -#: app/flatpak-builtins-build-bundle.c:458 +#: app/flatpak-builtins-build-bundle.c:556 msgid "LOCATION, FILENAME and NAME must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ, НАЗВУ_ФАЙЛА та НАЗВУ" -#: 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 +#: app/flatpak-builtins-build-bundle.c:559 +#: app/flatpak-builtins-build-export.c:682 +#: app/flatpak-builtins-build-import-bundle.c:183 +#: app/flatpak-builtins-build-init.c:207 app/flatpak-builtins-build-sign.c:74 +#: 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:141 +#: app/flatpak-builtins-install.c:132 app/flatpak-builtins-install.c:187 +#: app/flatpak-builtins-list.c:322 app/flatpak-builtins-make-current.c:72 +#: app/flatpak-builtins-override.c:73 +#: app/flatpak-builtins-permission-list.c:157 +#: app/flatpak-builtins-permission-remove.c:94 +#: app/flatpak-builtins-remote-add.c:311 +#: app/flatpak-builtins-remote-delete.c:66 +#: app/flatpak-builtins-remote-list.c:61 app/flatpak-builtins-remote-ls.c:112 +msgid "Too many arguments" +msgstr "Забагато аргументів" + +#: app/flatpak-builtins-build-bundle.c:574 +#: app/flatpak-builtins-build-commit-from.c:270 +#: app/flatpak-builtins-build-commit-from.c:283 +#: app/flatpak-builtins-build-import-bundle.c:192 #, c-format msgid "'%s' is not a valid repository" msgstr "«%s» не є коректним сховищем" -#: app/flatpak-builtins-build-bundle.c:488 app/flatpak-builtins-build-sign.c:86 +#: app/flatpak-builtins-build-bundle.c:586 app/flatpak-builtins-build-sign.c:86 +#: common/flatpak-dir.c:9601 common/flatpak-utils.c:1287 #, c-format msgid "'%s' is not a valid name: %s" msgstr "«%s» не є коректною назвою: %s" -#: app/flatpak-builtins-build-bundle.c:491 -#: app/flatpak-builtins-build-export.c:699 app/flatpak-builtins-build-sign.c:89 +#: app/flatpak-builtins-build-bundle.c:589 +#: app/flatpak-builtins-build-export.c:703 app/flatpak-builtins-build-sign.c:89 +#: common/flatpak-dir.c:9607 common/flatpak-utils.c:1293 #, c-format msgid "'%s' is not a valid branch name: %s" msgstr "«%s» не є коректною назвою гілки: %s" @@ -334,7 +168,7 @@ #: app/flatpak-builtins-build.c:50 msgid "Make destination readonly" -msgstr "" +msgstr "Зробити призначення придатним лише для читання" #: app/flatpak-builtins-build.c:51 msgid "Add bind mount" @@ -349,7 +183,7 @@ msgstr "Почати збирання у цьому каталозі" #: app/flatpak-builtins-build.c:52 app/flatpak-builtins-build.c:53 -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "DIR" msgstr "КАТАЛОГ" @@ -357,11 +191,11 @@ msgid "Where to look for custom sdk dir (defaults to 'usr')" msgstr "Місце, де слід шукати нетиповий каталог sdk (типовим є каталог usr)" -#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:60 +#: app/flatpak-builtins-build.c:54 app/flatpak-builtins-build-export.c:61 msgid "Use alternative file for the metadata" msgstr "Використовувати альтернативний файл для метаданих" -#: app/flatpak-builtins-build.c:55 +#: app/flatpak-builtins-build.c:55 app/flatpak-builtins-run.c:73 msgid "Kill processes when the parent process dies" msgstr "Вбивати процеси, якщо завершив роботу батьківський процес" @@ -369,376 +203,428 @@ msgid "Export application homedir directory to build" msgstr "Експортувати домашній каталог програми до каталогу збирання" -#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:58 +#: app/flatpak-builtins-build.c:57 app/flatpak-builtins-run.c:64 msgid "Log session bus calls" msgstr "Записувати до журналу виклики до каналу сеансу" -#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:59 +#: app/flatpak-builtins-build.c:58 app/flatpak-builtins-run.c:65 msgid "Log system bus calls" msgstr "Записувати до журналу виклики до каналу системи" -#: app/flatpak-builtins-build.c:126 +#: app/flatpak-builtins-build.c:206 msgid "DIRECTORY [COMMAND [args...]] - Build in directory" msgstr "КАТАЛОГ [КОМАНДА [аргументи...]] - Зібрати у каталозі" -#: app/flatpak-builtins-build.c:149 app/flatpak-builtins-build-finish.c:533 +#: app/flatpak-builtins-build.c:229 app/flatpak-builtins-build-finish.c:637 msgid "DIRECTORY must be specified" msgstr "Слід вказати КАТАЛОГ" -#: app/flatpak-builtins-build.c:160 app/flatpak-builtins-build-export.c:721 +#: app/flatpak-builtins-build.c:240 app/flatpak-builtins-build-export.c:725 #, c-format msgid "Build directory %s not initialized, use flatpak build-init" msgstr "" "Каталог збирання %s не ініціалізовано, скористайтеся командою flatpak build-" "init" -#: app/flatpak-builtins-build.c:179 +#: app/flatpak-builtins-build.c:259 msgid "metadata invalid, not application or runtime" msgstr "некоректні метадані, немає програми або середовища виконання" -#: app/flatpak-builtins-build.c:283 +#: app/flatpak-builtins-build.c:386 #, c-format msgid "No extension point matching %s in %s" msgstr "Немає точки розширення, яка відповідає %s у %s" -#: app/flatpak-builtins-build.c:433 +#: app/flatpak-builtins-build.c:552 #, c-format msgid "Missing '=' in bind mount option '%s'" msgstr "Пропущено «=» у параметрі монтування прив’язки «%s»" -#: app/flatpak-builtins-build.c:462 common/flatpak-run.c:3038 +#: app/flatpak-builtins-build.c:588 common/flatpak-run.c:3191 msgid "Unable to start app" msgstr "Не вдалося запустити програму" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "Source repo dir" msgstr "Каталог сховища-джерела" -#: app/flatpak-builtins-build-commit-from.c:47 +#: app/flatpak-builtins-build-commit-from.c:51 msgid "SRC-REPO" msgstr "СХОВ-ДЖ" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "Source repo ref" msgstr "Посилання сховища-джерела" -#: app/flatpak-builtins-build-commit-from.c:48 +#: app/flatpak-builtins-build-commit-from.c:52 msgid "SRC-REF" msgstr "ПОС-ДЖ" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "One line subject" msgstr "Тема у один рядок" -#: app/flatpak-builtins-build-commit-from.c:51 -#: app/flatpak-builtins-build-export.c:53 +#: app/flatpak-builtins-build-commit-from.c:55 +#: app/flatpak-builtins-build-export.c:54 msgid "SUBJECT" msgstr "SUBJECT" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "Full description" msgstr "Повний опис" -#: app/flatpak-builtins-build-commit-from.c:52 -#: app/flatpak-builtins-build-export.c:54 +#: app/flatpak-builtins-build-commit-from.c:56 +#: app/flatpak-builtins-build-export.c:55 msgid "BODY" msgstr "BODY" -#: app/flatpak-builtins-build-commit-from.c:53 -#: app/flatpak-builtins-build-export.c:57 +#: app/flatpak-builtins-build-commit-from.c:57 +#: app/flatpak-builtins-build-export.c:58 #: app/flatpak-builtins-build-import-bundle.c:48 msgid "Update the appstream branch" msgstr "Оновити гілку appstream" -#: app/flatpak-builtins-build-commit-from.c:54 -#: app/flatpak-builtins-build-export.c:58 +#: app/flatpak-builtins-build-commit-from.c:58 +#: app/flatpak-builtins-build-export.c:59 #: app/flatpak-builtins-build-import-bundle.c:49 msgid "Don't update the summary" msgstr "Не оновлювати резюме" -#: app/flatpak-builtins-build-commit-from.c:55 -#: app/flatpak-builtins-build-export.c:61 +#: app/flatpak-builtins-build-commit-from.c:59 +#: app/flatpak-builtins-build-export.c:62 #: 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 "Ідентифікатор ключа GPG для підписування внеску" -#: app/flatpak-builtins-build-commit-from.c:228 +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "Mark build as end-of-life" +msgstr "Позначити збірку як таку, термін підтримки якої вичерпано" + +#: app/flatpak-builtins-build-commit-from.c:61 +#: app/flatpak-builtins-build-export.c:66 +msgid "REASON" +msgstr "ПРИЧИНА" + +#: app/flatpak-builtins-build-commit-from.c:62 +msgid "Override the timestamp of the commit (NOW for current time)" +msgstr "Перевизначити часову позначку внеску (NOW — поточний момент)" + +#: app/flatpak-builtins-build-commit-from.c:62 +#: app/flatpak-builtins-build-export.c:67 +msgid "TIMESTAMP" +msgstr "ЧАСОВА_ПОЗНАЧКА" + +#: app/flatpak-builtins-build-commit-from.c:239 msgid "DST-REPO [DST-REF]... - Make a new commit based on existing commit(s)" msgstr "СХОВ-ПР [ПОС-ПР]... - створити новий внесок на основі наявних внесків" -#: app/flatpak-builtins-build-commit-from.c:235 +#: app/flatpak-builtins-build-commit-from.c:246 msgid "DST-REPO must be specified" msgstr "Слід вказати СХОВ-ПР" -#: app/flatpak-builtins-build-commit-from.c:243 +#: app/flatpak-builtins-build-commit-from.c:254 msgid "" "If --src-repo is not specified, exactly one destination ref must be specified" msgstr "" "Якщо не вказано --src-repo, має бути вказано точно одне посилання призначення" -#: app/flatpak-builtins-build-commit-from.c:246 +#: app/flatpak-builtins-build-commit-from.c:257 msgid "" "If --src-ref is specified, exactly one destination ref must be specified" msgstr "" "Якщо вказано --src-ref, має бути вказано точно одне посилання призначення" -#: app/flatpak-builtins-build-commit-from.c:249 +#: app/flatpak-builtins-build-commit-from.c:260 msgid "Either --src-repo or --src-ref must be specified." msgstr "Слід вказати або --src-repo, або --src-ref." -#: app/flatpak-builtins-build-commit-from.c:402 +#: app/flatpak-builtins-build-commit-from.c:265 +#: app/flatpak-builtins-build-export.c:906 +#, c-format +msgid "Could not parse '%s'" +msgstr "Не вдалося обробити «%s»" + +#: app/flatpak-builtins-build-commit-from.c:425 msgid "Can't commit from partial source commit." msgstr "Неможливо створити внесок на основі часткового внеску до джерела." -#: app/flatpak-builtins-build-commit-from.c:407 +#: app/flatpak-builtins-build-commit-from.c:430 #, c-format msgid "%s: no change\n" msgstr "%s: без змін\n" -#: app/flatpak-builtins-build-export.c:55 +#: app/flatpak-builtins-build-export.c:56 msgid "Architecture to export for (must be host compatible)" msgstr "Архітектура експортування (має бути сумісною із основною системою)" -#: app/flatpak-builtins-build-export.c:56 +#: app/flatpak-builtins-build-export.c:57 msgid "Commit runtime (/usr), not /app" msgstr "Записати до середовища виконання (/usr), а не до /app" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "Use alternative directory for the files" msgstr "Використовувати альтернативний каталог для файлів" -#: app/flatpak-builtins-build-export.c:59 +#: app/flatpak-builtins-build-export.c:60 msgid "SUBDIR" msgstr "ПІДКАТАЛОГ" -#: app/flatpak-builtins-build-export.c:62 +#: app/flatpak-builtins-build-export.c:63 msgid "Files to exclude" msgstr "Файли для виключення" -#: app/flatpak-builtins-build-export.c:62 #: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "PATTERN" msgstr "ЗРАЗОК" -#: app/flatpak-builtins-build-export.c:63 +#: app/flatpak-builtins-build-export.c:64 msgid "Excluded files to include" msgstr "Виключені файли для включення" -#: app/flatpak-builtins-build-export.c:65 +#: app/flatpak-builtins-build-export.c:67 msgid "Override the timestamp of the commit" msgstr "Перевизначити часову позначку внеску" -#: app/flatpak-builtins-build-export.c:65 -msgid "ISO-8601-TIMESTAMP" -msgstr "ЧАСОВА-ПОЗНАЧКА-ISO-8601" +#: app/flatpak-builtins-build-export.c:68 +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-list.c:71 +#: app/flatpak-builtins-remote-modify.c:70 +msgid "Collection ID" +msgstr "Ідентифікатор збірки" -#: app/flatpak-builtins-build-export.c:341 +#: app/flatpak-builtins-build-export.c:345 #, c-format msgid "WARNING: Error running desktop-file-validate: %s\n" msgstr "" "ПОПЕРЕДЖЕННЯ: помилка під час спроби виконати desktop-file-validate: %s\n" -#: app/flatpak-builtins-build-export.c:349 +#: app/flatpak-builtins-build-export.c:353 #, c-format msgid "WARNING: Error reading from desktop-file-validate: %s\n" msgstr "" "ПОПЕРЕДЖЕННЯ: помилка під час спроби прочитати дані від desktop-file-" "validate: %s\n" -#: app/flatpak-builtins-build-export.c:355 +#: app/flatpak-builtins-build-export.c:359 #, c-format msgid "WARNING: Failed to validate desktop file %s: %s\n" msgstr "ПОПЕРЕДЖЕННЯ: не вдалося перевірити файл desktop %s: %s\n" -#: app/flatpak-builtins-build-export.c:370 +#: app/flatpak-builtins-build-export.c:374 #, c-format msgid "WARNING: Can't find Exec key in %s: %s\n" msgstr "ПОПЕРЕДЖЕННЯ: не вдалося знайти ключ Exec у %s: %s\n" -#: app/flatpak-builtins-build-export.c:378 -#: app/flatpak-builtins-build-export.c:475 +#: app/flatpak-builtins-build-export.c:382 +#: app/flatpak-builtins-build-export.c:480 #, c-format msgid "WARNING: Binary not found for Exec line in %s: %s\n" msgstr "ПОПЕРЕДЖЕННЯ: не знайдено виконуваного файла для рядка Exec у %s: %s\n" -#: app/flatpak-builtins-build-export.c:385 +#: app/flatpak-builtins-build-export.c:389 #, c-format msgid "WARNING: Icon not matching app id in %s: %s\n" msgstr "" "ПОПЕРЕДЖЕННЯ: піктограма не відповідає ідентифікатору програми у %s: %s\n" -#: app/flatpak-builtins-build-export.c:413 +#: app/flatpak-builtins-build-export.c:417 #, c-format msgid "WARNING: Icon referenced in desktop file but not exported: %s\n" msgstr "" "ПОПЕРЕДЖЕННЯ: у файлі desktop є посилання на піктограму, але її не " "експортовано: %s\n" -#: app/flatpak-builtins-build-export.c:551 +#: app/flatpak-builtins-build-export.c:557 #, c-format msgid "Invalid uri type %s, only http/https supported" msgstr "Некоректний тип адреси %s, передбачено підтримку лише http/https" -#: app/flatpak-builtins-build-export.c:569 +#: app/flatpak-builtins-build-export.c:575 #, c-format msgid "Unable to find basename in %s, specify a name explicitly" msgstr "Не вдалося знайти базову назву у %s, вкажіть назву явним чином" -#: app/flatpak-builtins-build-export.c:578 +#: app/flatpak-builtins-build-export.c:584 msgid "No slashes allowed in extra data name" msgstr "У назві додаткових даних не можна використовувати навскісні риски" -#: app/flatpak-builtins-build-export.c:590 +#: app/flatpak-builtins-build-export.c:596 #, c-format msgid "Invalid format for sha256 checksum: '%s'" msgstr "Некоректний формат контрольної суми sha256: «%s»" -#: app/flatpak-builtins-build-export.c:600 +#: app/flatpak-builtins-build-export.c:606 msgid "Extra data sizes of zero not supported" msgstr "Підтримки нульових розмірів додаткових даних не передбачено" -#: app/flatpak-builtins-build-export.c:662 +#: app/flatpak-builtins-build-export.c:668 msgid "" "LOCATION DIRECTORY [BRANCH] - Create a repository from a build directory" msgstr "" "РОЗТАШУВАННЯ КАТАЛОГ [ГІЛКА] - Створити сховище на основі каталогу збирання" -#: app/flatpak-builtins-build-export.c:670 +#: app/flatpak-builtins-build-export.c:676 msgid "LOCATION and DIRECTORY must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ і КАТАЛОГ" -#: app/flatpak-builtins-build-export.c:738 -#: app/flatpak-builtins-build-finish.c:561 +#: app/flatpak-builtins-build-export.c:697 +#: app/flatpak-builtins-remote-add.c:315 +#, c-format +msgid "‘%s’ is not a valid collection ID: %s" +msgstr "«%s» не є коректним ідентифікатором збірки: %s" + +#: app/flatpak-builtins-build-export.c:742 +#: app/flatpak-builtins-build-finish.c:665 msgid "No name specified in the metadata" msgstr "У метаданих не вказано назви" -#: app/flatpak-builtins-build-export.c:976 +#: app/flatpak-builtins-build-export.c:972 #, c-format msgid "Commit: %s\n" msgstr "Внесок: %s\n" -#: app/flatpak-builtins-build-export.c:977 +#: app/flatpak-builtins-build-export.c:973 #, c-format msgid "Metadata Total: %u\n" msgstr "Загалом метаданих: %u\n" -#: app/flatpak-builtins-build-export.c:978 +#: app/flatpak-builtins-build-export.c:974 #, c-format msgid "Metadata Written: %u\n" msgstr "Записано метаданих: %u\n" -#: app/flatpak-builtins-build-export.c:979 +#: app/flatpak-builtins-build-export.c:975 #, c-format msgid "Content Total: %u\n" msgstr "Загалом даних: %u\n" -#: app/flatpak-builtins-build-export.c:980 +#: app/flatpak-builtins-build-export.c:976 #, c-format msgid "Content Written: %u\n" msgstr "Записано даних: %u\n" -#: app/flatpak-builtins-build-export.c:981 +#: app/flatpak-builtins-build-export.c:977 msgid "Content Bytes Written:" msgstr "Записано байтів даних:" -#: app/flatpak-builtins-build-finish.c:48 +#: app/flatpak-builtins-build-finish.c:51 msgid "Command to set" msgstr "Команда для встановлення" -#: app/flatpak-builtins-build-finish.c:48 app/flatpak-builtins-run.c:53 -#: app/flatpak-main.c:166 +#: app/flatpak-builtins-build-finish.c:51 app/flatpak-builtins-run.c:59 +#: app/flatpak-main.c:178 msgid "COMMAND" msgstr "КОМАНДА" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "Flatpak version to require" msgstr "Версія Flatpak, яку слід вимагати" -#: app/flatpak-builtins-build-finish.c:49 +#: app/flatpak-builtins-build-finish.c:52 msgid "MAJOR.MINOR.MICRO" msgstr "ОСНОВНА.ДРУГОРЯДНА.ТРЕТЬОРЯДНА" -#: app/flatpak-builtins-build-finish.c:50 +#: app/flatpak-builtins-build-finish.c:53 msgid "Don't process exports" msgstr "Не обробляти експортування" -#: app/flatpak-builtins-build-finish.c:51 +#: app/flatpak-builtins-build-finish.c:54 msgid "Extra data info" msgstr "Відомості щодо додаткових даних" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "Add extension point info" msgstr "Додати дані щодо точки розширення" -#: app/flatpak-builtins-build-finish.c:52 +#: app/flatpak-builtins-build-finish.c:55 app/flatpak-builtins-build-init.c:62 msgid "NAME=VARIABLE[=VALUE]" msgstr "НАЗВА=ЗМІННА[=ЗНАЧЕННЯ]" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:56 +msgid "Remove extension point info" +msgstr "Вилучити дані щодо точки розширення" + +#: app/flatpak-builtins-build-finish.c:56 app/flatpak-main.c:155 +msgid "NAME" +msgstr "НАЗВА" + +#: app/flatpak-builtins-build-finish.c:57 msgid "Set extension priority (only for extensions)" msgstr "Встановити пріоритетність розширення (лише для розширень)" -#: app/flatpak-builtins-build-finish.c:53 +#: app/flatpak-builtins-build-finish.c:57 msgid "0" msgstr "0" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "Change the sdk used for the app" msgstr "Змінити sdk, що використовується для програми" -#: app/flatpak-builtins-build-finish.c:54 +#: app/flatpak-builtins-build-finish.c:58 msgid "SDK" msgstr "SDK" -#: app/flatpak-builtins-build-finish.c:55 +#: app/flatpak-builtins-build-finish.c:59 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-build-finish.c:59 app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-run.c:62 msgid "RUNTIME" msgstr "СЕРЕДОВИЩЕ ВИКОНАННЯ" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "Set generic metadata option" msgstr "Встановити параметр загальних метаданих" -#: app/flatpak-builtins-build-finish.c:56 +#: app/flatpak-builtins-build-finish.c:60 msgid "GROUP=KEY[=VALUE]" msgstr "ГРУПА=КЛЮЧ[=ЗНАЧЕННЯ]" -#: app/flatpak-builtins-build-finish.c:139 +#: app/flatpak-builtins-build-finish.c:61 +#, fuzzy +msgid "Don't inherit permissions from runtime" +msgstr "Відкликати від програми права доступу до запису" + +#: app/flatpak-builtins-build-finish.c:155 +#, c-format +msgid "Not exporting %s, wrong extension\n" +msgstr "Не експортуємо %s, помилковий суфікс\n" + +#: app/flatpak-builtins-build-finish.c:163 #, c-format -msgid "Not exporting %s, wrong prefix\n" -msgstr "Не експортуємо %s, помилковий префікс\n" +msgid "Not exporting %s, non-allowed export filename\n" +msgstr "Не експортуємо %s, заборонена назва файла експортування\n" -#: app/flatpak-builtins-build-finish.c:143 +#: app/flatpak-builtins-build-finish.c:167 #, c-format msgid "Exporting %s\n" msgstr "Експортуємо %s\n" -#: app/flatpak-builtins-build-finish.c:384 +#: app/flatpak-builtins-build-finish.c:432 msgid "More than one executable found\n" msgstr "Знайдено декілька виконуваних файлів\n" -#: app/flatpak-builtins-build-finish.c:395 +#: app/flatpak-builtins-build-finish.c:443 #, c-format msgid "Using %s as command\n" msgstr "Використовуємо як команду %s\n" -#: app/flatpak-builtins-build-finish.c:400 +#: app/flatpak-builtins-build-finish.c:448 msgid "No executable found\n" msgstr "Не знайдено виконуваного файла\n" -#: app/flatpak-builtins-build-finish.c:433 +#: app/flatpak-builtins-build-finish.c:530 #, c-format msgid "Too few elements in --extra-data argument %s" msgstr "Замало елементів у аргументі --extra-data %s" -#: app/flatpak-builtins-build-finish.c:465 +#: app/flatpak-builtins-build-finish.c:562 #, c-format msgid "" "Too few elements in --metadata argument %s, format should be " @@ -747,7 +633,8 @@ "Замало елементів у аргументі --metadata %s; слід використовувати формат " "ГРУПА=КЛЮЧ[=ЗНАЧЕННЯ]]" -#: app/flatpak-builtins-build-finish.c:480 +#: app/flatpak-builtins-build-finish.c:584 +#: app/flatpak-builtins-build-init.c:417 #, c-format msgid "" "Too few elements in --extension argument %s, format should be " @@ -756,21 +643,21 @@ "Замало елементів у аргументі --extension %s, слід вказувати у форматі " "НАЗВА=ЗМІННА[=ЗНАЧЕННЯ]" -#: app/flatpak-builtins-build-finish.c:523 +#: app/flatpak-builtins-build-finish.c:627 msgid "DIRECTORY - Finalize a build directory" msgstr "КАТАЛОГ — завершити обробку каталогу збирання" -#: app/flatpak-builtins-build-finish.c:545 +#: app/flatpak-builtins-build-finish.c:649 #, c-format msgid "Build directory %s not initialized" msgstr "Каталог збирання %s не ініціалізовано" -#: app/flatpak-builtins-build-finish.c:566 +#: app/flatpak-builtins-build-finish.c:670 #, c-format msgid "Build directory %s already finalized" msgstr "Каталог збирання %s вже завершено" -#: app/flatpak-builtins-build-finish.c:579 +#: app/flatpak-builtins-build-finish.c:683 msgid "Please review the exported files and the metadata\n" msgstr "Будь ласка, перегляньте експортовані файли і метадані\n" @@ -786,143 +673,151 @@ msgid "Import oci image instead of flatpak bundle" msgstr "Імпортувати образ OCI замість пакунка flatpak" -#: app/flatpak-builtins-build-import-bundle.c:82 +#: app/flatpak-builtins-build-import-bundle.c:83 #, c-format msgid "Ref '%s' not found in registry" msgstr "Посилання «%s» немає у реєстрі" -#: app/flatpak-builtins-build-import-bundle.c:91 +#: app/flatpak-builtins-build-import-bundle.c:92 msgid "Multiple images in registry, specify a ref with --ref" msgstr "У реєстрі декілька образів, вкажіть посилання за допомогою --ref" -#: app/flatpak-builtins-build-import-bundle.c:123 -#: app/flatpak-builtins-build-import-bundle.c:151 +#: app/flatpak-builtins-build-import-bundle.c:124 +#: app/flatpak-builtins-build-import-bundle.c:152 #, c-format msgid "Importing %s (%s)\n" msgstr "Імпортуємо %s (%s)\n" -#: app/flatpak-builtins-build-import-bundle.c:172 +#: app/flatpak-builtins-build-import-bundle.c:173 msgid "LOCATION FILENAME - Import a file bundle into a local repository" msgstr "" "РОЗТАШУВАННЯ НАЗВА_ФАЙЛА - Імпортувати файловий пакунок до локального сховища" -#: app/flatpak-builtins-build-import-bundle.c:179 +#: app/flatpak-builtins-build-import-bundle.c:180 msgid "LOCATION and FILENAME must be specified" msgstr "Слід вказати РОЗТАШУВАННЯ і НАЗВУ ФАЙЛА" -#: app/flatpak-builtins-build-init.c:49 app/flatpak-builtins-info.c:51 -#: app/flatpak-builtins-run.c:52 +#: app/flatpak-builtins-build-init.c:52 app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-run.c:58 msgid "Arch to use" msgstr "Архітектура, яку слід використовувати" -#: app/flatpak-builtins-build-init.c:50 +#: app/flatpak-builtins-build-init.c:53 msgid "Initialize var from named runtime" msgstr "Ініціалізувати змінну на основі іменованого середовища виконання" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "Initialize apps from named app" msgstr "Ініціалізувати програми з названої програми" -#: app/flatpak-builtins-build-init.c:51 +#: app/flatpak-builtins-build-init.c:54 msgid "APP" msgstr "ПРОГРАМА" -#: app/flatpak-builtins-build-init.c:52 +#: app/flatpak-builtins-build-init.c:55 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:55 app/flatpak-builtins-run.c:63 msgid "VERSION" msgstr "ВЕРСІЯ" -#: app/flatpak-builtins-build-init.c:53 +#: app/flatpak-builtins-build-init.c:56 msgid "Include this base extension" msgstr "Включити це базове розширення" -#: app/flatpak-builtins-build-init.c:53 app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:56 app/flatpak-builtins-build-init.c:61 msgid "EXTENSION" msgstr "РОЗШИРЕННЯ" -#: app/flatpak-builtins-build-init.c:54 +#: app/flatpak-builtins-build-init.c:57 +msgid "Extension tag to use if building extension" +msgstr "Мітка розширення, яку слід використати, якщо збирається розширення" + +#: app/flatpak-builtins-build-init.c:57 +msgid "EXTENSION_TAG" +msgstr "МІТКА_РОЗШИРЕННЯ" + +#: app/flatpak-builtins-build-init.c:58 msgid "Initialize /usr with a writable copy of the sdk" msgstr "Ініціалізувати /usr придатною до запису копією sdk" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "Specify the build type (app, runtime, extension)" msgstr "" "Вказати тип збирання (програма (app), середовище виконання (runtime), " "розширення (extension))" -#: app/flatpak-builtins-build-init.c:55 +#: app/flatpak-builtins-build-init.c:59 msgid "TYPE" msgstr "ТИП" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "Add a tag" msgstr "Додати мітку" -#: app/flatpak-builtins-build-init.c:56 +#: app/flatpak-builtins-build-init.c:60 msgid "TAG" msgstr "МІТКА" -#: app/flatpak-builtins-build-init.c:57 +#: app/flatpak-builtins-build-init.c:61 msgid "Include this sdk extension in /usr" msgstr "Включити це розширення середовища програмування до /usr" -#: app/flatpak-builtins-build-init.c:58 +#: app/flatpak-builtins-build-init.c:63 msgid "Where to store sdk (defaults to 'usr')" msgstr "Місце для зберігання sdk (типово «usr»)" -#: app/flatpak-builtins-build-init.c:59 +#: app/flatpak-builtins-build-init.c:64 msgid "Re-initialize the sdk/var" msgstr "Повторно ініціалізувати sdk/var" -#: app/flatpak-builtins-build-init.c:102 +#: app/flatpak-builtins-build-init.c:113 #, c-format msgid "Requested extension %s is only partially installed" msgstr "Потрібне розширення %s встановлено лише частково" -#: app/flatpak-builtins-build-init.c:131 +#: app/flatpak-builtins-build-init.c:142 #, c-format msgid "Requested extension %s not installed" msgstr "Бажане розширення %s не встановлено" -#: app/flatpak-builtins-build-init.c:171 +#: app/flatpak-builtins-build-init.c:197 msgid "" "DIRECTORY APPNAME SDK RUNTIME [BRANCH] - Initialize a directory for building" msgstr "" "КАТАЛОГ НАЗВА_ПРОГРАМИ SDK СЕРЕДОВИЩЕ_ВИКОНАННЯ [ГІЛКА] - Ініціалізувати " "каталог для збирання" -#: app/flatpak-builtins-build-init.c:178 +#: app/flatpak-builtins-build-init.c:204 msgid "RUNTIME must be specified" msgstr "Має бути вказано СЕРЕДОВИЩЕ-ВИКОНАННЯ" -#: app/flatpak-builtins-build-init.c:199 +#: app/flatpak-builtins-build-init.c:225 #, c-format msgid "'%s' is not a valid build type name, use app, runtime or extension" msgstr "" "«%s» не є коректною назвою типу збирання; коректними є такі назви: app, " "runtime і extension" -#: app/flatpak-builtins-build-init.c:205 app/flatpak-builtins-override.c:74 +#: app/flatpak-builtins-build-init.c:231 app/flatpak-builtins-override.c:79 #, c-format msgid "'%s' is not a valid application name: %s" msgstr "«%s» не є коректною назвою програми: %s" -#: app/flatpak-builtins-build-init.c:235 +#: app/flatpak-builtins-build-init.c:262 #, c-format msgid "Build directory %s already initialized" msgstr "Каталог збирання %s вже ініціалізовано" -#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-info-remote.c:48 -#: app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-build-sign.c:41 app/flatpak-builtins-install.c:57 +#: app/flatpak-builtins-remote-info.c:50 msgid "Arch to install for" msgstr "Архітектура для встановлення" -#: 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 +#: app/flatpak-builtins-build-sign.c:42 app/flatpak-builtins-create-usb.c:46 +#: app/flatpak-builtins-install.c:63 app/flatpak-builtins-remote-info.c:52 +#: app/flatpak-builtins-uninstall.c:54 app/flatpak-builtins-update.c:61 msgid "Look for runtime with the specified name" msgstr "Шукати середовище виконання із вказаною назвою" @@ -931,10 +826,122 @@ msgstr "" "РОЗТАШУВАННЯ [ІД [ГІЛКА]] - Підписати програму або середовище виконання" +#: app/flatpak-builtins-build-sign.c:71 +#: app/flatpak-builtins-build-update-repo.c:422 +#: app/flatpak-builtins-remote-add.c:308 app/flatpak-builtins-repo.c:199 +msgid "LOCATION must be specified" +msgstr "Слід вказати РОЗТАШУВАННЯ" + #: app/flatpak-builtins-build-sign.c:92 msgid "No gpg key ids specified" msgstr "Не вказано ідентифікаторів ключів GPG" +#: app/flatpak-builtins-build-update-repo.c:52 +msgid "Redirect this repo to a new URL" +msgstr "Переспрямувати це сховище на нову адресу" + +#: app/flatpak-builtins-build-update-repo.c:53 +msgid "A nice name to use for this repository" +msgstr "Зручна назва для цього сховища" + +#: app/flatpak-builtins-build-update-repo.c:53 +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "TITLE" +msgstr "ЗАГОЛОВОК" + +#: app/flatpak-builtins-build-update-repo.c:54 +msgid "Default branch to use for this repository" +msgstr "Типова гілка для цього сховища" + +#: app/flatpak-builtins-build-update-repo.c:54 +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +#: app/flatpak-builtins-repo.c:177 app/flatpak-builtins-run.c:60 +msgid "BRANCH" +msgstr "ГІЛКА" + +#: app/flatpak-builtins-build-update-repo.c:55 +#: app/flatpak-builtins-remote-add.c:66 app/flatpak-builtins-remote-modify.c:70 +msgid "COLLECTION-ID" +msgstr "ІД-ЗБІРКИ" + +#: app/flatpak-builtins-build-update-repo.c:56 +msgid "Permanently deploy collection ID to client remote configurations" +msgstr "" +"Остаточно розгорнути ідентифікатор збірки у налаштуваннях віддалених сховищ " +"клієнта" + +#: app/flatpak-builtins-build-update-repo.c:57 +msgid "Import new default GPG public key from FILE" +msgstr "Імпортувати новий типовий відкритий ключ GPG з файла ФАЙЛ" + +#: app/flatpak-builtins-build-update-repo.c:58 +msgid "GPG Key ID to sign the summary with" +msgstr "Ідентифікатор ключа GPG для підписування резюме" + +#: app/flatpak-builtins-build-update-repo.c:60 +msgid "Generate delta files" +msgstr "Створити файли різниці" + +#: app/flatpak-builtins-build-update-repo.c:61 +msgid "Prune unused objects" +msgstr "Вилучити невикористані об’єкти" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" +msgstr "" +"Переносити лише ГЛИБИНУ батьківських елементів для кожного внеску (типово: " +"-1=нескінченна кількість)" + +#: app/flatpak-builtins-build-update-repo.c:62 +msgid "DEPTH" +msgstr "ГЛИБИНА" + +#: app/flatpak-builtins-build-update-repo.c:191 +#, c-format +msgid "Generating delta: %s (%.10s)\n" +msgstr "Створюємо різницю: %s (%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:193 +#, c-format +msgid "Generating delta: %s (%.10s-%.10s)\n" +msgstr "Створюємо різницю: %s (%.10s-%.10s)\n" + +#: app/flatpak-builtins-build-update-repo.c:201 +#, c-format +msgid "Failed to generate delta %s (%.10s): " +msgstr "Не вдалося створити різницю %s (%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:204 +#, c-format +msgid "Failed to generate delta %s (%.10s-%.10s): " +msgstr "Не вдалося створити різницю %s (%.10s-%.10s): " + +#: app/flatpak-builtins-build-update-repo.c:415 +msgid "LOCATION - Update repository metadata" +msgstr "РОЗТАШУВАННЯ - Оновити метадані сховища" + +#: app/flatpak-builtins-build-update-repo.c:483 +msgid "Updating appstream branch\n" +msgstr "Оновлюємо гілку appstream\n" + +#: app/flatpak-builtins-build-update-repo.c:504 +msgid "Updating summary\n" +msgstr "Оновлюємо резюме\n" + +#: app/flatpak-builtins-build-update-repo.c:523 +#, c-format +msgid "Total objects: %u\n" +msgstr "Загалом об’єктів: %u\n" + +#: app/flatpak-builtins-build-update-repo.c:525 +msgid "No unreachable objects\n" +msgstr "Немає недосяжних об’єктів\n" + +#: app/flatpak-builtins-build-update-repo.c:527 +#, c-format +msgid "Deleted %u objects, %s freed\n" +msgstr "Вилучено %u об’єктів, вивільнено %s\n" + #: app/flatpak-builtins-config.c:41 msgid "List configuration keys and values" msgstr "Показати список ключів і значень налаштувань" @@ -951,36 +958,106 @@ msgid "Unset configuration for KEY" msgstr "Скасувати налаштовування для ключа КЛЮЧ" -#: app/flatpak-builtins-config.c:95 +#: app/flatpak-builtins-config.c:96 #, c-format msgid "Unknown configure key '%s'" msgstr "Невідомий ключ налаштовування «%s»" -#: app/flatpak-builtins-config.c:144 app/flatpak-builtins-config.c:185 +#: app/flatpak-builtins-config.c:145 app/flatpak-builtins-config.c:186 msgid "You must specify key" msgstr "Вам слід вказати ключ" -#: app/flatpak-builtins-config.c:166 +#: app/flatpak-builtins-config.c:167 msgid "You must specify both key and value" msgstr "Вам слід вказати і ключ, і значення" -#: app/flatpak-builtins-config.c:204 +#: app/flatpak-builtins-config.c:205 msgid "[KEY [VALUE]] - Manage configuration" msgstr "[КЛЮЧ [ЗНАЧЕННЯ]] - керувати налаштуваннями" -#: app/flatpak-builtins-config.c:223 -#, fuzzy +#: app/flatpak-builtins-config.c:224 msgid "Must specify one of --list, --get, --set or --unset" msgstr "" "Слід вказати один із таких параметрів: --list, --get, --set або --unset" -#: app/flatpak-builtins-delete-remote.c:38 -msgid "Remove remote even if in use" -msgstr "Вилучити віддалене сховища, навіть якщо воно використовується" +#: app/flatpak-builtins-create-usb.c:43 app/flatpak-builtins-install.c:64 +#: app/flatpak-builtins-remote-info.c:53 app/flatpak-builtins-uninstall.c:55 +#: app/flatpak-builtins-update.c:62 +msgid "Look for app with the specified name" +msgstr "Шукати програму із вказаною назвою" -#: app/flatpak-builtins-delete-remote.c:51 -msgid "NAME - Delete a remote repository" -msgstr "НАЗВА - Вилучити віддалене сховище" +#: app/flatpak-builtins-create-usb.c:44 +#, fuzzy +msgid "Arch to copy" +msgstr "Архітектура для показу" + +#: app/flatpak-builtins-create-usb.c:45 +#, fuzzy +msgid "DEST" +msgstr "ПРИЗН=ДЖЕР" + +#: app/flatpak-builtins-create-usb.c:152 +#, c-format +msgid "Warning: Omitting related ref ‘%s’ because it is not installed.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:163 +#, c-format +msgid "" +"Warning: Omitting related ref ‘%s’ because its remote ‘%s’ does not have a " +"collection ID set.\n" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:235 app/flatpak-builtins-create-usb.c:606 +#, c-format +msgid "" +"Remote ‘%s’ does not have a collection ID set, which is required for P2P " +"distribution of ‘%s’." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:450 +msgid "" +"MOUNT-PATH REF [REF...] - Copy apps and/or runtimes onto removable media" +msgstr "" + +#: app/flatpak-builtins-create-usb.c:459 +#, fuzzy +msgid "MOUNT-PATH and REF must be specified" +msgstr "Має бути вказано СХОВИЩЕ і НАЗВУ" + +#: app/flatpak-builtins-create-usb.c:575 app/flatpak-builtins-uninstall.c:383 +#, c-format +msgid "Ref ‘%s’ found in multiple installations: %s. You must specify one." +msgstr "" +"Джерело «%s» виявлено у декількох встановленнях: %s. Вам слід вказати одне." + +#: app/flatpak-builtins-create-usb.c:588 +#, c-format +msgid "Refs must all be in the same installation (found in %s and %s)." +msgstr "" + +#: app/flatpak-builtins-create-usb.c:673 +#, fuzzy, c-format +msgid "Warning: Couldn't update repo metadata for remote ‘%s’: %s\n" +msgstr "Попередження: не вдалося оновити додаткові метадані для «%s»: %s\n" + +#: app/flatpak-builtins-create-usb.c:698 +#, fuzzy, c-format +msgid "Warning: Couldn't update appstream data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Попередження: не вдалося знайти метадані %s для залежностей: %s" + +#. Print a warning if both appstream and appstream2 are missing +#: app/flatpak-builtins-create-usb.c:731 +#, fuzzy, c-format +msgid "" +"Warning: Couldn't find appstream data for remote ‘%s’ arch ‘%s’: %s; %s\n" +msgstr "Попередження: не вдалося знайти метадані %s для залежностей: %s" + +#. Appstream2 is only for efficiency, so just print a debug message +#: app/flatpak-builtins-create-usb.c:737 +#, fuzzy, c-format +msgid "Couldn't find appstream2 data for remote ‘%s’ arch ‘%s’: %s\n" +msgstr "Оновлюємо дані appstream для віддаленого сховища %s" #: app/flatpak-builtins-document-export.c:54 msgid "Create a unique document reference" @@ -1131,208 +1208,177 @@ msgid "Can't switch uid" msgstr "Не вдалося перемкнути uid" -#: app/flatpak-builtins-info.c:52 +#: app/flatpak-builtins-info.c:55 msgid "Show user installations" msgstr "Показати встановлення користувача" -#: app/flatpak-builtins-info.c:53 +#: app/flatpak-builtins-info.c:56 msgid "Show system-wide installations" msgstr "Показати загальносистемні встановлення" -#: app/flatpak-builtins-info.c:54 +#: app/flatpak-builtins-info.c:57 msgid "Show specific system-wide installations" msgstr "Показати вказані загальносистемні встановлення" -#: app/flatpak-builtins-info.c:55 app/flatpak-builtins-info-remote.c:53 +#: app/flatpak-builtins-info.c:58 app/flatpak-builtins-remote-info.c:55 msgid "Show ref" msgstr "Показати посилання" -#: app/flatpak-builtins-info.c:56 app/flatpak-builtins-info-remote.c:54 +#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-remote-info.c:56 msgid "Show commit" msgstr "Показати внесок" -#: app/flatpak-builtins-info.c:57 +#: app/flatpak-builtins-info.c:60 msgid "Show origin" msgstr "Показ початку координат" -#: app/flatpak-builtins-info.c:58 +#: app/flatpak-builtins-info.c:61 msgid "Show size" msgstr "Показ розміру" -#: app/flatpak-builtins-info.c:59 app/flatpak-builtins-info-remote.c:56 +#: app/flatpak-builtins-info.c:62 app/flatpak-builtins-remote-info.c:58 msgid "Show metadata" msgstr "Показ метаданих" -#: app/flatpak-builtins-info.c:60 -#, fuzzy +#: app/flatpak-builtins-info.c:63 app/flatpak-builtins-remote-info.c:59 +msgid "Show runtime" +msgstr "Показ середовища виконання" + +#: app/flatpak-builtins-info.c:64 app/flatpak-builtins-remote-info.c:60 +msgid "Show sdk" +msgstr "Показ SDK" + +#: app/flatpak-builtins-info.c:65 msgid "Show permissions" -msgstr "Показати розширення" +msgstr "Показати права доступу" -#: app/flatpak-builtins-info.c:61 -#, fuzzy +#: app/flatpak-builtins-info.c:66 msgid "Query file access" -msgstr "" -"\n" -" Керування доступом до файлів" +msgstr "Запит щодо доступу до файла" -#: app/flatpak-builtins-info.c:61 app/flatpak-builtins-install.c:68 +#: app/flatpak-builtins-info.c:66 app/flatpak-builtins-install.c:68 #: app/flatpak-builtins-update.c:64 msgid "PATH" msgstr "ШЛЯХ" -#: app/flatpak-builtins-info.c:62 +#: app/flatpak-builtins-info.c:67 msgid "Show extensions" msgstr "Показати розширення" -#: app/flatpak-builtins-info.c:118 -msgid "NAME [BRANCH] - Get info about installed app and/or runtime" +#: app/flatpak-builtins-info.c:68 +msgid "Show location" +msgstr "Показувати адресу" + +#: app/flatpak-builtins-info.c:127 +msgid "NAME [BRANCH] - Get info about an installed app or runtime" msgstr "" -"НАЗВА [ГІЛКА] - Отримати інформацію щодо встановленої програми і/або " +"НАЗВА [ГІЛКА] - Отримати інформацію щодо встановленої програми або " "середовища виконання" -#: app/flatpak-builtins-info.c:189 +#: app/flatpak-builtins-info.c:134 app/flatpak-builtins-remote-add.c:305 +#: app/flatpak-builtins-remote-delete.c:61 +msgid "NAME must be specified" +msgstr "Має бути вказано НАЗВУ" + +#: app/flatpak-builtins-info.c:202 msgid "ref not present in origin" msgstr "посилання немає у джерелі" -#: app/flatpak-builtins-info.c:202 app/flatpak-builtins-info-remote.c:177 +#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-remote-info.c:183 msgid "Warning: Commit has no flatpak metadata\n" -msgstr "" +msgstr "Попередження: у внеску немає метаданих flatpak\n" -#: app/flatpak-builtins-info.c:209 app/flatpak-builtins-info-remote.c:200 +#: app/flatpak-builtins-info.c:220 app/flatpak-builtins-remote-info.c:203 msgid "Ref:" msgstr "Джерело:" -#: app/flatpak-builtins-info.c:210 app/flatpak-builtins-info.c:364 -#: app/flatpak-builtins-info-remote.c:201 +#: app/flatpak-builtins-info.c:221 app/flatpak-builtins-info.c:412 +#: app/flatpak-builtins-remote-info.c:204 msgid "ID:" msgstr "Ід.:" -#: app/flatpak-builtins-info.c:211 app/flatpak-builtins-info-remote.c:202 +#: app/flatpak-builtins-info.c:222 app/flatpak-builtins-remote-info.c:205 msgid "Arch:" msgstr "Арх.:" -#: app/flatpak-builtins-info.c:212 app/flatpak-builtins-info-remote.c:203 +#: app/flatpak-builtins-info.c:223 app/flatpak-builtins-remote-info.c:206 msgid "Branch:" msgstr "Гілка:" -#: app/flatpak-builtins-info.c:213 app/flatpak-builtins-info.c:365 +#: app/flatpak-builtins-info.c:224 app/flatpak-builtins-info.c:413 msgid "Origin:" msgstr "Походження:" -#: app/flatpak-builtins-info.c:215 app/flatpak-builtins-info-remote.c:205 -#, fuzzy +#: app/flatpak-builtins-info.c:226 app/flatpak-builtins-remote-info.c:208 msgid "Collection ID:" -msgstr "Ідентифікатор збірки" +msgstr "Ід. збірки:" -#: app/flatpak-builtins-info.c:217 app/flatpak-builtins-info-remote.c:206 +#: app/flatpak-builtins-info.c:228 app/flatpak-builtins-remote-info.c:209 msgid "Date:" -msgstr "" +msgstr "Дата:" -#: app/flatpak-builtins-info.c:219 app/flatpak-builtins-info-remote.c:207 +#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-remote-info.c:210 msgid "Subject:" -msgstr "" +msgstr "Тема:" -#: app/flatpak-builtins-info.c:223 +#: app/flatpak-builtins-info.c:234 msgid "Active commit:" msgstr "Активний внесок:" -#: app/flatpak-builtins-info.c:224 +#: app/flatpak-builtins-info.c:235 msgid "Latest commit:" msgstr "Останній внесок:" -#: app/flatpak-builtins-info.c:227 app/flatpak-builtins-info.c:366 -#: app/flatpak-builtins-info-remote.c:208 +#: app/flatpak-builtins-info.c:238 app/flatpak-builtins-info.c:414 +#: app/flatpak-builtins-remote-info.c:211 msgid "Commit:" msgstr "Внесок:" -#: app/flatpak-builtins-info.c:229 +#: app/flatpak-builtins-info.c:240 msgid "alt-id:" msgstr "альт-ід.:" -#: app/flatpak-builtins-info.c:230 app/flatpak-builtins-info-remote.c:209 +#: app/flatpak-builtins-info.c:241 app/flatpak-builtins-remote-info.c:212 msgid "Parent:" -msgstr "" +msgstr "Батьківський:" -#: app/flatpak-builtins-info.c:231 +#: app/flatpak-builtins-info.c:242 msgid "Location:" msgstr "Місце:" -#: app/flatpak-builtins-info.c:232 app/flatpak-builtins-info.c:367 -#: app/flatpak-builtins-info-remote.c:211 +#: app/flatpak-builtins-info.c:243 app/flatpak-builtins-info.c:415 +#: app/flatpak-builtins-remote-info.c:214 msgid "Installed size:" msgstr "Розмір встановленого:" -#: app/flatpak-builtins-info.c:237 app/flatpak-builtins-info-remote.c:216 +#: app/flatpak-builtins-info.c:245 +msgid "end-of-life:" +msgstr "end-of-life:" + +#: app/flatpak-builtins-info.c:247 +msgid "end-of-life-rebase:" +msgstr "end-of-life-rebase:" + +#: app/flatpak-builtins-info.c:253 app/flatpak-builtins-remote-info.c:220 msgid "Runtime:" msgstr "Середовище виконання:" -#: app/flatpak-builtins-info.c:242 +#: app/flatpak-builtins-info.c:255 app/flatpak-builtins-remote-info.c:222 +msgid "Sdk:" +msgstr "Sdk:" + +#: app/flatpak-builtins-info.c:260 msgid "Installed subdirectories:" msgstr "Встановлені підкаталоги:" -#: app/flatpak-builtins-info.c:363 +#: app/flatpak-builtins-info.c:411 msgid "Extension:" msgstr "Суфікс:" -#: app/flatpak-builtins-info.c:374 +#: app/flatpak-builtins-info.c:422 msgid "Subpaths:" msgstr "Підшляхи:" -#: 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 "Шукати програму із вказаною назвою" - -#: 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 -#, fuzzy -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 "Не отримувати зі сховища, встановити лише з локального кешу" @@ -1371,61 +1417,35 @@ msgid "Only install this subpath" msgstr "Встановити лише цей підшлях" -#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-update.c:65 +#: app/flatpak-builtins-install.c:69 app/flatpak-builtins-uninstall.c:58 +#: app/flatpak-builtins-update.c:65 msgid "Automatically answer yes for all questions" msgstr "Автоматично відповідати «так» на усі питання" #: 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" -" %s\n" -"Configure this as new remote '%s'" -msgstr "" -"Ця програма залежить від середовища виконання звідси:\n" -" %s\n" -"Налаштуйте як нове сховище «%s»" - -#: app/flatpak-builtins-install.c:216 app/flatpak-builtins-install.c:342 -#, c-format -msgid "Configuring %s as new remote '%s'" -msgstr "Налаштовуємо %s як нове віддалене сховище «%s»" +msgstr "Спочатку вилучити, якщо вже встановлено" -#: app/flatpak-builtins-install.c:264 +#: app/flatpak-builtins-install.c:129 msgid "Bundle filename must be specified" msgstr "Слід вказати назву файла пакунка" -#: app/flatpak-builtins-install.c:274 +#: app/flatpak-builtins-install.c:139 msgid "Remote bundles are not supported" msgstr "Підтримки віддалених пакунків не передбачено" -#: app/flatpak-builtins-install.c:338 -#, fuzzy, c-format -msgid "" -"The remote '%s', at location %s contains additional applications.\n" -"Should the remote be kept for future installations?" -msgstr "" -"У віддаленому сховищі «%s», розміщеному у %s, містяться додаткові програми.\n" -"Хочете встановити інші програми звідти?" - -#: app/flatpak-builtins-install.c:398 +#: app/flatpak-builtins-install.c:184 msgid "Filename or uri must be specified" msgstr "Слід вказати назву файла або адресу" -#: app/flatpak-builtins-install.c:442 -#, c-format -msgid "Installing: %s\n" -msgstr "Встановлюємо: %s\n" - -#: app/flatpak-builtins-install.c:474 +#: app/flatpak-builtins-install.c:249 msgid "LOCATION/REMOTE [REF...] - Install applications or runtimes" msgstr "МІСЦЕ/СХОВИЩЕ [НАЗВА…] - Встановити програму або середовища виконання" +#: app/flatpak-builtins-install.c:275 app/flatpak-builtins-remote-info.c:137 +msgid "REMOTE and REF must be specified" +msgstr "Має бути вказано СХОВИЩЕ і НАЗВУ" + #: app/flatpak-builtins-list.c:43 msgid "Show extra information" msgstr "Показати додаткову інформацію" @@ -1442,125 +1462,552 @@ msgid "Arch to show" msgstr "Архітектура для показу" -#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-ls-remote.c:50 +#: app/flatpak-builtins-list.c:47 app/flatpak-builtins-remote-ls.c:50 msgid "List all refs (including locale/debug)" msgstr "Вивести список усіх джерел (включно з locale/debug)" -#: app/flatpak-builtins-list.c:125 app/flatpak-builtins-ls-remote.c:174 -#: app/flatpak-builtins-repo.c:98 +#: app/flatpak-builtins-list.c:126 app/flatpak-builtins-remote-ls.c:196 +#: app/flatpak-builtins-repo.c:105 msgid "Ref" msgstr "Джерело" -#: app/flatpak-builtins-list.c:128 app/flatpak-builtins-ls-remote.c:176 +#: app/flatpak-builtins-list.c:129 app/flatpak-builtins-remote-ls.c:198 msgid "Origin" msgstr "Походження" -#: app/flatpak-builtins-list.c:129 +#: app/flatpak-builtins-list.c:130 msgid "Active commit" msgstr "Активний внесок" -#: app/flatpak-builtins-list.c:130 +#: app/flatpak-builtins-list.c:131 msgid "Latest commit" msgstr "Останній внесок" -#: app/flatpak-builtins-list.c:131 app/flatpak-builtins-ls-remote.c:178 +#: app/flatpak-builtins-list.c:132 app/flatpak-builtins-remote-ls.c:200 msgid "Installed size" msgstr "Розмір встановленого" -#: app/flatpak-builtins-list.c:133 app/flatpak-builtins-list-remotes.c:73 +#: app/flatpak-builtins-list.c:134 app/flatpak-builtins-remote-list.c:74 +#: app/flatpak-builtins-remote-ls.c:202 app/flatpak-builtins-repo.c:108 msgid "Options" msgstr "Параметри" -#: app/flatpak-builtins-list.c:305 +#: app/flatpak-builtins-list.c:313 msgid " - List installed apps and/or runtimes" msgstr " - Вивести список встановлених програм і/або середовищ виконання" -#: app/flatpak-builtins-list-remotes.c:40 -msgid "Show remote details" -msgstr "Показати подробиці щодо віддаленого сховища" +#: app/flatpak-builtins-make-current.c:38 +msgid "Arch to make current for" +msgstr "Архітектура, яку слід зробити поточною" -#: app/flatpak-builtins-list-remotes.c:41 -msgid "Show disabled remotes" -msgstr "Показати вимкнені віддалені сховища" +#: app/flatpak-builtins-make-current.c:58 +msgid "APP BRANCH - Make branch of application current" +msgstr "ПРОГРАМА ГІЛКА - Зробити гілку програми поточною" -#: app/flatpak-builtins-list-remotes.c:53 -msgid " - List remote repositories" -msgstr " - Вивести список віддалених сховищ" +#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:120 +msgid "APP must be specified" +msgstr "Слід вказати ПРОГРАМУ" -#: app/flatpak-builtins-list-remotes.c:66 -msgid "Name" -msgstr "Назва" +#: app/flatpak-builtins-make-current.c:84 +msgid "BRANCH must be specified" +msgstr "Слід вказати ГІЛКУ" + +#: 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:42 +msgid "Remove existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:43 +msgid "Show existing overrides" +msgstr "" + +#: app/flatpak-builtins-override.c:59 +msgid "[APP] - Override settings [for application]" +msgstr "[ПРОГРАМА] - Перевизначити параметри [для програми]" + +#: app/flatpak-builtins-permission-list.c:138 +msgid "[TABLE] [ID] - List permissions" +msgstr "[ТАБЛИЦЯ] [ІД] - список прав доступу" + +#: app/flatpak-builtins-permission-list.c:174 +#: app/flatpak-builtins-permission-show.c:139 +msgid "Table" +msgstr "Таблиця" + +#: app/flatpak-builtins-permission-list.c:175 +#: app/flatpak-builtins-permission-show.c:140 +msgid "Object" +msgstr "Об'єкт" + +#: app/flatpak-builtins-permission-list.c:176 +#: app/flatpak-builtins-permission-show.c:141 +msgid "App" +msgstr "Програма" + +#: app/flatpak-builtins-permission-list.c:177 +#: app/flatpak-builtins-permission-show.c:142 +msgid "Permissions" +msgstr "Права доступу" + +#: app/flatpak-builtins-permission-list.c:178 +#: app/flatpak-builtins-permission-show.c:143 +msgid "Data" +msgstr "Дані" + +#: app/flatpak-builtins-permission-remove.c:82 +#, fuzzy +msgid "TABLE ID - Remove item from permission store" +msgstr "ТАБЛИЦЯ ІД - вилучити запис до сховища прав доступу" + +#: app/flatpak-builtins-permission-remove.c:91 +msgid "Too few arguments" +msgstr "Замало параметрів" + +#: app/flatpak-builtins-permission-reset.c:108 +msgid "APP_ID - Reset permissions for an app" +msgstr "ІД_ПРОГ - відновити початкові права доступу для програми" + +#: app/flatpak-builtins-permission-reset.c:117 +#: app/flatpak-builtins-permission-show.c:121 +msgid "Wrong number of arguments" +msgstr "Помилкова кількість параметрів" + +#: app/flatpak-builtins-permission-show.c:112 +msgid "APP_ID - Show permissions for an app" +msgstr "ІД_ПРОГ - показати права доступу для програми" + +#: app/flatpak-builtins-ps.c:42 app/flatpak-builtins-ps.c:120 +#, fuzzy +msgid "Show available columns" +msgstr "Показати вимкнені віддалені сховища" + +#: app/flatpak-builtins-ps.c:43 +#, fuzzy +msgid "What information to show" +msgstr "Вивести інформація щодо сховища" + +#: app/flatpak-builtins-ps.c:43 +msgid "FIELD,…" +msgstr "" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Application" +msgstr "Ід. програми" + +#: app/flatpak-builtins-ps.c:53 +#, fuzzy +msgid "Show the application ID" +msgstr "Ід. програми" + +#: app/flatpak-builtins-ps.c:54 +#, fuzzy +msgid "Architecture" +msgstr "Архітектура, яку слід використовувати" + +#: app/flatpak-builtins-ps.c:54 +msgid "Show the architecture" +msgstr "" + +#: app/flatpak-builtins-ps.c:55 app/flatpak-builtins-search.c:319 +msgid "Branch" +msgstr "Гілка" + +#: app/flatpak-builtins-ps.c:55 +#, fuzzy +msgid "Show the application branch" +msgstr "Показати архітектури і гілки" + +#: app/flatpak-builtins-ps.c:56 app/flatpak-builtins-remote-ls.c:199 +msgid "Commit" +msgstr "Внесок" + +#: app/flatpak-builtins-ps.c:56 +#, fuzzy +msgid "Show the application commit" +msgstr "Показувати адресу" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Runtime" +msgstr "Середовище виконання:" + +#: app/flatpak-builtins-ps.c:57 +#, fuzzy +msgid "Show the runtime ID" +msgstr "Показ середовища виконання" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Runtime Branch" +msgstr "Середовище виконання:" + +#: app/flatpak-builtins-ps.c:58 +#, fuzzy +msgid "Show the runtime branch" +msgstr "Показ середовища виконання" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Runtime Commit" +msgstr "Активний внесок" + +#: app/flatpak-builtins-ps.c:59 +#, fuzzy +msgid "Show the runtime commit" +msgstr "Показ середовища виконання" + +#: app/flatpak-builtins-ps.c:60 +#, fuzzy +msgid "PID" +msgstr "ІДЕНТИФІКАТОРПРОГРАМИ" + +#: app/flatpak-builtins-ps.c:60 +msgid "Show the PID of the wrapper process" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Child PID" +msgstr "" + +#: app/flatpak-builtins-ps.c:61 +msgid "Show the PID of the sandbox process" +msgstr "" + +#: app/flatpak-builtins-ps.c:89 +#, c-format +msgid "Ambiguous column: %s" +msgstr "" -#: app/flatpak-builtins-list-remotes.c:69 +#: app/flatpak-builtins-ps.c:98 +#, fuzzy, c-format +msgid "Unknown column: %s" +msgstr "Невідома команда «%s»" + +#: app/flatpak-builtins-ps.c:109 +msgid "Available columns:\n" +msgstr "" + +#: app/flatpak-builtins-ps.c:119 +#, fuzzy +msgid "Show all columns" +msgstr "Показувати адресу" + +#: app/flatpak-builtins-ps.c:156 +#, fuzzy +msgid "Instance" +msgstr "Встановлено" + +#: app/flatpak-builtins-ps.c:254 +msgid " - Enumerate running sandboxes" +msgstr "" + +#: app/flatpak-builtins-ps.c:264 +#, fuzzy +msgid "Extra arguments given" +msgstr "Відомості щодо додаткових даних" + +#: app/flatpak-builtins-remote-add.c:54 +msgid "Do nothing if the provided remote exists" +msgstr "Нічого не робити, якщо вказане сховище існує" + +#: app/flatpak-builtins-remote-add.c:55 +msgid "LOCATION specifies a configuration file, not the repo location" +msgstr "МІСЦЕ вказує на файл налаштувань, а не на розташування сховища" + +#: app/flatpak-builtins-remote-add.c:60 app/flatpak-builtins-remote-modify.c:64 +msgid "Disable GPG verification" +msgstr "Вимкнути перевірку GPG" + +#: app/flatpak-builtins-remote-add.c:61 app/flatpak-builtins-remote-modify.c:65 +msgid "Mark the remote as don't enumerate" +msgstr "Позначити віддалене сховище як таке, яке не входить до переліку" + +#: app/flatpak-builtins-remote-add.c:62 app/flatpak-builtins-remote-modify.c:66 +msgid "Mark the remote as don't use for deps" +msgstr "" +"Позначити віддалене сховище як таке, яке не використовується для залежностей" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "Set priority (default 1, higher is more prioritized)" +msgstr "" +"Встановити пріоритетність (типово 1, більше значення — вища пріоритетність)" + +#: app/flatpak-builtins-remote-add.c:63 app/flatpak-builtins-remote-modify.c:67 +msgid "PRIORITY" +msgstr "ПРІОРИТЕТНІСТЬ" + +#: app/flatpak-builtins-remote-add.c:64 app/flatpak-builtins-remote-modify.c:68 +msgid "A nice name to use for this remote" +msgstr "Зрозуміла назва для використання цього віддаленого сховища" + +#: app/flatpak-builtins-remote-add.c:65 app/flatpak-builtins-remote-modify.c:69 +msgid "Default branch to use for this remote" +msgstr "Типова гілка для цього віддаленого сховища" + +#: app/flatpak-builtins-remote-add.c:67 app/flatpak-builtins-remote-modify.c:71 +msgid "Import GPG key from FILE (- for stdin)" +msgstr "Імпортувати ключ GPG з ФАЙЛА (- — імпортувати із stdin)" + +#: app/flatpak-builtins-remote-add.c:68 app/flatpak-builtins-remote-modify.c:72 +msgid "Disable the remote" +msgstr "Вимкнути віддалене сховище" + +#: app/flatpak-builtins-remote-add.c:191 app/flatpak-builtins-remote-add.c:198 +#, c-format +msgid "Can't load uri %s: %s\n" +msgstr "Не вдалося завантажити адресу %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:206 +#, c-format +msgid "Can't load file %s: %s\n" +msgstr "Не вдалося завантажити файл %s: %s\n" + +#: app/flatpak-builtins-remote-add.c:214 +msgid "Invalid file format" +msgstr "Некоректний формат файла" + +#: app/flatpak-builtins-remote-add.c:222 common/flatpak-dir.c:10776 +#, c-format +msgid "Invalid version %s, only 1 supported" +msgstr "Некоректна версія %s, передбачено підтримку лише версії 1" + +#: app/flatpak-builtins-remote-add.c:264 common/flatpak-dir.c:10703 +msgid "Invalid gpg key" +msgstr "Некоректний ключ gpg" + +#: app/flatpak-builtins-remote-add.c:292 +msgid "NAME LOCATION - Add a remote repository" +msgstr "НАЗВА РОЗТАШУВАННЯ - Додати віддалене сховище" + +#: app/flatpak-builtins-remote-add.c:319 +msgid "GPG verification is required if collections are enabled" +msgstr "Якщо увімкнено збірку, слід пройти перевірку GPG" + +#. Do nothing +#: app/flatpak-builtins-remote-add.c:333 +#, c-format +msgid "Remote %s already exists" +msgstr "Запис віддаленого сховища %s вже існує" + +#: app/flatpak-builtins-remote-add.c:341 +msgid "No url specified in flatpakrepo file" +msgstr "У файлі flatpakrepo не вказано адреси" + +#: app/flatpak-builtins-remote-add.c:383 +#, c-format +msgid "Warning: Could not update extra metadata for '%s': %s\n" +msgstr "Попередження: не вдалося оновити додаткові метадані для «%s»: %s\n" + +#: app/flatpak-builtins-remote-delete.c:38 +msgid "Remove remote even if in use" +msgstr "Вилучити віддалене сховища, навіть якщо воно використовується" + +#: app/flatpak-builtins-remote-delete.c:51 +msgid "NAME - Delete a remote repository" +msgstr "НАЗВА - Вилучити віддалене сховище" + +#: app/flatpak-builtins-remote-info.c:51 +msgid "Commit to show info for" +msgstr "Внесок, щодо якого слід показати відомості" + +#: app/flatpak-builtins-remote-info.c:54 +msgid "Display log" +msgstr "Показати журнал" + +#: app/flatpak-builtins-remote-info.c:57 +msgid "Show parent" +msgstr "Показати батьківський запис" + +#: app/flatpak-builtins-remote-info.c:126 +msgid "" +" REMOTE REF - Show information about an application or runtime in a remote" +msgstr "" +" СХОВИЩЕ НАЗВА - Показати відомості щодо програми або середовища у " +"віддаленому сховищі" + +#: app/flatpak-builtins-remote-info.c:213 +msgid "Download size:" +msgstr "Розмір отриманого:" + +#: app/flatpak-builtins-remote-info.c:229 +msgid "History:\n" +msgstr "Журнал:\n" + +#: app/flatpak-builtins-remote-info.c:250 +msgid " Subject:" +msgstr " Тема:" + +#: app/flatpak-builtins-remote-info.c:251 +msgid " Date:" +msgstr " Дата:" + +#: app/flatpak-builtins-remote-info.c:252 +msgid " Commit:" +msgstr " Внесок:" + +#: app/flatpak-builtins-remote-info.c:274 +#, c-format +msgid "Warning: Commit %s has no flatpak metadata\n" +msgstr "Попередження: у внеску %s немає метаданих flatpak\n" + +#: app/flatpak-builtins-remote-list.c:40 +msgid "Show remote details" +msgstr "Показати подробиці щодо віддаленого сховища" + +#: app/flatpak-builtins-remote-list.c:41 +msgid "Show disabled remotes" +msgstr "Показати вимкнені віддалені сховища" + +#: app/flatpak-builtins-remote-list.c:53 +msgid " - List remote repositories" +msgstr " - Вивести список віддалених сховищ" + +#: app/flatpak-builtins-remote-list.c:66 +msgid "Name" +msgstr "Назва" + +#: app/flatpak-builtins-remote-list.c:69 msgid "Title" msgstr "Заголовок" -#: app/flatpak-builtins-list-remotes.c:71 +#: app/flatpak-builtins-remote-list.c:72 msgid "Priority" msgstr "Пріоритетність" -#: app/flatpak-builtins-ls-remote.c:45 +#: app/flatpak-builtins-remote-ls.c:45 msgid "Show arches and branches" msgstr "Показати архітектури і гілки" -#: app/flatpak-builtins-ls-remote.c:46 +#: app/flatpak-builtins-remote-ls.c:46 msgid "Show only runtimes" msgstr "Показати лише середовища виконання" -#: app/flatpak-builtins-ls-remote.c:47 +#: app/flatpak-builtins-remote-ls.c:47 msgid "Show only apps" msgstr "Показати лише програми" -#: app/flatpak-builtins-ls-remote.c:48 +#: app/flatpak-builtins-remote-ls.c:48 msgid "Show only those where updates are available" msgstr "Показати лише ті, для яких доступні оновлення" -#: app/flatpak-builtins-ls-remote.c:49 +#: app/flatpak-builtins-remote-ls.c:49 msgid "Limit to this arch (* for all)" msgstr "Обмежитися вказаною архітектурою (* для усіх)" -#: app/flatpak-builtins-ls-remote.c:96 -#, fuzzy -msgid " [REMOTE] - Show available runtimes and applications" -msgstr " СХОВИЩЕ - Показати доступні середовища виконання і програми" - -#: app/flatpak-builtins-ls-remote.c:177 -msgid "Commit" -msgstr "Внесок" +#: app/flatpak-builtins-remote-ls.c:101 +msgid " [REMOTE or URI] - Show available runtimes and applications" +msgstr "" +" [СХОВИЩЕ або АДРЕСА] - Показати доступні середовища виконання і програми" -#: app/flatpak-builtins-ls-remote.c:179 +#: app/flatpak-builtins-remote-ls.c:201 msgid "Download size" msgstr "Розмір отриманого" -#: app/flatpak-builtins-ls-remote.c:304 -msgid "No ref information available in repository" -msgstr "У сховищі немає даних щодо джерела" +#: app/flatpak-builtins-remote-modify.c:54 +msgid "Enable GPG verification" +msgstr "Увімкнути перевірку GPG" -#: app/flatpak-builtins-make-current.c:38 -msgid "Arch to make current for" -msgstr "Архітектура, яку слід зробити поточною" +#: app/flatpak-builtins-remote-modify.c:55 +msgid "Mark the remote as enumerate" +msgstr "Позначити віддалене сховище як таке, яке входить до переліку" -#: app/flatpak-builtins-make-current.c:58 -msgid "APP BRANCH - Make branch of application current" -msgstr "ПРОГРАМА ГІЛКА - Зробити гілку програми поточною" +#: app/flatpak-builtins-remote-modify.c:56 +msgid "Mark the remote as used for dependencies" +msgstr "" +"Позначити віддалене сховище як таке, що використовується для залежностей" -#: app/flatpak-builtins-make-current.c:69 app/flatpak-builtins-run.c:105 -msgid "APP must be specified" -msgstr "Слід вказати ПРОГРАМУ" +#: app/flatpak-builtins-remote-modify.c:57 +msgid "Set a new url" +msgstr "Встановити нову адресу" -#: app/flatpak-builtins-make-current.c:84 -msgid "BRANCH must be specified" -msgstr "Слід вказати ГІЛКУ" +#: app/flatpak-builtins-remote-modify.c:58 +msgid "Enable the remote" +msgstr "Увімкнути віддалене сховище" -#: app/flatpak-builtins-make-current.c:97 +#: app/flatpak-builtins-remote-modify.c:59 +msgid "Update extra metadata from the summary file" +msgstr "Оновити додаткові метадані з файла резюме" + +#: app/flatpak-builtins-remote-modify.c:190 +msgid "NAME - Modify a remote repository" +msgstr "НАЗВА - Змінити віддалене сховище" + +#: app/flatpak-builtins-remote-modify.c:200 +msgid "Remote NAME must be specified" +msgstr "Має бути вказано НАЗВУ віддаленого сховища" + +#: app/flatpak-builtins-remote-modify.c:211 #, c-format -msgid "App %s branch %s is not installed" -msgstr "Програму %s, гілка %s не встановлено" +msgid "Updating extra metadata from remote summary for %s\n" +msgstr "Оновлюємо додаткові метадані з резюме віддаленого сховища для %s\n" -#: app/flatpak-builtins-override.c:54 +#: app/flatpak-builtins-remote-modify.c:214 +#, c-format +msgid "Error updating extra metadata for '%s': %s\n" +msgstr "Помилка під час оновлення додаткових метаданих для «%s»: %s\n" + +#: app/flatpak-builtins-remote-modify.c:215 +#, c-format +msgid "Could not update extra metadata for %s" +msgstr "Не вдалося оновити додаткові метадані для %s" + +#: app/flatpak-builtins-repair.c:63 +#, c-format +msgid "Object missing: %s.%s\n" +msgstr "Не вистачає об'єкта: %s.%s\n" + +#: app/flatpak-builtins-repair.c:69 +#, c-format +msgid "%s, deleting object\n" +msgstr "%s, вилучаємо об'єкт\n" + +#: app/flatpak-builtins-repair.c:134 +#, c-format +msgid "Can't load object %s: %s\n" +msgstr "Не вдалося завантажити об'єкт %s: %s\n" + +#: app/flatpak-builtins-repair.c:253 +#, c-format +msgid "Problems loading data for %s: %s\n" +msgstr "Проблеми із завантаженням даних для %s: %s\n" + +#: app/flatpak-builtins-repair.c:266 +#, c-format +msgid "Error reinstalling %s: %s\n" +msgstr "Помилка під час перевстановлення %s: %s\n" + +#: app/flatpak-builtins-repair.c:288 #, fuzzy -msgid "[APP] - Override settings [for application]" -msgstr "ПРОГРАМА - Перевизначити параметри програми" +msgid "- Repair a flatpak installation" +msgstr "Відновити встановлення flatpak" + +#: app/flatpak-builtins-repair.c:343 +#, c-format +msgid "Removing non-deployed ref %s...\n" +msgstr "Вилучаємо нерозгорнуте джерело %s…\n" + +#: app/flatpak-builtins-repair.c:349 +#, c-format +msgid "Verifying %s...\n" +msgstr "Перевіряємо %s…\n" + +#: app/flatpak-builtins-repair.c:354 +#, c-format +msgid "Deleting ref %s due to missing objects\n" +msgstr "Вилучаємо %s через те, що не вистачає об'єктів\n" + +#: app/flatpak-builtins-repair.c:359 +msgid "Pruning objects\n" +msgstr "Вилучаємо об'єкти\n" + +#: app/flatpak-builtins-repair.c:394 +msgid "Reinstalling removed refs\n" +msgstr "Повторно встановлюємо вилучені джерела\n" #: app/flatpak-builtins-repo.c:48 #, c-format @@ -1582,238 +2029,172 @@ msgid "Redirect URL: %s\n" msgstr "Адреса переспрямовування: %s\n" -#: app/flatpak-builtins-repo.c:60 -#, c-format -msgid "Redirect collection ID: %s\n" -msgstr "Ідентифікатор збірки переспрямовування: %s\n" +#: app/flatpak-builtins-repo.c:65 +#, fuzzy, c-format +msgid "Deploy collection ID: %s\n" +msgstr "Ідентифікатор збірки: %s\n" -#: app/flatpak-builtins-repo.c:68 +#: app/flatpak-builtins-repo.c:73 #, c-format msgid "GPG key hash: %s\n" msgstr "Хеш-сума ключа GPG: %s\n" -#: app/flatpak-builtins-repo.c:77 +#: app/flatpak-builtins-repo.c:82 #, c-format msgid "%zd branches\n" msgstr "%zd гілки\n" -#: app/flatpak-builtins-repo.c:99 +#: app/flatpak-builtins-repo.c:106 msgid "Installed" msgstr "Встановлено" -#: app/flatpak-builtins-repo.c:100 +#: app/flatpak-builtins-repo.c:107 msgid "Download" msgstr "Отримати" -#: app/flatpak-builtins-repo.c:151 +#: app/flatpak-builtins-repo.c:175 msgid "Print general information about the repository" msgstr "Вивести загальну інформацію щодо сховища" -#: app/flatpak-builtins-repo.c:152 +#: app/flatpak-builtins-repo.c:176 msgid "List the branches in the repository" msgstr "Вивести список гілок у сховищі" -#: app/flatpak-builtins-repo.c:153 +#: app/flatpak-builtins-repo.c:177 msgid "Print metadata for a branch" msgstr "Вивести метадані для гілки" -#: app/flatpak-builtins-repo.c:168 +#: app/flatpak-builtins-repo.c:192 msgid "LOCATION - Repository maintenance" msgstr "РОЗТАШУВАННЯ - Супровід сховища" -#: app/flatpak-builtins-repo-update.c:52 -msgid "Redirect this repo to a new URL" -msgstr "Переспрямувати це сховище на нову адресу" - -#: app/flatpak-builtins-repo-update.c:53 -msgid "A nice name to use for this repository" -msgstr "Зручна назва для цього сховища" - -#: app/flatpak-builtins-repo-update.c:54 -msgid "Default branch to use for this repository" -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" -msgstr "Імпортувати новий типовий відкритий ключ GPG з файла ФАЙЛ" - -#: app/flatpak-builtins-repo-update.c:60 -msgid "GPG Key ID to sign the summary with" -msgstr "Ідентифікатор ключа GPG для підписування резюме" - -#: app/flatpak-builtins-repo-update.c:62 -msgid "Generate delta files" -msgstr "Створити файли різниці" - -#: app/flatpak-builtins-repo-update.c:63 -msgid "Prune unused objects" -msgstr "Вилучити невикористані об’єкти" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "Only traverse DEPTH parents for each commit (default: -1=infinite)" -msgstr "" -"Переносити лише ГЛИБИНУ батьківських елементів для кожного внеску (типово: " -"-1=нескінченна кількість)" - -#: app/flatpak-builtins-repo-update.c:64 -msgid "DEPTH" -msgstr "ГЛИБИНА" - -#: app/flatpak-builtins-repo-update.c:193 -#, c-format -msgid "Generating delta: %s (%.10s)\n" -msgstr "Створюємо різницю: %s (%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:195 -#, c-format -msgid "Generating delta: %s (%.10s-%.10s)\n" -msgstr "Створюємо різницю: %s (%.10s-%.10s)\n" - -#: app/flatpak-builtins-repo-update.c:203 -#, c-format -msgid "Failed to generate delta %s (%.10s): " -msgstr "Не вдалося створити різницю %s (%.10s): " - -#: app/flatpak-builtins-repo-update.c:206 -#, c-format -msgid "Failed to generate delta %s (%.10s-%.10s): " -msgstr "Не вдалося створити різницю %s (%.10s-%.10s): " - -#: app/flatpak-builtins-repo-update.c:422 -msgid "LOCATION - Update repository metadata" -msgstr "РОЗТАШУВАННЯ - Оновити метадані сховища" - -#: app/flatpak-builtins-repo-update.c:494 -msgid "Updating appstream branch\n" -msgstr "Оновлюємо гілку appstream\n" - -#: app/flatpak-builtins-repo-update.c:515 -msgid "Updating summary\n" -msgstr "Оновлюємо резюме\n" - -#: app/flatpak-builtins-repo-update.c:534 -#, c-format -msgid "Total objects: %u\n" -msgstr "Загалом об’єктів: %u\n" - -#: app/flatpak-builtins-repo-update.c:536 -msgid "No unreachable objects\n" -msgstr "Немає недосяжних об’єктів\n" - -#: app/flatpak-builtins-repo-update.c:538 -#, c-format -msgid "Deleted %u objects, %s freed\n" -msgstr "Вилучено %u об’єктів, вивільнено %s\n" - -#: app/flatpak-builtins-run.c:53 +#: app/flatpak-builtins-run.c:59 msgid "Command to run" msgstr "Команда, яку слід виконати" -#: app/flatpak-builtins-run.c:54 +#: app/flatpak-builtins-run.c:60 msgid "Branch to use" msgstr "Гілка, яку слід використовувати" -#: app/flatpak-builtins-run.c:55 +#: app/flatpak-builtins-run.c:61 msgid "Use development runtime" msgstr "Використовувати розробницьке середовище виконання" -#: app/flatpak-builtins-run.c:56 +#: app/flatpak-builtins-run.c:62 msgid "Runtime to use" msgstr "Середовище виконання, яке слід використовувати" -#: app/flatpak-builtins-run.c:57 +#: app/flatpak-builtins-run.c:63 msgid "Runtime version to use" msgstr "Версія середовища виконання, яку слід використовувати" -#: app/flatpak-builtins-run.c:60 +#: app/flatpak-builtins-run.c:66 msgid "Log accessibility bus calls" msgstr "Записувати до журналу виклики до каналу доступності" -#: app/flatpak-builtins-run.c:61 +#: app/flatpak-builtins-run.c:67 +msgid "Don't proxy accessibility bus calls" +msgstr "Не використовувати проксі для викликів до каналу доступності" + +#: app/flatpak-builtins-run.c:68 +msgid "Don't start portals" +msgstr "Не запускати портали" + +#: app/flatpak-builtins-run.c:69 msgid "Enable file forwarding" msgstr "Увімкнути переспрямовування файлів" -#: app/flatpak-builtins-run.c:82 +#: app/flatpak-builtins-run.c:70 +msgid "Run specified commit" +msgstr "Виконати вказаний внесок" + +#: app/flatpak-builtins-run.c:71 +msgid "Use specified runtime commit" +msgstr "Використати вказаний внесок середовища виконання" + +#: app/flatpak-builtins-run.c:72 +msgid "Run completely sandboxed" +msgstr "Запустити повністю у пісочниці" + +#: app/flatpak-builtins-run.c:95 msgid "APP [args...] - Run an app" msgstr "ПРОГРАМА [аргументи...] - Виконати програму" -#: app/flatpak-builtins-search.c:239 +#: app/flatpak-builtins-search.c:35 +msgid "Arch to search for" +msgstr "Архітектура для пошуку" + +#: app/flatpak-builtins-search.c:254 msgid "TEXT - Search remote apps/runtimes for text" -msgstr "" +msgstr "ТЕКСТ - шукати у віддалених програмах або середовищах текст" -#: app/flatpak-builtins-search.c:249 -#, fuzzy +#: app/flatpak-builtins-search.c:263 msgid "TEXT must be specified" -msgstr "Має бути вказано СХОВИЩЕ" +msgstr "Має бути вказано ТЕКСТ" -#: app/flatpak-builtins-search.c:305 -#, fuzzy +#: app/flatpak-builtins-search.c:316 msgid "Application ID" -msgstr "Ідентифікатор збірки" +msgstr "Ід. програми" -#: app/flatpak-builtins-search.c:306 +#: app/flatpak-builtins-search.c:317 msgid "Version" -msgstr "" +msgstr "Версія" -#: app/flatpak-builtins-search.c:308 -#, fuzzy -msgid "Branch" -msgstr "Гілка:" - -#: app/flatpak-builtins-search.c:310 -#, fuzzy +#: app/flatpak-builtins-search.c:321 msgid "Remotes" -msgstr "Немає сховища %s" +msgstr "Сховища" -#: app/flatpak-builtins-search.c:311 -#, fuzzy +#: app/flatpak-builtins-search.c:322 msgid "Description" -msgstr "Повний опис" +msgstr "Опис" -#: app/flatpak-builtins-search.c:320 -#, fuzzy +#: app/flatpak-builtins-search.c:331 msgid "No matches found" -msgstr "Немає відповідників %s" +msgstr "Відповідників не знайдено" -#: app/flatpak-builtins-uninstall.c:44 +#: app/flatpak-builtins-uninstall.c:50 msgid "Arch to uninstall" msgstr "Архітектура для вилучення" -#: app/flatpak-builtins-uninstall.c:45 +#: app/flatpak-builtins-uninstall.c:51 msgid "Keep ref in local repository" msgstr "Зберігати посилання у локальному сховищі" -#: app/flatpak-builtins-uninstall.c:46 +#: app/flatpak-builtins-uninstall.c:52 msgid "Don't uninstall related refs" msgstr "Не встановлювати пов’язані посилання" -#: app/flatpak-builtins-uninstall.c:47 +#: app/flatpak-builtins-uninstall.c:53 msgid "Remove files even if running" msgstr "Вилучити файли, навіть якщо роботу ще не завершено" -#: app/flatpak-builtins-uninstall.c:70 -msgid "REF... - Uninstall an application" -msgstr "ПОСИЛАННЯ… - Вилучити програму" - -#: app/flatpak-builtins-uninstall.c:81 -msgid "Must specify at least one REF" -msgstr "Слід вказати принаймні одне посилання" +#: app/flatpak-builtins-uninstall.c:56 +msgid "Uninstall all" +msgstr "Вилучити все" + +#: app/flatpak-builtins-uninstall.c:57 +msgid "Uninstall unused" +msgstr "Вилучити невикористане" -#: 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:155 +msgid "REF... - Uninstall an application" +msgstr "ДЖЕРЕЛО… - Вилучити програму" #: app/flatpak-builtins-uninstall.c:164 -#, fuzzy, c-format -msgid "Uninstalling: %s\n" -msgstr "Встановлюємо: %s\n" +msgid "Must specify at least one REF, --unused or --all" +msgstr "Слід вказати принаймні одне джерело, --unused або --all" + +#: app/flatpak-builtins-uninstall.c:167 +msgid "Must not specify REFs when using --all" +msgstr "Не слід вказувати ПОСИЛАННЯ, якщо використовується --all" + +#: app/flatpak-builtins-uninstall.c:170 +msgid "Must not specify REFs when using --unused" +msgstr "Не слід вказувати ПОСИЛАННЯ, якщо використовується --unused" + +#: app/flatpak-builtins-uninstall.c:307 +msgid "Nothing unused to uninstall\n" +msgstr "Не знайдено невикористаного для вилучення\n" #: app/flatpak-builtins-update.c:53 msgid "Arch to update for" @@ -1843,48 +2224,269 @@ msgid "Only update this subpath" msgstr "Оновити лише вказаний підшлях" -#: app/flatpak-builtins-update.c:83 -msgid "[REF...] - Update applications or runtimes" -msgstr "[НАЗВА…] - Оновити програми або середовища виконання" +#: app/flatpak-builtins-update.c:83 +msgid "[REF...] - Update applications or runtimes" +msgstr "[НАЗВА…] - Оновити програми або середовища виконання" + +#: app/flatpak-builtins-update.c:128 +msgid "Looking for updates...\n" +msgstr "Шукаємо оновлення...\n" + +#: app/flatpak-builtins-utils.c:367 +#, c-format +msgid "Remote ‘%s’ found in multiple installations:\n" +msgstr "Віддалене сховище «%s» знайдено у декількох встановленнях:\n" + +#: app/flatpak-builtins-utils.c:374 +msgid "Which do you want to use (0 to abort)?" +msgstr "Яким скористатися (0 — перервати)?" + +#: app/flatpak-builtins-utils.c:376 +#, c-format +msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" +msgstr "" +"Не вибрано віддаленого сховища для визначення «%s», що існує у декількох " +"встановленнях" + +#: app/flatpak-builtins-utils.c:488 app/flatpak-builtins-utils.c:491 +#, c-format +msgid "Updating appstream data for user remote %s" +msgstr "Оновлюємо дані appstream для віддаленого сховища користувача %s" + +#: app/flatpak-builtins-utils.c:498 app/flatpak-builtins-utils.c:501 +#, c-format +msgid "Updating appstream data for remote %s" +msgstr "Оновлюємо дані appstream для віддаленого сховища %s" + +#: app/flatpak-builtins-utils.c:510 app/flatpak-builtins-utils.c:512 +msgid "Error updating" +msgstr "Помилка під час спроби оновлення" + +#: app/flatpak-builtins-utils.c:553 +#, c-format +msgid "Remote \"%s\" not found" +msgstr "Не знайдено віддаленого сховища «%s»" + +#: app/flatpak-cli-transaction.c:73 app/flatpak-cli-transaction.c:79 +#, c-format +msgid "Required runtime for %s (%s) found in remote %s\n" +msgstr "Потрібне для %s (%s) середовище виконання виявлено у сховищі %s\n" + +#: app/flatpak-cli-transaction.c:81 +msgid "Do you want to install it?" +msgstr "Хочете встановити його?" + +#: app/flatpak-cli-transaction.c:86 +#, c-format +msgid "Required runtime for %s (%s) found in remotes: %s\n" +msgstr "" +"Потрібне для %s (%s) середовище виконання виявлено у таких сховищах: %s\n" + +#: app/flatpak-cli-transaction.c:92 +msgid "Which do you want to install (0 to abort)?" +msgstr "Який з пакунків встановити (0 — перервати)?" + +#: app/flatpak-cli-transaction.c:110 +#, c-format +msgid "Configuring %s as new remote '%s'" +msgstr "Налаштовуємо %s як нове віддалене сховище «%s»" + +#: app/flatpak-cli-transaction.c:116 +#, fuzzy, c-format +msgid "" +"The remote '%s', refered to by '%s' at location %s contains additional " +"applications.\n" +"Should the remote be kept for future installations?" +msgstr "" +"У віддаленому сховищі «%s», розміщеному у %s, містяться додаткові програми.\n" +"Хочете зберегти віддалено сховище для наступних встановлень?" + +#: app/flatpak-cli-transaction.c:123 +#, fuzzy, c-format +msgid "" +"The application %s depends on runtimes from:\n" +" %s\n" +"Configure this as new remote '%s'" +msgstr "" +"Ця програма залежить від середовища виконання звідси:\n" +" %s\n" +"Налаштуйте як нове сховище «%s»" + +#: app/flatpak-cli-transaction.c:138 +msgid "install" +msgstr "встановити" + +#: app/flatpak-cli-transaction.c:141 +msgid "update" +msgstr "оновити" + +#: app/flatpak-cli-transaction.c:144 +msgid "install bundle" +msgstr "встановити пакунок" + +#: app/flatpak-cli-transaction.c:147 +msgid "uninstall" +msgstr "вилучити" + +#: app/flatpak-cli-transaction.c:238 +#, c-format +msgid "Installing for user: %s from %s\n" +msgstr "Встановлюємо для користувача %s з %s\n" + +#: app/flatpak-cli-transaction.c:240 +#, c-format +msgid "Installing: %s from %s\n" +msgstr "Встановлюємо: %s з %s\n" + +#: app/flatpak-cli-transaction.c:245 +#, c-format +msgid "Updating for user: %s from %s\n" +msgstr "Оновлюємо для користувача %s з %s\n" + +#: app/flatpak-cli-transaction.c:247 +#, c-format +msgid "Updating: %s from %s\n" +msgstr "Оновлюємо: %s з %s\n" + +#: app/flatpak-cli-transaction.c:254 +#, c-format +msgid "Installing for user: %s from bundle %s\n" +msgstr "Встановлюємо для користувача %s з пакунка %s\n" + +#: app/flatpak-cli-transaction.c:256 +#, c-format +msgid "Installing: %s from bundle %s\n" +msgstr "Встановлюємо: %s з пакунка %s\n" + +#: app/flatpak-cli-transaction.c:262 +#, c-format +msgid "Uninstalling for user: %s\n" +msgstr "Вилучаємо для користувача: %s\n" + +#: app/flatpak-cli-transaction.c:264 +#, c-format +msgid "Uninstalling: %s\n" +msgstr "Вилучаємо: %s\n" + +#: app/flatpak-cli-transaction.c:292 +msgid "No updates.\n" +msgstr "Немає оновлень.\n" + +#: app/flatpak-cli-transaction.c:294 +#, c-format +msgid "Now at %s.\n" +msgstr "Зараз %s.\n" + +#: app/flatpak-cli-transaction.c:321 +#, c-format +msgid "Warning: Failed to %s %s: %s\n" +msgstr "Попередження: не вдалося виконати дію %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:329 +#, c-format +msgid "Failed to %s %s: " +msgstr "Не вдалося виконати %s %s: " + +#: app/flatpak-cli-transaction.c:335 +#, c-format +msgid "Error: Failed to %s %s: %s\n" +msgstr "Помилка: не вдалося виконати дію %s %s: %s\n" + +#: app/flatpak-cli-transaction.c:350 +#, c-format +msgid "Warning: %s is end-of-life, in preference of %s\n" +msgstr "Попередження: термін підтримки %s сплив, натомість маємо %s\n" + +#: app/flatpak-cli-transaction.c:354 +#, c-format +msgid "Warning: %s is end-of-life, with reason: %s\n" +msgstr "Попередження: термін підтримки %s сплив, причина: %s\n" + +#: app/flatpak-cli-transaction.c:509 +msgid "new permissions" +msgstr "нові права доступу" + +#: app/flatpak-cli-transaction.c:509 +msgid "permissions" +msgstr "права доступу" + +#: app/flatpak-cli-transaction.c:514 +msgid "new file access" +msgstr "новий доступ до файла" + +#: app/flatpak-cli-transaction.c:514 +msgid "file access" +msgstr "доступ до файла" + +#: app/flatpak-cli-transaction.c:520 +msgid "new dbus access" +msgstr "новий доступ до dbus" + +#: app/flatpak-cli-transaction.c:520 +msgid "dbus access" +msgstr "доступ до dbus" + +#: app/flatpak-cli-transaction.c:523 +msgid "new dbus ownership" +msgstr "нові права власності для dbus" + +#: app/flatpak-cli-transaction.c:523 +msgid "dbus ownership" +msgstr "права власності для dbus" + +#: app/flatpak-cli-transaction.c:529 +msgid "new system dbus access" +msgstr "новий загальносистемний доступ до dbus" + +#: app/flatpak-cli-transaction.c:529 +msgid "system dbus access" +msgstr "загальносистемний доступ до dbus" + +#: app/flatpak-cli-transaction.c:532 +msgid "new system dbus ownership" +msgstr "нові загальносистемні права власності для dbus" -#: app/flatpak-builtins-update.c:119 -msgid "Looking for updates...\n" -msgstr "Шукаємо оновлення...\n" +#: app/flatpak-cli-transaction.c:532 +msgid "system dbus ownership" +msgstr "загальносистемні права власності для dbus" -#: app/flatpak-builtins-utils.c:365 -#, c-format -msgid "Remote ‘%s’ found in multiple installations:\n" +#: app/flatpak-cli-transaction.c:536 +msgid "new tags" msgstr "" -#: app/flatpak-builtins-utils.c:372 -#, fuzzy -msgid "Which do you want to use (0 to abort)?" -msgstr "Який з пакунків встановити (0 — перервати)?" +#: app/flatpak-cli-transaction.c:536 +msgid "tags" +msgstr "" -#: app/flatpak-builtins-utils.c:374 +#: app/flatpak-cli-transaction.c:564 #, c-format -msgid "No remote chosen to resolve ‘%s’ which exists in multiple installations" -msgstr "" +msgid "Uninstalling from %s:\n" +msgstr "Вилучаємо з %s:\n" -#: 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-cli-transaction.c:586 +#, c-format +msgid "Installing in %s:\n" +msgstr "Встановлюємо у %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-cli-transaction.c:623 +#, c-format +msgid "Updating in %s:\n" +msgstr "Оновлюємо у %s:\n" -#: app/flatpak-builtins-utils.c:493 +#: app/flatpak-cli-transaction.c:645 +msgid "Is this ok" +msgstr "Все як слід" + +#: app/flatpak-cli-transaction.c:728 #, c-format -msgid "Error updating: %s\n" -msgstr "Помилка під час спроби оновлення: %s\n" +msgid "Skipping: %s\n" +msgstr "Пропускаємо: %s\n" -#: app/flatpak-builtins-utils.c:526 -#, fuzzy, c-format -msgid "Remote \"%s\" not found" -msgstr "Дані не знайдено" +#. For updates/!stop_on_first_error we already printed all errors so we make up +#. a different one. +#: app/flatpak-cli-transaction.c:786 +msgid "There were one or more errors" +msgstr "Сталася одна або декілька помилок" #. translators: please keep the leading space #: app/flatpak-main.c:62 @@ -1903,33 +2505,42 @@ msgid "Uninstall an installed application or runtime" msgstr "Вилучити встановлену програму або середовище виконання" -#: app/flatpak-main.c:66 +#: app/flatpak-main.c:68 msgid "List installed apps and/or runtimes" msgstr "Вивести список встановлених програм і/або середовищ виконання" -#: app/flatpak-main.c:67 +#: app/flatpak-main.c:69 msgid "Show info for installed app or runtime" msgstr "" "Показати інформацію щодо встановленої програми або середовища виконання" -#: app/flatpak-main.c:68 +#: app/flatpak-main.c:70 msgid "Configure flatpak" msgstr "Налаштувати flatpak" -#. translators: please keep the leading newline and space #: app/flatpak-main.c:71 -#, fuzzy +msgid "Repair flatpak installation" +msgstr "Відновити встановлення flatpak" + +#: app/flatpak-main.c:72 +msgid "Put apps and/or runtimes onto removable media" +msgstr "" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:75 msgid "" "\n" " Finding applications and runtimes" -msgstr "Підписати програму або середовище виконання" +msgstr "" +"\n" +" Пошук програм і середовищ" -#: app/flatpak-main.c:72 +#: app/flatpak-main.c:76 msgid "Search for remote apps/runtimes" -msgstr "" +msgstr "Шукати віддалені програми або сховища" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:75 +#: app/flatpak-main.c:79 msgid "" "\n" " Running applications" @@ -1937,24 +2548,31 @@ "\n" " Запущені програми" -#: app/flatpak-main.c:76 +#: app/flatpak-main.c:80 msgid "Run an application" msgstr "Запустити програму" -#: app/flatpak-main.c:77 +#: app/flatpak-main.c:81 msgid "Override permissions for an application" msgstr "Перевизначити права доступу для програми" -#: app/flatpak-main.c:78 +#: app/flatpak-main.c:82 msgid "Specify default version to run" msgstr "Вказати типову версію для запуску" -#: app/flatpak-main.c:79 +#: app/flatpak-main.c:83 msgid "Enter the namespace of a running application" msgstr "Введіть простір назв для запущеної програми" +#: app/flatpak-main.c:84 +#, fuzzy +msgid "Enumerate running applications" +msgstr "" +"\n" +" Запущені програми" + #. translators: please keep the leading newline and space -#: app/flatpak-main.c:82 +#: app/flatpak-main.c:87 msgid "" "\n" " Manage file access" @@ -1962,24 +2580,49 @@ "\n" " Керування доступом до файлів" -#: app/flatpak-main.c:83 +#: app/flatpak-main.c:88 msgid "Grant an application access to a specific file" msgstr "Надати програмі доступ до вказаного файла" -#: app/flatpak-main.c:84 +#: app/flatpak-main.c:89 msgid "Revoke access to a specific file" msgstr "Відкликати доступ до вказаного файла" -#: app/flatpak-main.c:85 +#: app/flatpak-main.c:90 msgid "Show information about a specific file" msgstr "Показати інформацію щодо вказаного файла" -#: app/flatpak-main.c:86 +#: app/flatpak-main.c:91 msgid "List exported files" msgstr "Вивести список експортованих файлів" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:89 +#: app/flatpak-main.c:94 +msgid "" +"\n" +" Manage dynamic permissions" +msgstr "" +"\n" +" Керування динамічними правами доступу" + +#: app/flatpak-main.c:95 +msgid "Remove item from permission store" +msgstr "Вилучити пункт зі сховища прав доступу" + +#: app/flatpak-main.c:96 +msgid "List permissions" +msgstr "Показати список прав доступу" + +#: app/flatpak-main.c:97 +msgid "Show app permissions" +msgstr "Показати права доступу програми" + +#: app/flatpak-main.c:98 +msgid "Reset app permissions" +msgstr "Скинути права доступу програми" + +#. translators: please keep the leading newline and space +#: app/flatpak-main.c:101 msgid "" "\n" " Manage remote repositories" @@ -1987,34 +2630,32 @@ "\n" " Керування віддаленими сховищами" -#: app/flatpak-main.c:90 +#: app/flatpak-main.c:102 msgid "List all configured remotes" msgstr "Вивести список усіх налаштованих віддалених сховищ" -#: app/flatpak-main.c:91 +#: app/flatpak-main.c:103 msgid "Add a new remote repository (by URL)" msgstr "Додати нове віддалене сховище (за адресою)" -#: app/flatpak-main.c:92 +#: app/flatpak-main.c:104 msgid "Modify properties of a configured remote" msgstr "Змінити властивості налаштованого віддаленого сховища" -#: app/flatpak-main.c:93 +#: app/flatpak-main.c:105 msgid "Delete a configured remote" msgstr "Вилучити налаштоване віддалене сховище" -#: app/flatpak-main.c:95 +#: app/flatpak-main.c:107 msgid "List contents of a configured remote" msgstr "Вивести список вмісту налаштованого віддаленого сховища" -#: app/flatpak-main.c:96 -#, fuzzy +#: app/flatpak-main.c:108 msgid "Show information about a remote app or runtime" -msgstr "" -"Показати інформацію щодо встановленої програми або середовища виконання" +msgstr "Показати відомості щодо віддаленої програми або середовища" #. translators: please keep the leading newline and space -#: app/flatpak-main.c:99 +#: app/flatpak-main.c:111 msgid "" "\n" " Build applications" @@ -2022,286 +2663,144 @@ "\n" " Зібрати програми" -#: app/flatpak-main.c:100 +#: app/flatpak-main.c:112 msgid "Initialize a directory for building" msgstr "Ініціалізувати каталог для збирання" -#: app/flatpak-main.c:101 +#: app/flatpak-main.c:113 msgid "Run a build command inside the build dir" msgstr "Виконати команду збирання у каталозі збирання" -#: app/flatpak-main.c:102 +#: app/flatpak-main.c:114 msgid "Finish a build dir for export" msgstr "Завершити каталог збирання для експортування" -#: app/flatpak-main.c:103 +#: app/flatpak-main.c:115 msgid "Export a build dir to a repository" msgstr "Експортувати каталог збирання до сховища" -#: app/flatpak-main.c:104 -#, fuzzy +#: app/flatpak-main.c:116 msgid "Create a bundle file from a ref in a local repository" -msgstr "Створити файл пакунка з каталогу збирання" +msgstr "Створити файл пакунка з посилання у локальному сховищі" -#: app/flatpak-main.c:105 +#: app/flatpak-main.c:117 msgid "Import a bundle file" msgstr "Імпортувати файл пакунка" -#: app/flatpak-main.c:106 +#: app/flatpak-main.c:118 msgid "Sign an application or runtime" msgstr "Підписати програму або середовище виконання" -#: app/flatpak-main.c:107 +#: app/flatpak-main.c:119 msgid "Update the summary file in a repository" msgstr "Оновити файл резюме у сховищі" -#: app/flatpak-main.c:108 +#: app/flatpak-main.c:120 msgid "Create new commit based on existing ref" msgstr "Створити внесок на основі наявного посилання" -#: app/flatpak-main.c:109 +#: app/flatpak-main.c:121 msgid "Print information about a repo" msgstr "Вивести інформація щодо сховища" -#: app/flatpak-main.c:126 +#: app/flatpak-main.c:138 msgid "Print debug information during command processing, -vv for more detail" msgstr "" "Вивести діагностичні дані під час обробки команди, -vv для збільшення " "докладності" -#: app/flatpak-main.c:127 +#: app/flatpak-main.c:139 msgid "Print OSTree debug information during command processing" msgstr "Вивести діагностичні дані OSTree під час обробки команди" -#: app/flatpak-main.c:128 +#: app/flatpak-main.c:140 msgid "Show help options" msgstr "Показати параметри доступ до довідки" -#: app/flatpak-main.c:133 +#: app/flatpak-main.c:145 msgid "Print version information and exit" msgstr "Показати дані щодо версії і завершити роботу" -#: app/flatpak-main.c:134 +#: app/flatpak-main.c:146 msgid "Print default arch and exit" msgstr "Вивести дані щодо типової архітектури і завершити роботу" -#: app/flatpak-main.c:135 +#: app/flatpak-main.c:147 msgid "Print supported arches and exit" msgstr "Вивести список підтримуваних архітектур і завершити роботу" -#: app/flatpak-main.c:136 +#: app/flatpak-main.c:148 msgid "Print active gl drivers and exit" msgstr "Вивести дані щодо активних драйверів gl і завершити роботу" -#: app/flatpak-main.c:141 +#: app/flatpak-main.c:153 msgid "Work on user installations" msgstr "Працювати над встановленим користувачем" -#: app/flatpak-main.c:142 +#: app/flatpak-main.c:154 msgid "Work on system-wide installations (default)" msgstr "Працювати над загальносистемними встановленими даними (типово)" -#: app/flatpak-main.c:143 -#, fuzzy +#: app/flatpak-main.c:155 msgid "Work on specific system-wide installation(s)" -msgstr "Працювати із вказаним загальносистемним встановленням" - -#: app/flatpak-main.c:143 -msgid "NAME" -msgstr "НАЗВА" +msgstr "Працювати із вказаними загальносистемними встановленнями" -#: app/flatpak-main.c:169 +#: app/flatpak-main.c:181 msgid "Builtin Commands:" msgstr "Вбудовані команди:" -#: app/flatpak-main.c:370 +#: app/flatpak-main.c:361 msgid "" "The --installation option was used multiple times for a command that works " "on one installation" msgstr "" +"Параметр --installation використано декілька разів для команди, яка працює " +"для одного встановлення" -#: app/flatpak-main.c:489 +#: app/flatpak-main.c:480 #, c-format msgid "Unknown command '%s'" msgstr "Невідома команда «%s»" -#: app/flatpak-main.c:497 +#: app/flatpak-main.c:488 msgid "No command specified" msgstr "Команду не вказано" -#: app/flatpak-main.c:615 +#: app/flatpak-main.c:608 msgid "error:" msgstr "помилка:" -#: app/flatpak-transaction.c:313 -#, c-format -msgid "Found in remote %s\n" -msgstr "Знайдено у віддаленому сховищі %s\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:322 -msgid "Found in several remotes:\n" -msgstr "Знайдено у декількох сховищах:\n" - -#: app/flatpak-transaction.c:327 -msgid "Which do you want to install (0 to abort)?" -msgstr "Який з пакунків встановити (0 — перервати)?" - -#: 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:423 -#, c-format -msgid "The required runtime %s was not found in a configured remote.\n" -msgstr "" -"Потрібного середовища виконання %s у налаштованому віддаленому сховищі не " -"знайдено.\n" - -#: 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:512 -#, c-format -msgid "Remote %s disabled, ignoring %s update" -msgstr "Сховище %s вимкнено, ігноруємо оновлення %s" - -#: app/flatpak-transaction.c:525 -#, c-format -msgid "%s already installed, skipping\n" -msgstr "%s вже встановлено, пропускаємо\n" - -#: 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 "Попередження: не вдалося знайти залежності: %s\n" - -#: app/flatpak-transaction.c:570 -#, c-format -msgid "Invalid require-flatpak argument %s\n" -msgstr "Некоректний аргумент require-flatpak %s\n" - -#: app/flatpak-transaction.c:576 -#, c-format -msgid "%s needs a later flatpak version (%s)" -msgstr "%s потребує новішої версії flatpak (%s)" - -#: app/flatpak-transaction.c:688 -#, 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: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:765 -msgid "update" -msgstr "оновити" - -#: 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:796 -#, c-format -msgid "Now at %s.\n" -msgstr "Зараз %s.\n" - -#: app/flatpak-transaction.c:802 -msgid "No updates.\n" -msgstr "Немає оновлень.\n" - -#: app/flatpak-transaction.c:820 -msgid "install bundle" -msgstr "встановити пакунок" - -#: 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:836 -#, c-format -msgid "Warning: Failed to %s %s: %s\n" -msgstr "Попередження: не вдалося виконати дію %s %s: %s\n" - -#: app/flatpak-transaction.c:841 -#, c-format -msgid "Error: Failed to %s %s: %s\n" -msgstr "Помилка: не вдалося виконати дію %s %s: %s\n" - -#: app/flatpak-transaction.c:846 -msgid "One or more operations failed" -msgstr "Помилка під час виконання однієї або декількох дій" - -#: common/flatpak-context.c:175 +#: common/flatpak-context.c:178 #, c-format msgid "Unknown share type %s, valid types are: %s" msgstr "Невідомий тип спільного ресурсу %s, коректними типами є такі: %s" -#: common/flatpak-context.c:210 +#: common/flatpak-context.c:213 #, c-format msgid "Unknown policy type %s, valid types are: %s" msgstr "Невідомий тип правил %s, коректними типами є такі: %s" -#: common/flatpak-context.c:248 +#: common/flatpak-context.c:251 #, c-format -msgid "Invalid dbus name %s\n" -msgstr "Некоректна назва D-Bus, %s\n" +msgid "Invalid dbus name %s" +msgstr "Некоректна назва D-Bus, %s" -#: common/flatpak-context.c:261 +#: common/flatpak-context.c:264 #, c-format msgid "Unknown socket type %s, valid types are: %s" msgstr "Невідомий тип сокета, %s, коректними типами є такі: %s" -#: common/flatpak-context.c:290 +#: common/flatpak-context.c:293 #, c-format msgid "Unknown device type %s, valid types are: %s" msgstr "Невідомий тип пристрою, %s. Коректними типами є %s" -#: common/flatpak-context.c:318 +#: common/flatpak-context.c:321 #, c-format msgid "Unknown feature type %s, valid types are: %s" msgstr "Невідомий тип можливості %s, коректними типами є такі: %s" -#: common/flatpak-context.c:691 +#: common/flatpak-context.c:762 #, c-format msgid "" "Unknown filesystem location %s, valid locations are: host, home, xdg-" @@ -2310,481 +2809,999 @@ "Невідоме розташування файлової системи, %s, коректними розташуваннями є " "такі: host, home, xdg-*[/...], ~/dir, /dir" -#: common/flatpak-context.c:963 +#: common/flatpak-context.c:1034 #, c-format msgid "Invalid env format %s" msgstr "Некоректне форматування середовища, %s" -#: common/flatpak-context.c:1103 +#: common/flatpak-context.c:1117 common/flatpak-context.c:1125 +#: common/flatpak-context.c:1157 common/flatpak-context.c:1165 +msgid "--policy arguments must be in the form SUBSYSTEM.KEY=[!]VALUE" +msgstr "" + +#: common/flatpak-context.c:1132 common/flatpak-context.c:1172 +msgid "--policy values can't start with \"!\"" +msgstr "" + +#: common/flatpak-context.c:1198 msgid "Share with host" msgstr "Надати спільний доступ вузлу" -#: common/flatpak-context.c:1103 common/flatpak-context.c:1104 +#: common/flatpak-context.c:1198 common/flatpak-context.c:1199 msgid "SHARE" msgstr "СПІЛЬНИЙ РЕСУРС" -#: common/flatpak-context.c:1104 +#: common/flatpak-context.c:1199 msgid "Unshare with host" msgstr "Скасувати надання спільного ресурсу вузлу" -#: common/flatpak-context.c:1105 +#: common/flatpak-context.c:1200 msgid "Expose socket to app" msgstr "Відкрити сокет програмі" -#: common/flatpak-context.c:1105 common/flatpak-context.c:1106 +#: common/flatpak-context.c:1200 common/flatpak-context.c:1201 msgid "SOCKET" msgstr "СОКЕТ" -#: common/flatpak-context.c:1106 +#: common/flatpak-context.c:1201 msgid "Don't expose socket to app" msgstr "Не відкривати сокет програми" -#: common/flatpak-context.c:1107 +#: common/flatpak-context.c:1202 msgid "Expose device to app" msgstr "Відкрити пристрій програмі" -#: common/flatpak-context.c:1107 common/flatpak-context.c:1108 +#: common/flatpak-context.c:1202 common/flatpak-context.c:1203 msgid "DEVICE" msgstr "ПРИСТРІЙ" -#: common/flatpak-context.c:1108 +#: common/flatpak-context.c:1203 msgid "Don't expose device to app" msgstr "Не відкривати пристрій програмі" -#: common/flatpak-context.c:1109 +#: common/flatpak-context.c:1204 msgid "Allow feature" msgstr "Увімкнути можливість" -#: common/flatpak-context.c:1109 common/flatpak-context.c:1110 +#: common/flatpak-context.c:1204 common/flatpak-context.c:1205 msgid "FEATURE" msgstr "МОЖЛИВІСТЬ" -#: common/flatpak-context.c:1110 +#: common/flatpak-context.c:1205 msgid "Don't allow feature" msgstr "Вимкнути можливість" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "Expose filesystem to app (:ro for read-only)" msgstr "Відкрити файлову систему програмі (:ro — лише для читання)" -#: common/flatpak-context.c:1111 +#: common/flatpak-context.c:1206 msgid "FILESYSTEM[:ro]" msgstr "ФАЙЛОВА_СИСТЕМА[:ro]" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "Don't expose filesystem to app" msgstr "Не відкривати файлову систему програмі" -#: common/flatpak-context.c:1112 +#: common/flatpak-context.c:1207 msgid "FILESYSTEM" msgstr "ФАЙЛОВА СИСТЕМА" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "Set environment variable" msgstr "Встановити змінну середовища" -#: common/flatpak-context.c:1113 +#: common/flatpak-context.c:1208 msgid "VAR=VALUE" msgstr "ЗМІННА=ЗНАЧЕННЯ" -#: common/flatpak-context.c:1114 +#: common/flatpak-context.c:1209 msgid "Allow app to own name on the session bus" msgstr "Дозволити програмі бути власником назви на каналі сеансу" -#: common/flatpak-context.c:1114 common/flatpak-context.c:1115 -#: common/flatpak-context.c:1116 common/flatpak-context.c:1117 +#: common/flatpak-context.c:1209 common/flatpak-context.c:1210 +#: common/flatpak-context.c:1211 common/flatpak-context.c:1212 msgid "DBUS_NAME" msgstr "НАЗВА_DBUS" -#: common/flatpak-context.c:1115 +#: common/flatpak-context.c:1210 msgid "Allow app to talk to name on the session bus" msgstr "Дозволити програмі обмінюватися даними з назвою на каналі сеансу" -#: common/flatpak-context.c:1116 +#: common/flatpak-context.c:1211 msgid "Allow app to own name on the system bus" msgstr "Дозволити програмі бути власником назви на каналі системи" -#: common/flatpak-context.c:1117 +#: common/flatpak-context.c:1212 msgid "Allow app to talk to name on the system bus" msgstr "Дозволити програмі обмінюватися даними з назвою на каналі системи" -#: common/flatpak-context.c:1118 +#: common/flatpak-context.c:1213 msgid "Add generic policy option" msgstr "Додати параметр загальних правил" -#: common/flatpak-context.c:1118 common/flatpak-context.c:1119 +#: common/flatpak-context.c:1213 common/flatpak-context.c:1214 msgid "SUBSYSTEM.KEY=VALUE" msgstr "ПІДСИСТЕМА.КЛЮЧ=ЗНАЧЕННЯ" -#: common/flatpak-context.c:1119 +#: common/flatpak-context.c:1214 msgid "Remove generic policy option" msgstr "Вилучити параметр загальних правил" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "Persist home directory" msgstr "Примусово встановити домашній каталог" -#: common/flatpak-context.c:1120 +#: common/flatpak-context.c:1215 msgid "FILENAME" msgstr "НАЗВА ФАЙЛА" #. This is not needed/used anymore, so hidden, but we accept it for backwards compat -#: common/flatpak-context.c:1122 +#: common/flatpak-context.c:1217 msgid "Don't require a running session (no cgroups creation)" msgstr "Не вимагати запущеного сеансу (без створення cgroup)" -#: common/flatpak-dir.c:1044 +#: common/flatpak-dir.c:240 +#, fuzzy, c-format +msgid "Unable to load summary from remote %s: %s" +msgstr "Під час отримання %s з віддаленого сховища %s: " + +#: common/flatpak-dir.c:260 +#, fuzzy, c-format +msgid "Unable to load metadata from remote %s: %s" +msgstr "Оновлюємо додаткові метадані з резюме віддаленого сховища для %s\n" + +#: common/flatpak-dir.c:284 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s" +msgstr "Немає такого джерела «%s» у сховищі %s" + +#: common/flatpak-dir.c:286 common/flatpak-dir.c:4741 +#, c-format +msgid "No such ref '%s' in remote %s" +msgstr "Немає такого джерела «%s» у сховищі %s" + +#: common/flatpak-dir.c:365 +#, c-format +msgid "No flatpak cache in remote '%s' summary" +msgstr "У резюме сховища «%s» немає кешу flatpak" + +#: common/flatpak-dir.c:374 +#, c-format +msgid "No entry for %s in remote '%s' summary flatpak cache " +msgstr "Немає запису %s у кеші flatpak резюме сховища «%s»" + +#: common/flatpak-dir.c:420 +#, c-format +msgid "No entry for %s in remote summary flatpak sparse cache " +msgstr "Немає запису %s у розрідженому кеші flatpak резюме сховища " + +#: common/flatpak-dir.c:1142 +#, fuzzy +msgid "Unable to connect to system bus" +msgstr "Дозволити програмі бути власником назви на каналі системи" + +#: common/flatpak-dir.c:1602 #, c-format msgid "No overrides found for %s" msgstr "Не знайдено перевизначень для %s" -#: common/flatpak-dir.c:1674 +#: common/flatpak-dir.c:1751 common/flatpak-dir.c:2106 +#: common/flatpak-dir.c:2129 common/flatpak-dir.c:2151 +#: common/flatpak-dir.c:12335 common/flatpak-transaction.c:1567 +#: common/flatpak-transaction.c:1594 common/flatpak-utils.c:1482 +#: common/flatpak-utils.c:1576 +#, c-format +msgid "%s not installed" +msgstr "%s не встановлено" + +#: common/flatpak-dir.c:1754 +#, c-format +msgid "%s (commit %s) not installed" +msgstr "%s (внесок %s) не встановлено" + +#: common/flatpak-dir.c:2321 #, c-format msgid "While opening repository %s: " msgstr "Під час спроби відкрити сховище %s: " -#: common/flatpak-dir.c:1908 common/flatpak-dir.c:5460 +#: common/flatpak-dir.c:2581 +#, fuzzy +msgid "No appstream commit to deploy" +msgstr "Внесок для розгортання" + +#: common/flatpak-dir.c:2607 common/flatpak-dir.c:6681 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" +#: common/flatpak-dir.c:2778 common/flatpak-dir.c:4450 +#, fuzzy, c-format +msgid "No such ref (%s, %s) in remote %s or elsewhere" +msgstr "Немає такого джерела «%s» у сховищі %s" + +#: common/flatpak-dir.c:2795 common/flatpak-dir.c:4174 +#: common/flatpak-dir.c:4257 common/flatpak-dir.c:4457 +#: common/flatpak-dir.c:11839 +#, fuzzy, c-format +msgid "Couldn't find latest checksum for ref %s in remote %s" +msgstr "Немає такого джерела «%s» у сховищі %s" + +#: common/flatpak-dir.c:3386 common/flatpak-dir.c:4688 +#: common/flatpak-dir.c:7512 common/flatpak-dir.c:8105 +#: common/flatpak-dir.c:11425 common/flatpak-dir.c:11492 +msgid "Can't pull from untrusted non-gpg verified remote" msgstr "" -#: common/flatpak-dir.c:2761 -#, c-format -msgid "Invalid sha256 for extra data uri %s" -msgstr "Некоректна сума sha256 для адреси додаткових даних %s" +#: common/flatpak-dir.c:3853 common/flatpak-dir.c:3922 +msgid "Extra data not supported for non-gpg-verified local system installs" +msgstr "" + +#: common/flatpak-dir.c:3959 +#, fuzzy, c-format +msgid "Invalid checksum for extra data uri %s" +msgstr "Некоректна контрольна сума додаткових даних, %s" -#: common/flatpak-dir.c:2766 +#: common/flatpak-dir.c:3964 #, c-format msgid "Empty name for extra data uri %s" msgstr "Порожня назва для адреси додаткових даних %s" -#: common/flatpak-dir.c:2773 +#: common/flatpak-dir.c:3971 #, c-format msgid "Unsupported extra data uri %s" msgstr "Непідтримувана адреса додаткових даних %s" -#: common/flatpak-dir.c:2787 +#: common/flatpak-dir.c:3985 #, c-format msgid "Failed to load local extra-data %s: %s" msgstr "Не вдалося завантажити локальні додаткові дані %s: %s" -#: common/flatpak-dir.c:2790 +#: common/flatpak-dir.c:3988 #, c-format msgid "Wrong size for extra-data %s" msgstr "Помилковий розмір додаткових даних %s" -#: common/flatpak-dir.c:2805 +#: common/flatpak-dir.c:4003 #, c-format msgid "While downloading %s: " msgstr "Під час спроби отримання %s: " -#: common/flatpak-dir.c:2812 +#: common/flatpak-dir.c:4010 #, c-format msgid "Wrong size for extra data %s" msgstr "Помилковий розмір додаткових даних %s" -#: common/flatpak-dir.c:2823 +#: common/flatpak-dir.c:4021 #, c-format msgid "Invalid checksum for extra data %s" msgstr "Некоректна контрольна сума додаткових даних, %s" -#: common/flatpak-dir.c:2882 -#, fuzzy +#: common/flatpak-dir.c:4080 msgid "Remote OCI index has no registry uri" -msgstr "НАЗВА [РОЗТАШУВАННЯ] - Додати віддалене сховище" +msgstr "У покажчику віддаленого OCI немає адреси реєстру" -#: common/flatpak-dir.c:3100 +#: common/flatpak-dir.c:4181 #, c-format msgid "%s commit %s already installed" msgstr "%s, внесок %s вже встановлено" -#: common/flatpak-dir.c:3442 common/flatpak-dir.c:3773 +#: common/flatpak-dir.c:4285 common/flatpak-utils.c:4970 +msgid "Image is not a manifest" +msgstr "" + +#: common/flatpak-dir.c:4506 common/flatpak-dir.c:4841 #, c-format msgid "While pulling %s from remote %s: " msgstr "Під час отримання %s з віддаленого сховища %s: " -#: common/flatpak-dir.c:3658 +#: common/flatpak-dir.c:4697 +#, fuzzy +msgid "No summary found" +msgstr "Відповідників не знайдено" + +#: common/flatpak-dir.c:4704 +#, c-format +msgid "" +"GPG verification enabled, but no summary signatures found for remote '%s'" +msgstr "" + +#: common/flatpak-dir.c:4717 +#, c-format +msgid "GPG signatures found for remote '%s', but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4758 common/flatpak-utils.c:4876 +msgid "GPG signatures found, but none are in trusted keyring" +msgstr "" + +#: common/flatpak-dir.c:4783 +msgid "Expected commit metadata to have ref binding information, found none" +msgstr "" + +#: common/flatpak-dir.c:4788 common/flatpak-dir.c:11871 +#, c-format +msgid "Commit has no requested ref ‘%s’ in ref binding metadata" +msgstr "" + +#: common/flatpak-dir.c:4798 +msgid "" +"Expected commit metadata to have collection ID binding information, found " +"none" +msgstr "" + +#: common/flatpak-dir.c:4801 #, c-format -msgid "Can't find %s in remote %s" -msgstr "Не вдалося знайти %s у віддаленому сховищі %s" +msgid "" +"Commit has collection ID ‘%s’ in collection binding metadata, while the " +"remote it came from has collection ID ‘%s’" +msgstr "" -#: common/flatpak-dir.c:4331 +#: common/flatpak-dir.c:5448 msgid "Not enough memory" msgstr "Не вистачає пам'яті" -#: common/flatpak-dir.c:4350 +#: common/flatpak-dir.c:5467 msgid "Failed to read from exported file" msgstr "Не вдалося виконати читання з експортованого файла" -#: common/flatpak-dir.c:4541 +#: common/flatpak-dir.c:5661 msgid "Error reading mimetype xml file" msgstr "Помилка під час читання файла xml типу MIME" -#: common/flatpak-dir.c:4546 +#: common/flatpak-dir.c:5666 msgid "Invalid mimetype xml file" msgstr "Некоректний файл xml типу MIME" -#: common/flatpak-dir.c:5089 +#: common/flatpak-dir.c:5755 +#, c-format +msgid "D-Bus service file '%s' has wrong name" +msgstr "" + +#: common/flatpak-dir.c:6290 msgid "While getting detached metadata: " msgstr "Під час спроби отримання від’єднаних метаданих: " -#: common/flatpak-dir.c:5107 +#: common/flatpak-dir.c:6295 common/flatpak-dir.c:6300 +#: common/flatpak-dir.c:6304 +#, fuzzy +msgid "Extra data missing in detached metadata" +msgstr "Під час спроби отримання від’єднаних метаданих: " + +#: common/flatpak-dir.c:6308 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 +#: common/flatpak-dir.c:6329 common/flatpak-dir.c:6362 msgid "Invalid checksum for extra data" msgstr "Некоректна контрольна сума додаткових даних" -#: common/flatpak-dir.c:5170 +#: common/flatpak-dir.c:6358 +msgid "Wrong size for extra data" +msgstr "Помилковий розмір додаткових даних" + +#: common/flatpak-dir.c:6371 #, c-format msgid "While writing extra data file '%s': " msgstr "Під час записування файла додаткових даних «%s»: " -#: common/flatpak-dir.c:5340 +#: common/flatpak-dir.c:6378 +#, fuzzy, c-format +msgid "Extra data %s missing in detached metadata" +msgstr "Під час спроби отримання від’єднаних метаданих: " + +#: common/flatpak-dir.c:6557 #, c-format msgid "apply_extra script failed, exit status %d" msgstr "Помилка скрипту apply_extra, стан виходу %d" -#: common/flatpak-dir.c:5419 +#: common/flatpak-dir.c:6641 #, c-format msgid "While trying to resolve ref %s: " msgstr "Під час спроби визначити посилання %s: " -#: common/flatpak-dir.c:5434 +#: common/flatpak-dir.c:6656 #, 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 +#: common/flatpak-dir.c:6672 common/flatpak-dir.c:7120 +#: common/flatpak-dir.c:7988 common/flatpak-installation.c:1738 #, c-format msgid "%s branch %s already installed" msgstr "Гілку %s %s вже встановлено" -#: common/flatpak-dir.c:5468 +#: common/flatpak-dir.c:6689 #, c-format msgid "Failed to read commit %s: " msgstr "Не вдалося прочитати внесок %s: " -#: common/flatpak-dir.c:5488 +#: common/flatpak-dir.c:6709 #, c-format msgid "While trying to checkout %s into %s: " msgstr "Під час спроби вивантаження %s до %s: " -#: common/flatpak-dir.c:5513 common/flatpak-dir.c:5544 +#: common/flatpak-dir.c:6734 msgid "While trying to checkout metadata subpath: " msgstr "Під час спроби вивантаження підшляху метаданих: " -#: common/flatpak-dir.c:5554 +#: common/flatpak-dir.c:6765 +#, fuzzy, c-format +msgid "While trying to checkout subpath ‘%s’: " +msgstr "Під час спроби вивантаження %s до %s: " + +#: common/flatpak-dir.c:6775 msgid "While trying to remove existing extra dir: " msgstr "Під час спроби вилучення наявного додаткового каталогу: " -#: common/flatpak-dir.c:5565 +#: common/flatpak-dir.c:6786 msgid "While trying to apply extra data: " msgstr "Під час спроби застосування додаткових даних: " -#: common/flatpak-dir.c:5592 +#: common/flatpak-dir.c:6813 #, c-format msgid "Invalid deployed ref %s: " msgstr "Некоректне посилання на розгортання %s: " -#: common/flatpak-dir.c:5599 +#: common/flatpak-dir.c:6820 #, c-format msgid "Invalid commit ref %s: " msgstr "Некоректне посилання на внесок %s: " -#: common/flatpak-dir.c:5607 +#: common/flatpak-dir.c:6828 #, c-format msgid "Deployed ref %s kind does not match commit (%s)" msgstr "Тип розміщеного посилання %s не відповідає внеску (%s)" -#: common/flatpak-dir.c:5615 +#: common/flatpak-dir.c:6836 #, c-format msgid "Deployed ref %s name does not match commit (%s)" msgstr "Назва розміщеного посилання %s не відповідає внеску (%s)" -#: common/flatpak-dir.c:5623 +#: common/flatpak-dir.c:6844 #, c-format msgid "Deployed ref %s arch does not match commit (%s)" msgstr "Архітектура розміщеного посилання %s не відповідає внеску (%s)" -#: common/flatpak-dir.c:5629 +#: common/flatpak-dir.c:6850 #, c-format msgid "Deployed ref %s branch does not match commit (%s)" msgstr "Гілка розміщеного посилання %s не відповідає внеску (%s)" -#: common/flatpak-dir.c:5635 +#: common/flatpak-dir.c:6856 #, c-format msgid "Deployed ref %s does not match commit (%s)" msgstr "Розміщене джерело %s не відповідає внеску (%s)" -#: common/flatpak-dir.c:5654 +#: common/flatpak-dir.c:6889 msgid "Deployed metadata does not match commit" msgstr "Розміщені метадані не відповідають внеску" -#: common/flatpak-dir.c:6533 +#: common/flatpak-dir.c:7794 #, c-format msgid "This version of %s is already installed" msgstr "Цю версію %s вже встановлено" -#: common/flatpak-dir.c:6540 +#: common/flatpak-dir.c:7801 msgid "Can't change remote during bundle install" msgstr "Не можна змінювати сховище під час встановлення пакунка" -#: common/flatpak-dir.c:7059 +#: common/flatpak-dir.c:7968 +#, c-format +msgid "%s branch already installed" +msgstr "Гілку %s вже встановлено" + +#: common/flatpak-dir.c:8056 +msgid "Can't update to a specific commit without root permissions" +msgstr "" + +#: common/flatpak-dir.c:8264 +#, c-format +msgid "Can't remove %s, it is needed for: %s" +msgstr "" + +#: common/flatpak-dir.c:8307 common/flatpak-installation.c:1897 #, c-format msgid "%s branch %s is not installed" msgstr "%s, гілка %s не встановлено" -#: common/flatpak-dir.c:7304 +#: common/flatpak-dir.c:8552 #, c-format msgid "%s branch %s not installed" msgstr "%s, гілка %s не встановлено" -#: common/flatpak-dir.c:7628 +#: common/flatpak-dir.c:8893 #, c-format msgid "Pruning repo failed: %s" msgstr "Не вдалося спорожнити сховище: %s" -#: common/flatpak-dir.c:8155 +#: common/flatpak-dir.c:9219 +#, c-format +msgid "" +"Remote listing for %s not available; server has no summary file. Check the " +"URL passed to remote-add was valid." +msgstr "" + +#: common/flatpak-dir.c:9520 +#, c-format +msgid "No summary or Flatpak cache available for remote %s" +msgstr "Немає резюме або кешу Flatpak для сховища %s" + +#: common/flatpak-dir.c:9716 #, c-format msgid "Multiple branches available for %s, you must specify one of: " msgstr "" "Доступними є декілька гілок %s, вам слід вказати одне з таких значень: " -#: common/flatpak-dir.c:8176 +#: common/flatpak-dir.c:9737 #, c-format msgid "Nothing matches %s" msgstr "Немає відповідників %s" -#: common/flatpak-dir.c:8258 +#: common/flatpak-dir.c:9837 #, c-format msgid "Can't find ref %s%s%s%s%s" msgstr "Не вдалося знайти посилання %s%s%s%s%s" -#: common/flatpak-dir.c:8300 +#: common/flatpak-dir.c:9884 #, c-format msgid "Error searching remote %s: %s" msgstr "Помилка під час пошуку у віддаленому сховищі %s: %s" -#: common/flatpak-dir.c:8345 +#: common/flatpak-dir.c:9969 #, c-format msgid "Error searching local repository: %s" msgstr "Помилка під час пошуку у локальному сховищі: %s" -#: common/flatpak-dir.c:8471 +#: common/flatpak-dir.c:10114 #, c-format -msgid "%s %s not installed" -msgstr "Не встановлено %s %s" +msgid "%s/%s/%s not installed" +msgstr "%s/%s/%s не встановлено" -#: common/flatpak-dir.c:8638 +#: common/flatpak-dir.c:10284 #, c-format msgid "Could not find installation %s" msgstr "Не вдалося знайти встановлення %s" -#: common/flatpak-dir.c:9236 +#: common/flatpak-dir.c:10663 common/flatpak-dir.c:10671 +#, fuzzy +msgid "Invalid .flatpakref" +msgstr "Некоректний ключ gpg" + +#: common/flatpak-dir.c:10724 common/flatpak-dir.c:10827 +msgid "Collection ID requires GPG key to be provided" +msgstr "" + +#: common/flatpak-dir.c:10771 +#, fuzzy, c-format +msgid "Invalid file format, no %s group" +msgstr "Некоректний формат файла" + +#: common/flatpak-dir.c:10781 common/flatpak-dir.c:10786 +#, fuzzy, c-format +msgid "Invalid file format, no %s specified" +msgstr "Некоректний формат файла" + +#. Check some minimal size so we don't get crap +#: common/flatpak-dir.c:10809 +#, fuzzy +msgid "Invalid file format, gpg key invalid" +msgstr "Некоректний формат файла" + +#: common/flatpak-dir.c:10871 #, c-format msgid "Runtime %s, branch %s is already installed" msgstr "Середовище виконання %s, гілка %s вже встановлено" -#: common/flatpak-dir.c:9237 +#: common/flatpak-dir.c:10872 #, 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:11155 +#, c-format +msgid "Can't remove remote '%s' with installed ref %s (at least)" +msgstr "" -#: common/flatpak-dir.c:10332 -msgid "No flatpak cache in remote summary" -msgstr "У резюме сховища немає кешу flatpak" +#: common/flatpak-dir.c:11250 +#, fuzzy, c-format +msgid "Invalid character '/' in remote name: %s" +msgstr "Немає такого джерела «%s» у сховищі %s" -#: common/flatpak-dir.c:10342 +#: common/flatpak-dir.c:11255 #, c-format -msgid "No entry for %s in remote summary flatpak cache " -msgstr "Немає запису %s у кеші flatpak резюме сховища " +msgid "No configuration for remote %s specified" +msgstr "" + +#: common/flatpak-dir.c:11496 +#, fuzzy +msgid "No metadata branch for OCI" +msgstr "Вивести метадані для гілки" + +#: common/flatpak-installation.c:751 +#, fuzzy, c-format +msgid "Ref %s not installed" +msgstr "%s не встановлено" + +#: common/flatpak-installation.c:793 +#, fuzzy, c-format +msgid "App %s not installed" +msgstr "%s не встановлено" -#: common/flatpak-run.c:1456 +#: common/flatpak-installation.c:1778 +#, fuzzy, c-format +msgid "As requested, %s was only pulled, but not installed" +msgstr "Потрібне розширення %s встановлено лише частково" + +#: common/flatpak-oci-registry.c:1679 #, c-format -msgid "Failed to open flatpak-info temp file: %s" -msgstr "Не вдалося відкрити тимчасовий файл flatpak-info: %s" +msgid "No gpg key found with ID %s (homedir: %s)" +msgstr "" -#: common/flatpak-run.c:1530 common/flatpak-run.c:1540 +#: common/flatpak-oci-registry.c:1686 #, c-format -msgid "Failed to open temp file: %s" -msgstr "Не вдалося відкрити тимчасовий файл: %s" +msgid "Unable to lookup key ID %s: %d)" +msgstr "" + +#: common/flatpak-oci-registry.c:1694 +#, fuzzy, c-format +msgid "Error signing commit: %d" +msgstr "Помилка під час перенесення: %s\n" + +#: common/flatpak-remote.c:822 +#, fuzzy, c-format +msgid "Bad remote name: %s" +msgstr "Немає такого джерела «%s» у сховищі %s" + +#: common/flatpak-remote.c:826 +#, fuzzy +msgid "No url specified" +msgstr "Команду не вказано" + +#: common/flatpak-run.c:690 +msgid "Failed to open app info file" +msgstr "Не вдалося відкрити файл інформації щодо програми" -#: common/flatpak-run.c:1883 +#: common/flatpak-run.c:790 msgid "Unable to create sync pipe" msgstr "Не вдалося створити канал синхронізації" -#: common/flatpak-run.c:1910 -#, c-format -msgid "Failed to open app info file: %s" -msgstr "Не вдалося відкрити файл інформації щодо програми: %s" - -#: common/flatpak-run.c:1940 +#: common/flatpak-run.c:824 msgid "Failed to sync with dbus proxy" msgstr "Не вдалося виконати синхронізацію із проміжним D-Bus" -#: common/flatpak-run.c:2700 +#: common/flatpak-run.c:863 +#, fuzzy, c-format +msgid "Failed to determine parts from ref: %s" +msgstr "Не вдалося відкрити тимчасовий файл: %s" + +#: common/flatpak-run.c:1416 +msgid "No systemd user session available, cgroups not available" +msgstr "" + +#: common/flatpak-run.c:1726 +#, fuzzy +msgid "Unable to allocate instance id" +msgstr "Не вдалося створити канал синхронізації" + +#: common/flatpak-run.c:1843 common/flatpak-run.c:1853 +#, fuzzy, c-format +msgid "Failed to open flatpak-info file: %s" +msgstr "Не вдалося відкрити тимчасовий файл flatpak-info: %s" + +#: common/flatpak-run.c:1873 +#, fuzzy, c-format +msgid "Failed to open bwrapinfo.json file: %s" +msgstr "Не вдалося відкрити тимчасовий файл flatpak-info: %s" + +#: common/flatpak-run.c:2187 +#, fuzzy +msgid "Initialize seccomp failed" +msgstr "Ініціалізувати програми з названої програми" + +#: common/flatpak-run.c:2226 +msgid "Failed to add architecture to seccomp filter" +msgstr "" + +#: common/flatpak-run.c:2235 +msgid "Failed to add multiarch architecture to seccomp filter" +msgstr "" + +#. unknown syscall +#: common/flatpak-run.c:2254 common/flatpak-run.c:2268 +#, fuzzy, c-format +msgid "Failed to block syscall %d" +msgstr "Не вдалося виконати %s %s: " + +#: common/flatpak-run.c:2299 +#, fuzzy +msgid "Failed to export bpf" +msgstr "Не вдалося виконати читання з експортованого файла" + +#: common/flatpak-run.c:2355 +#, fuzzy, c-format +msgid "Invalid group: %d" +msgstr "Некоректний pid %s" + +#: common/flatpak-run.c:2828 #, c-format msgid "ldconfig failed, exit status %d" msgstr "Помилка ldconfig, стан виходу %d" -#: common/flatpak-utils.c:624 +#: common/flatpak-run.c:2835 +#, fuzzy +msgid "Can't open generated ld.so.cache" +msgstr "не вдалося відкрити простір назв %s: %s" + +#: common/flatpak-run.c:2947 +#, fuzzy, c-format +msgid "Wrong number of components in runtime %s" +msgstr "Помилкова кількість параметрів" + +#: common/flatpak-transaction.c:1347 +#, c-format +msgid "Warning: Problem looking for related refs: %s" +msgstr "Попередження: проблема під час пошуку пов’язаних посилань: %s" + +#: common/flatpak-transaction.c:1417 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which was not found" +msgstr "Для програми %s потрібен %s, якого не знайдено" + +#: common/flatpak-transaction.c:1433 +#, fuzzy, c-format +msgid "The application %s requires the runtime %s which is not installed" +msgstr "Для програми %s потрібен %s, який не встановлено" + +#: common/flatpak-transaction.c:1571 +#, c-format +msgid "Remote %s disabled, ignoring %s update" +msgstr "Сховище %s вимкнено, ігноруємо оновлення %s" + +#: common/flatpak-transaction.c:1583 +#, c-format +msgid "%s is already installed" +msgstr "%s вже встановлено" + +#: common/flatpak-transaction.c:1586 +#, c-format +msgid "%s is already installed from remote %s" +msgstr "%s вже встановлено із віддаленого сховища %s" + +#: common/flatpak-transaction.c:1699 +#, fuzzy, c-format +msgid "Invalid .flatpakref: %s" +msgstr "Некоректне посилання на внесок %s: " + +#: common/flatpak-transaction.c:1787 +#, c-format +msgid "Error updating remote metadata for '%s': %s" +msgstr "Помилка під час оновлення метаданих сховища для «%s»: %s" + +#: common/flatpak-transaction.c:2025 +#, c-format +msgid "" +"Warning: Treating remote fetch error as non-fatal since %s is already " +"installed: %s" +msgstr "" + +#: common/flatpak-transaction.c:2035 +#, c-format +msgid "Warning: Can't find %s metadata for dependencies: %s" +msgstr "Попередження: не вдалося знайти метадані %s для залежностей: %s" + +#: common/flatpak-transaction.c:2345 +#, fuzzy, c-format +msgid "Invalid .flatpakrepo: %s" +msgstr "Некоректний pid %s" + +#: common/flatpak-transaction.c:2654 +msgid "Aborted by user" +msgstr "Перервано користувачем" + +#: common/flatpak-transaction.c:2680 +#, c-format +msgid "Skipping %s due to previous error" +msgstr "Пропускаємо %s через попередню помилку" + +#: common/flatpak-transaction.c:2859 +msgid "Aborted due to failure" +msgstr "Перервано через критичну помилку" + +#: common/flatpak-utils.c:638 #, c-format msgid "Migrating %s to %s\n" msgstr "Переносимо %s на %s\n" -#: common/flatpak-utils.c:630 +#: common/flatpak-utils.c:644 #, c-format msgid "Error during migration: %s\n" msgstr "Помилка під час перенесення: %s\n" -#: common/flatpak-utils.c:2988 +#: common/flatpak-utils.c:753 +msgid "Name can't be empty" +msgstr "" + +#: common/flatpak-utils.c:760 +msgid "Name can't be longer than 255 characters" +msgstr "" + +#: common/flatpak-utils.c:773 +msgid "Name can't start with a period" +msgstr "" + +#: common/flatpak-utils.c:779 +#, c-format +msgid "Name can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:795 +msgid "Name can't end with a period" +msgstr "" + +#: common/flatpak-utils.c:802 common/flatpak-utils.c:814 +msgid "Only last name segment can contain -" +msgstr "" + +#: common/flatpak-utils.c:805 +#, c-format +msgid "Name segment can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:817 +#, c-format +msgid "Name can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:826 +msgid "Names must contain at least 2 periods" +msgstr "" + +#: common/flatpak-utils.c:1016 +msgid "Branch can't be empty" +msgstr "" + +#: common/flatpak-utils.c:1026 +#, c-format +msgid "Branch can't start with %c" +msgstr "" + +#: common/flatpak-utils.c:1036 +#, c-format +msgid "Branch can't contain %c" +msgstr "" + +#: common/flatpak-utils.c:1087 +#, fuzzy, c-format +msgid "Wrong number of components in %s" +msgstr "Помилкова кількість параметрів" + +#: common/flatpak-utils.c:1093 +#, fuzzy, c-format +msgid "%s is not application or runtime" +msgstr "Підписати програму або середовище виконання" + +#: common/flatpak-utils.c:1099 +#, fuzzy, c-format +msgid "Invalid name %s: %s" +msgstr "Некоректна назва D-Bus, %s" + +#: common/flatpak-utils.c:1105 +#, fuzzy, c-format +msgid "Invalid arch %s" +msgstr "Некоректний pid %s" + +#: common/flatpak-utils.c:1111 common/flatpak-utils.c:1216 +#, fuzzy, c-format +msgid "Invalid branch %s: %s" +msgstr "Типова гілка: %s\n" + +#: common/flatpak-utils.c:1199 +#, fuzzy, c-format +msgid "Invalid id %s: %s" +msgstr "Некоректний pid %s" + +#: common/flatpak-utils.c:2738 msgid "No extra data sources" msgstr "Немає джерел додаткових даних" -#: common/flatpak-utils.c:6576 +#: common/flatpak-utils.c:3712 +#, c-format +msgid "Extracting icons for component %s\n" +msgstr "Видобуваємо піктограми для компонента %s\n" + +#: common/flatpak-utils.c:3716 +#, c-format +msgid "Error copying 64x64 icon: %s\n" +msgstr "Помилка під час копіювання піктограми 64x64: %s\n" + +#: common/flatpak-utils.c:3721 +#, c-format +msgid "Error copying 128x128 icon: %s\n" +msgstr "Помилка під час копіювання піктограми 128x128: %s\n" + +#: common/flatpak-utils.c:3917 +#, c-format +msgid "%s is end-of-life, ignoring\n" +msgstr "Строк підтримки %s минув, ігноруємо\n" + +#: common/flatpak-utils.c:3926 +#, c-format +msgid "No appstream data for %s: %s\n" +msgstr "Немає даних appstream для %s: %s\n" + +#: common/flatpak-utils.c:4744 +#, fuzzy +msgid "Invalid bundle, no ref in metadata" +msgstr "Некоректна контрольна сума додаткових даних" + +#: common/flatpak-utils.c:4836 +#, c-format +msgid "Collection ‘%s’ of bundle doesn’t match collection ‘%s’ of remote" +msgstr "" + +#: common/flatpak-utils.c:4915 +msgid "Metadata in header and app are inconsistent" +msgstr "" + +#: common/flatpak-utils.c:5062 +#, c-format +msgid "No ref specified for OCI image %s" +msgstr "" + +#: common/flatpak-utils.c:5068 +#, c-format +msgid "Wrong ref (%s) specified for OCI image %s, expected %s" +msgstr "" + +#: common/flatpak-utils.c:5137 +#, c-format +msgid "Wrong layer checksum, expected %s, was %s" +msgstr "" + +#: common/flatpak-utils.c:5648 #, c-format msgid "Downloading metadata: %u/(estimating) %s" msgstr "Отримуємо метадані: %u/(оцінка) %s" -#: common/flatpak-utils.c:6600 +#: common/flatpak-utils.c:5672 #, c-format msgid "Downloading: %s/%s" msgstr "Отримуємо: %s/%s" -#: common/flatpak-utils.c:6620 +#: common/flatpak-utils.c:5693 #, c-format msgid "Downloading extra data: %s/%s" msgstr "Отримуємо додаткові дані: %s з %s" -#: common/flatpak-utils.c:6625 +#: common/flatpak-utils.c:5698 #, c-format msgid "Downloading files: %d/%d %s" msgstr "Отримуємо файли: %d з %d %s" +#: common/flatpak-utils.c:5782 +#, c-format +msgid "Invalid require-flatpak argument %s" +msgstr "" + +#: common/flatpak-utils.c:5789 +#, c-format +msgid "%s needs a later flatpak version (%s)" +msgstr "%s потребує новішої версії flatpak (%s)" + +#: common/flatpak-utils.c:5835 +msgid "Empty string is not a number" +msgstr "" + +#: common/flatpak-utils.c:5861 +#, c-format +msgid "“%s” is not an unsigned number" +msgstr "" + +#: common/flatpak-utils.c:5871 +#, c-format +msgid "Number “%s” is out of bounds [%s, %s]" +msgstr "" + #. SECURITY: #. - Normal users do not need authentication to install signed applications #. from signed repositories, as this cannot exploit a system. @@ -2903,108 +3920,20 @@ 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 "Redirect collection ID: %s\n" +#~ msgstr "Ідентифікатор збірки переспрямовування: %s\n" -#~ msgid "Failed to create temporary file" -#~ msgstr "Не вдалося створити тимчасовий файл" +#~ msgid "Invalid sha256 for extra data uri %s" +#~ msgstr "Некоректна сума sha256 для адреси додаткових даних %s" -#~ msgid "Failed to unlink temporary file" -#~ msgstr "Не вдалося відв’язати тимчасовий файл" +#~ msgid "Invalid sha256 for extra data" +#~ msgstr "Некоректна контрольна сума sha256 для додаткових даних" -#~ msgid "Failed to write to temporary file" -#~ msgstr "Не вдалося виконати запис до тимчасового файла" +#~ msgid "Is this ok?" +#~ msgstr "Все як слід?" -#, fuzzy -#~ msgid "Installing %s" -#~ msgstr "Встановлюємо: %s\n" +#~ msgid "Add OCI registry" +#~ msgstr "Додати реєстр OCI" -#, fuzzy -#~ msgid "Post-Install %s" +#~ msgid "Installing: %s\n" #~ msgstr "Встановлюємо: %s\n" - -#~ msgid "NAME:SHA256:DOWNLOAD-SIZE:INSTALL-SIZE:URL" -#~ msgstr "НАЗВА:SHA256:РОЗМІР_ОТРИМАНОГО:РОЗМІР_ВСТАНОВЛЕНОГО:АДРЕСА" - -#~ msgid "'%s' is not a valid runtime name: %s" -#~ msgstr "«%s» не є коректною назвою середовища виконання: %s" - -#~ msgid "'%s' is not a valid sdk name: %s" -#~ msgstr "«%s» не є коректною назвою sdk: %s" - -#, fuzzy -#~ msgid "OCI repo Filename or uri must be specified" -#~ msgstr "Слід вказати назву файла або адресу" - -#~ msgid "Data not found for ref %s" -#~ msgstr "Дані для посилання %s не знайдено" - -#~ msgid "Install from local bundle file" -#~ msgstr "Встановити із локального файла пакунка" - -#~ msgid "Load options from file or uri" -#~ msgstr "Завантажити параметри з файла або адресу" - -#, fuzzy -#~ msgid "Invalid ref, no digest" -#~ msgstr "Некоректне форматування середовища, %s" - -#, fuzzy -#~ msgid "Unsupported manifest version %d" -#~ msgstr "Непідтримувана адреса додаткових даних %s" - -#, fuzzy -#~ msgid "Unsupported manifest list version %d" -#~ msgstr "Непідтримувана адреса додаткових даних %s" - -#, fuzzy -#~ msgid "No manfest found for arch %s, os %s" -#~ msgstr "Дані для посилання %s не знайдено" - -#, fuzzy -#~ msgid "Unsupported OCI media type %s" -#~ msgstr "Непідтримувана адреса додаткових даних %s" - -#~ msgid "Remote extra metadata not available; server has no summary file" -#~ msgstr "" -#~ "Додаткові метадані віддаленого сховища недоступні; на сервері немає файла " -#~ "резюме" - -#~ msgid "Data not available; server has no summary file" -#~ msgstr "Дані недоступні; на сервері немає файла резюме" - -#~ msgid "This version of ostree is to old to support OCI exports" -#~ msgstr "Ця версія OSTree є надто старою для підтримки експортування OCI" - -#~ msgid "This version of flatpak is not compiled with libarchive support" -#~ msgstr "Цю версію flatpak не було зібрано із підтримкою libarchive" - -#~ msgid "The Flatpak Project" -#~ msgstr "Проект Flatpak" - -#~ msgid "https://cgit.freedesktop.org/xdg-app/xdg-app/" -#~ msgstr "https://cgit.freedesktop.org/xdg-app/xdg-app/" - -#~ msgid "package-x-generic" -#~ msgstr "package-x-generic" - -#~ msgid "auth_admin" -#~ msgstr "auth_admin" - -#~ msgid "auth_admin_keep" -#~ msgstr "auth_admin_keep" - -#~ msgid "yes" -#~ msgstr "так" diff -Nru flatpak-0.11.3/portal/flatpak-portal-app-info.c flatpak-1.0.7/portal/flatpak-portal-app-info.c --- flatpak-0.11.3/portal/flatpak-portal-app-info.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/flatpak-portal-app-info.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,227 @@ +/* + * Copyright © 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 "libglnx/libglnx.h" +#include "flatpak-portal-app-info.h" +#include "flatpak-portal-error.h" + +G_LOCK_DEFINE (app_infos); +static GHashTable *app_infos; + +static void +ensure_app_infos (void) +{ + if (app_infos == NULL) + app_infos = g_hash_table_new_full (g_str_hash, g_str_equal, + NULL, (GDestroyNotify) g_key_file_unref); +} + +static GKeyFile * +lookup_cached_app_info_by_sender (const char *sender) +{ + GKeyFile *keyfile = NULL; + + G_LOCK (app_infos); + keyfile = g_hash_table_lookup (app_infos, sender); + if (keyfile) + g_key_file_ref (keyfile); + G_UNLOCK (app_infos); + + return keyfile; +} + +static void +invalidate_cached_app_info_by_sender (const char *sender) +{ + G_LOCK (app_infos); + g_hash_table_remove (app_infos, sender); + G_UNLOCK (app_infos); +} + +static void +add_cached_app_info_by_sender (const char *sender, GKeyFile *keyfile) +{ + G_LOCK (app_infos); + g_hash_table_add (app_infos, g_key_file_ref (keyfile)); + G_UNLOCK (app_infos); +} + + +/* Returns NULL on failure, keyfile with name "" if not sandboxed, and full app-info otherwise */ +static GKeyFile * +parse_app_id_from_fileinfo (int pid) +{ + g_autofree char *root_path = NULL; + glnx_autofd int root_fd = -1; + glnx_autofd int info_fd = -1; + struct stat stat_buf; + + g_autoptr(GError) local_error = NULL; + g_autoptr(GMappedFile) mapped = NULL; + g_autoptr(GKeyFile) metadata = NULL; + + root_path = g_strdup_printf ("/proc/%u/root", pid); + root_fd = openat (AT_FDCWD, root_path, O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC | O_NOCTTY); + if (root_fd == -1) + { + /* Not able to open the root dir shouldn't happen. Probably the app died and + * we're failing due to /proc/$pid not existing. In that case fail instead + of treating this as privileged. */ + g_debug ("Unable to open %s", root_path); + return NULL; + } + + metadata = g_key_file_new (); + + info_fd = openat (root_fd, ".flatpak-info", O_RDONLY | O_CLOEXEC | O_NOCTTY); + if (info_fd == -1) + { + if (errno == ENOENT) + { + /* No file => on the host */ + g_key_file_set_string (metadata, FLATPAK_METADATA_GROUP_APPLICATION, + FLATPAK_METADATA_KEY_NAME, ""); + return g_steal_pointer (&metadata); + } + + return NULL; /* Some weird error => failure */ + } + + if (fstat (info_fd, &stat_buf) != 0 || !S_ISREG (stat_buf.st_mode)) + return NULL; /* Some weird fd => failure */ + + mapped = g_mapped_file_new_from_fd (info_fd, FALSE, &local_error); + if (mapped == NULL) + { + g_warning ("Can't map .flatpak-info file: %s", local_error->message); + return NULL; + } + + if (!g_key_file_load_from_data (metadata, + g_mapped_file_get_contents (mapped), + g_mapped_file_get_length (mapped), + G_KEY_FILE_NONE, &local_error)) + { + g_warning ("Can't load .flatpak-info file: %s", local_error->message); + return NULL; + } + + return g_steal_pointer (&metadata); +} + +GKeyFile * +flatpak_invocation_lookup_app_info (GDBusMethodInvocation *invocation, + GCancellable *cancellable, + GError **error) +{ + GDBusConnection *connection = g_dbus_method_invocation_get_connection (invocation); + const gchar *sender = g_dbus_method_invocation_get_sender (invocation); + + g_autoptr(GDBusMessage) msg = NULL; + g_autoptr(GDBusMessage) reply = NULL; + g_autoptr(GVariantIter) iter = NULL; + const char *key; + GVariant *value; + GKeyFile *keyfile; + + keyfile = lookup_cached_app_info_by_sender (sender); + if (keyfile) + return keyfile; + + msg = g_dbus_message_new_method_call ("org.freedesktop.DBus", + "/org/freedesktop/DBus", + "org.freedesktop.DBus", + "GetConnectionCredentials"); + g_dbus_message_set_body (msg, g_variant_new ("(s)", sender)); + + reply = g_dbus_connection_send_message_with_reply_sync (connection, msg, + G_DBUS_SEND_MESSAGE_FLAGS_NONE, + 30000, + NULL, + cancellable, + error); + if (reply == NULL) + return NULL; + + if (g_dbus_message_get_message_type (reply) == G_DBUS_MESSAGE_TYPE_METHOD_RETURN) + { + GVariant *body = g_dbus_message_get_body (reply); + + g_variant_get (body, "(a{sv})", &iter); + while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) + { + if (strcmp (key, "ProcessID") == 0) + { + guint32 pid = g_variant_get_uint32 (value); + keyfile = parse_app_id_from_fileinfo (pid); + break; + } + } + } + + if (keyfile == NULL) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Can't find peer app id"); + return NULL; + } + + add_cached_app_info_by_sender (sender, keyfile); + + return keyfile; +} + +static void +name_owner_changed (GDBusConnection *connection, + const gchar *sender_name, + const gchar *object_path, + const gchar *interface_name, + const gchar *signal_name, + GVariant *parameters, + gpointer user_data) +{ + const char *name, *from, *to; + + g_variant_get (parameters, "(sss)", &name, &from, &to); + + if (name[0] == ':' && + strcmp (name, from) == 0 && + strcmp (to, "") == 0) + { + invalidate_cached_app_info_by_sender (name); + } +} + +void +flatpak_connection_track_name_owners (GDBusConnection *connection) +{ + ensure_app_infos (); + g_dbus_connection_signal_subscribe (connection, + "org.freedesktop.DBus", + "org.freedesktop.DBus", + "NameOwnerChanged", + "/org/freedesktop/DBus", + NULL, + G_DBUS_SIGNAL_FLAGS_NONE, + name_owner_changed, + NULL, NULL); +} diff -Nru flatpak-0.11.3/portal/flatpak-portal-app-info.h flatpak-1.0.7/portal/flatpak-portal-app-info.h --- flatpak-0.11.3/portal/flatpak-portal-app-info.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/flatpak-portal-app-info.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,44 @@ +/* + * Copyright © 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_PORTAL_APP_INFO_H__ +#define __FLATPAK_PORTAL_APP_INFO_H__ + +#define FLATPAK_METADATA_GROUP_APPLICATION "Application" +#define FLATPAK_METADATA_GROUP_RUNTIME "Runtime" +#define FLATPAK_METADATA_GROUP_INSTANCE "Instance" +#define FLATPAK_METADATA_GROUP_CONTEXT "Context" +#define FLATPAK_METADATA_KEY_NAME "name" +#define FLATPAK_METADATA_KEY_ARCH "arch" +#define FLATPAK_METADATA_KEY_RUNTIME "runtime" +#define FLATPAK_METADATA_KEY_BRANCH "branch" +#define FLATPAK_METADATA_KEY_EXTRA_ARGS "extra-args" +#define FLATPAK_METADATA_KEY_APP_COMMIT "app-commit" +#define FLATPAK_METADATA_KEY_RUNTIME_COMMIT "runtime-commit" +#define FLATPAK_METADATA_KEY_SHARED "shared" +#define FLATPAK_METADATA_KEY_INSTANCE_PATH "instance-path" + +GKeyFile * flatpak_invocation_lookup_app_info (GDBusMethodInvocation *invocation, + GCancellable *cancellable, + GError **error); + +void flatpak_connection_track_name_owners (GDBusConnection *connection); + +#endif /* __FLATPAK_PORTAL_APP_INFO_H__ */ diff -Nru flatpak-0.11.3/portal/flatpak-portal.c flatpak-1.0.7/portal/flatpak-portal.c --- flatpak-0.11.3/portal/flatpak-portal.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/flatpak-portal.c 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,867 @@ +/* + * Copyright © 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 "flatpak-portal-dbus.h" +#include "flatpak-portal.h" +#include "flatpak-portal-app-info.h" +#include "flatpak-portal-error.h" + +#define IDLE_TIMEOUT_SECS 10 * 60 + +static GHashTable *client_pid_data_hash = NULL; +static GDBusConnection *session_bus = NULL; +static gboolean no_idle_exit = FALSE; +static guint name_owner_id = 0; +static GMainLoop *main_loop; +static PortalFlatpak *portal; +static gboolean opt_verbose; + +static void +skeleton_died_cb (gpointer data) +{ + g_debug ("skeleton finalized, exiting"); + g_main_loop_quit (main_loop); +} + +static gboolean +unref_skeleton_in_timeout_cb (gpointer user_data) +{ + static gboolean unreffed = FALSE; + + g_debug ("unreffing portal main ref"); + if (!unreffed) + { + g_object_unref (portal); + unreffed = TRUE; + } + + return G_SOURCE_REMOVE; +} + +static void +unref_skeleton_in_timeout (void) +{ + if (name_owner_id) + g_bus_unown_name (name_owner_id); + name_owner_id = 0; + + /* After we've lost the name or idled we drop the main ref on the helper + so that we'll exit when it drops to zero. However, if there are + outstanding calls these will keep the refcount up during the + execution of them. We do the unref on a timeout to make sure + we're completely draining the queue of (stale) requests. */ + g_timeout_add (500, unref_skeleton_in_timeout_cb, NULL); +} + +static guint idle_timeout_id = 0; + +static gboolean +idle_timeout_cb (gpointer user_data) +{ + if (name_owner_id && g_hash_table_size (client_pid_data_hash) == 0) + { + g_debug ("Idle - unowning name"); + unref_skeleton_in_timeout (); + } + + idle_timeout_id = 0; + return G_SOURCE_REMOVE; +} + +G_LOCK_DEFINE_STATIC (idle); +static void +schedule_idle_callback (void) +{ + G_LOCK (idle); + + if (!no_idle_exit) + { + if (idle_timeout_id != 0) + g_source_remove (idle_timeout_id); + + idle_timeout_id = g_timeout_add_seconds (IDLE_TIMEOUT_SECS, idle_timeout_cb, NULL); + } + + G_UNLOCK (idle); +} + +typedef struct +{ + GPid pid; + char *client; + guint child_watch; +} PidData; + +static void +pid_data_free (PidData *data) +{ + g_free (data->client); + g_free (data); +} + +static void +child_watch_died (GPid pid, + gint status, + gpointer user_data) +{ + PidData *pid_data = user_data; + + g_autoptr(GVariant) signal_variant = NULL; + + g_debug ("Client Pid %d died", pid_data->pid); + + signal_variant = g_variant_ref_sink (g_variant_new ("(uu)", pid, status)); + g_dbus_connection_emit_signal (session_bus, + pid_data->client, + "/org/freedesktop/portal/Flatpak", + "org.freedesktop.portal.Flatpak", + "SpawnExited", + signal_variant, + NULL); + + /* This frees the pid_data, so be careful */ + g_hash_table_remove (client_pid_data_hash, GUINT_TO_POINTER (pid_data->pid)); + + /* This might have caused us to go to idle (zero children) */ + schedule_idle_callback (); +} + +typedef struct +{ + int from; + int to; + int final; +} FdMapEntry; + +typedef struct +{ + FdMapEntry *fd_map; + int fd_map_len; + gboolean set_tty; + int tty; +} ChildSetupData; + +static void +child_setup_func (gpointer user_data) +{ + ChildSetupData *data = (ChildSetupData *) user_data; + FdMapEntry *fd_map = data->fd_map; + sigset_t set; + int i; + + /* Unblock all signals */ + sigemptyset (&set); + if (pthread_sigmask (SIG_SETMASK, &set, NULL) == -1) + { + g_error ("Failed to unblock signals when starting child"); + return; + } + + /* Reset the handlers for all signals to their defaults. */ + for (i = 1; i < NSIG; i++) + { + if (i != SIGSTOP && i != SIGKILL) + signal (i, SIG_DFL); + } + + for (i = 0; i < data->fd_map_len; i++) + { + if (fd_map[i].from != fd_map[i].to) + { + dup2 (fd_map[i].from, fd_map[i].to); + close (fd_map[i].from); + } + } + + /* Second pass in case we needed an inbetween fd value to avoid conflicts */ + for (i = 0; i < data->fd_map_len; i++) + { + if (fd_map[i].to != fd_map[i].final) + { + dup2 (fd_map[i].to, fd_map[i].final); + close (fd_map[i].to); + } + } + + /* We become our own session and process group, because it never makes sense + to share the flatpak-session-helper dbus activated process group */ + setsid (); + setpgid (0, 0); + + if (data->set_tty) + { + /* data->tty is our from fd which is closed at this point. + * so locate the destnation fd and use it for the ioctl. + */ + for (i = 0; i < data->fd_map_len; i++) + { + if (fd_map[i].from == data->tty) + { + if (ioctl (fd_map[i].final, TIOCSCTTY, 0) == -1) + g_debug ("ioctl(%d, TIOCSCTTY, 0) failed: %s", + fd_map[i].final, strerror (errno)); + break; + } + } + } +} + +static gboolean +is_valid_expose (const char *expose, + GError **error) +{ + /* No subdirs or absolute paths */ + if (expose[0] == '/') + { + g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, + "Invalid sandbox expose: absolute paths not allowed"); + return FALSE; + } + else if (strchr (expose, '/')) + { + g_set_error (error, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, + "Invalid sandbox expose: subdirectories not allowed"); + return FALSE; + } + + return TRUE; +} + +static char * +filesystem_sandbox_arg (const char *path, + const char *sandbox, + gboolean readonly) +{ + g_autoptr(GString) s = g_string_new ("--filesystem="); + const char *p; + + for (p = path; *p != 0; p++) + { + if (*p == ':') + g_string_append (s, "\\:"); + else + g_string_append_c (s, *p); + } + + g_string_append (s, "/sandbox/"); + + for (p = sandbox; *p != 0; p++) + { + if (*p == ':') + g_string_append (s, "\\:"); + else + g_string_append_c (s, *p); + } + + if (readonly) + g_string_append (s, ":ro"); + + return g_string_free (g_steal_pointer (&s), FALSE); +} + +static gboolean +handle_spawn (PortalFlatpak *object, + GDBusMethodInvocation *invocation, + GUnixFDList *fd_list, + const gchar *arg_cwd_path, + const gchar *const *arg_argv, + GVariant *arg_fds, + GVariant *arg_envs, + guint arg_flags, + GVariant *arg_options) +{ + g_autoptr(GError) error = NULL; + ChildSetupData child_setup_data = { NULL }; + GPid pid; + PidData *pid_data; + gsize i, j, n_fds, n_envs; + const gint *fds; + g_autofree FdMapEntry *fd_map = NULL; + gchar **env; + gint32 max_fd; + GKeyFile *app_info; + g_autoptr(GPtrArray) flatpak_argv = g_ptr_array_new_with_free_func (g_free); + g_autofree char *app_id = NULL; + g_autofree char *branch = NULL; + g_autofree char *arch = NULL; + g_autofree char *app_commit = NULL; + g_autofree char *runtime_ref = NULL; + g_auto(GStrv) runtime_parts = NULL; + g_autofree char *runtime_commit = NULL; + g_autofree char *instance_path = NULL; + g_auto(GStrv) extra_args = NULL; + g_auto(GStrv) shares = NULL; + g_auto(GStrv) sandbox_expose = NULL; + g_auto(GStrv) sandbox_expose_ro = NULL; + gboolean sandboxed; + + app_info = g_object_get_data (G_OBJECT (invocation), "app-info"); + g_assert (app_info != NULL); + + app_id = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_APPLICATION, + FLATPAK_METADATA_KEY_NAME, NULL); + g_assert (app_id != NULL); + runtime_ref = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_APPLICATION, + FLATPAK_METADATA_KEY_RUNTIME, NULL); + runtime_parts = g_strsplit (runtime_ref, "/", -1); + + branch = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_BRANCH, NULL); + instance_path = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_INSTANCE_PATH, NULL); + arch = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_ARCH, NULL); + extra_args = g_key_file_get_string_list (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_EXTRA_ARGS, NULL, NULL); + app_commit = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_APP_COMMIT, NULL); + runtime_commit = g_key_file_get_string (app_info, + FLATPAK_METADATA_GROUP_INSTANCE, + FLATPAK_METADATA_KEY_RUNTIME_COMMIT, NULL); + shares = g_key_file_get_string_list (app_info, FLATPAK_METADATA_GROUP_CONTEXT, + FLATPAK_METADATA_KEY_SHARED, NULL, NULL); + + g_debug ("spawn() called from app: %s", app_id); + + if (*app_id == 0) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, + G_DBUS_ERROR_INVALID_ARGS, + "org.freedesktop.portal.Flatpak.Spawn only works in a flatpak"); + return TRUE; + } + + if (*arg_cwd_path == 0) + arg_cwd_path = NULL; + + if (arg_argv == NULL || *arg_argv == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, + G_DBUS_ERROR_INVALID_ARGS, + "No command given"); + return TRUE; + } + + g_variant_lookup (arg_options, "sandbox-expose", "^as", &sandbox_expose); + g_variant_lookup (arg_options, "sandbox-expose-ro", "^as", &sandbox_expose_ro); + + if (instance_path == NULL && + ((sandbox_expose != NULL && sandbox_expose[0] != NULL) || + (sandbox_expose_ro != NULL && sandbox_expose_ro[0] != NULL))) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, + G_DBUS_ERROR_INVALID_ARGS, + "Invalid sandbox expose, caller has no instance path"); + return TRUE; + } + + for (i = 0; sandbox_expose != NULL && sandbox_expose[i] != NULL; i++) + { + const char *expose = sandbox_expose[i]; + + g_debug ("exposing %s", expose); + if (!is_valid_expose (expose, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + } + + for (i = 0; sandbox_expose_ro != NULL && sandbox_expose_ro[i] != NULL; i++) + { + const char *expose = sandbox_expose_ro[i]; + g_debug ("exposing %s", expose); + if (!is_valid_expose (expose, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + } + + g_debug ("Running spawn command %s", arg_argv[0]); + + n_fds = 0; + fds = NULL; + if (fd_list != NULL) + { + n_fds = g_variant_n_children (arg_fds); + fds = g_unix_fd_list_peek_fds (fd_list, NULL); + } + fd_map = g_new0 (FdMapEntry, n_fds); + + child_setup_data.fd_map = fd_map; + child_setup_data.fd_map_len = n_fds; + + max_fd = -1; + for (i = 0; i < n_fds; i++) + { + gint32 handle, fd; + g_variant_get_child (arg_fds, i, "{uh}", &fd, &handle); + fd_map[i].to = fd; + fd_map[i].from = fds[i]; + fd_map[i].final = fd_map[i].to; + + /* If stdin/out/err is a tty we try to set it as the controlling + tty for the app, this way we can use this to run in a terminal. */ + if ((fd == 0 || fd == 1 || fd == 2) && + !child_setup_data.set_tty && + isatty (fds[i])) + { + child_setup_data.set_tty = TRUE; + child_setup_data.tty = fds[i]; + } + + max_fd = MAX (max_fd, fd_map[i].to); + max_fd = MAX (max_fd, fd_map[i].from); + } + + /* We make a second pass over the fds to find if any "to" fd index + overlaps an already in use fd (i.e. one in the "from" category + that are allocated randomly). If a fd overlaps "to" fd then its + a caller issue and not our fault, so we ignore that. */ + for (i = 0; i < n_fds; i++) + { + int to_fd = fd_map[i].to; + gboolean conflict = FALSE; + + /* At this point we're fine with using "from" values for this + value (because we handle to==from in the code), or values + that are before "i" in the fd_map (because those will be + closed at this point when dup:ing). However, we can't + reuse a fd that is in "from" for j > i. */ + for (j = i + 1; j < n_fds; j++) + { + int from_fd = fd_map[j].from; + if (from_fd == to_fd) + { + conflict = TRUE; + break; + } + } + + if (conflict) + fd_map[i].to = ++max_fd; + } + + if (arg_flags & FLATPAK_SPAWN_FLAGS_CLEAR_ENV) + { + char *empty[] = { NULL }; + env = g_strdupv (empty); + } + else + env = g_get_environ (); + + n_envs = g_variant_n_children (arg_envs); + for (i = 0; i < n_envs; i++) + { + const char *var = NULL; + const char *val = NULL; + g_variant_get_child (arg_envs, i, "{&s&s}", &var, &val); + + env = g_environ_setenv (env, var, val, TRUE); + } + + g_ptr_array_add (flatpak_argv, g_strdup ("flatpak")); + g_ptr_array_add (flatpak_argv, g_strdup ("run")); + + sandboxed = (arg_flags & FLATPAK_SPAWN_FLAGS_SANDBOX) != 0; + + if (sandboxed) + g_ptr_array_add (flatpak_argv, g_strdup ("--sandbox")); + else + { + for (i = 0; extra_args != NULL && extra_args[i] != NULL; i++) + g_ptr_array_add (flatpak_argv, g_strdup (extra_args[i])); + } + + /* Inherit launcher network access from launcher, unless + NO_NETWORK set. */ + if (shares != NULL && g_strv_contains ((const char * const *) shares, "network") && + !(arg_flags & FLATPAK_SPAWN_FLAGS_NO_NETWORK)) + g_ptr_array_add (flatpak_argv, g_strdup ("--share=network")); + else + g_ptr_array_add (flatpak_argv, g_strdup ("--unshare=network")); + + if (instance_path) + { + for (i = 0; sandbox_expose != NULL && sandbox_expose[i] != NULL; i++) + g_ptr_array_add (flatpak_argv, + filesystem_sandbox_arg (instance_path, sandbox_expose[i], FALSE)); + for (i = 0; sandbox_expose_ro != NULL && sandbox_expose_ro[i] != NULL; i++) + g_ptr_array_add (flatpak_argv, + filesystem_sandbox_arg (instance_path, sandbox_expose_ro[i], TRUE)); + } + + for (i = 0; sandbox_expose_ro != NULL && sandbox_expose_ro[i] != NULL; i++) + { + const char *expose = sandbox_expose_ro[i]; + g_debug ("exposing %s", expose); + } + + g_ptr_array_add (flatpak_argv, g_strdup_printf ("--runtime=%s", runtime_parts[1])); + g_ptr_array_add (flatpak_argv, g_strdup_printf ("--runtime-version=%s", runtime_parts[3])); + + if ((arg_flags & FLATPAK_SPAWN_FLAGS_LATEST_VERSION) == 0) + { + if (app_commit) + g_ptr_array_add (flatpak_argv, g_strdup_printf ("--commit=%s", app_commit)); + if (runtime_commit) + g_ptr_array_add (flatpak_argv, g_strdup_printf ("--runtime-commit=%s", runtime_commit)); + } + + + if (arg_argv[0][0] != 0) + g_ptr_array_add (flatpak_argv, g_strdup_printf ("--command=%s", arg_argv[0])); + + g_ptr_array_add (flatpak_argv, g_strdup_printf ("%s/%s/%s", app_id, arch ? arch : "", branch ? branch : "")); + for (i = 1; arg_argv[i] != NULL; i++) + g_ptr_array_add (flatpak_argv, g_strdup (arg_argv[i])); + g_ptr_array_add (flatpak_argv, NULL); + + if (opt_verbose) + { + g_autoptr(GString) cmd = g_string_new (""); + int i; + + for (i = 0; flatpak_argv->pdata[i] != NULL; i++) + { + if (i > 0) + g_string_append (cmd, " "); + g_string_append (cmd, flatpak_argv->pdata[i]); + } + + g_debug ("Starting: %s\n", cmd->str); + } + + if (!g_spawn_async_with_pipes (arg_cwd_path, + (char **) flatpak_argv->pdata, + env, + G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, + child_setup_func, &child_setup_data, + &pid, + NULL, + NULL, + NULL, + &error)) + { + gint code = G_DBUS_ERROR_FAILED; + if (g_error_matches (error, G_SPAWN_ERROR, G_SPAWN_ERROR_ACCES)) + code = G_DBUS_ERROR_ACCESS_DENIED; + else if (g_error_matches (error, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT)) + code = G_DBUS_ERROR_FILE_NOT_FOUND; + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, code, + "Failed to start command: %s", + error->message); + return TRUE; + } + + pid_data = g_new0 (PidData, 1); + pid_data->pid = pid; + pid_data->client = g_strdup (g_dbus_method_invocation_get_sender (invocation)); + pid_data->child_watch = g_child_watch_add_full (G_PRIORITY_DEFAULT, + pid, + child_watch_died, + pid_data, + NULL); + + g_debug ("Client Pid is %d", pid_data->pid); + + g_hash_table_replace (client_pid_data_hash, GUINT_TO_POINTER (pid_data->pid), + pid_data); + + portal_flatpak_complete_spawn (object, invocation, NULL, pid); + return TRUE; +} + +static gboolean +handle_spawn_signal (PortalFlatpak *object, + GDBusMethodInvocation *invocation, + guint arg_pid, + guint arg_signal, + gboolean arg_to_process_group) +{ + PidData *pid_data = NULL; + + g_debug ("spawn_signal(%d %d)", arg_pid, arg_signal); + + pid_data = g_hash_table_lookup (client_pid_data_hash, GUINT_TO_POINTER (arg_pid)); + if (pid_data == NULL || + strcmp (pid_data->client, g_dbus_method_invocation_get_sender (invocation)) != 0) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, + G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN, + "No such pid"); + return TRUE; + } + + g_debug ("Sending signal %d to client pid %d", arg_signal, arg_pid); + + if (arg_to_process_group) + killpg (pid_data->pid, arg_signal); + else + kill (pid_data->pid, arg_signal); + + portal_flatpak_complete_spawn_signal (portal, invocation); + + return TRUE; +} + +static gboolean +authorize_method_handler (GDBusInterfaceSkeleton *interface, + GDBusMethodInvocation *invocation, + gpointer user_data) +{ + g_autoptr(GError) error = NULL; + g_autoptr(GKeyFile) keyfile = NULL; + g_autofree char *app_id = NULL; + + /* Ensure we don't idle exit */ + schedule_idle_callback (); + + keyfile = flatpak_invocation_lookup_app_info (invocation, NULL, &error); + if (keyfile == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Authorization error: %s", error->message); + return FALSE; + } + + app_id = g_key_file_get_string (keyfile, + FLATPAK_METADATA_GROUP_APPLICATION, + FLATPAK_METADATA_KEY_NAME, &error); + if (app_id == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Authorization error: %s", error->message); + return FALSE; + } + + g_object_set_data_full (G_OBJECT (invocation), "app-info", g_steal_pointer (&keyfile), (GDestroyNotify) g_key_file_unref); + + return TRUE; +} + +static void +on_bus_acquired (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + GError *error = NULL; + + g_debug ("Bus acquired, creating skeleton"); + + portal = portal_flatpak_skeleton_new (); + + g_object_set_data_full (G_OBJECT (portal), "track-alive", GINT_TO_POINTER (42), skeleton_died_cb); + + g_dbus_interface_skeleton_set_flags (G_DBUS_INTERFACE_SKELETON (portal), + G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD); + + portal_flatpak_set_version (PORTAL_FLATPAK (portal), 1); + g_signal_connect (portal, "handle-spawn", G_CALLBACK (handle_spawn), NULL); + g_signal_connect (portal, "handle-spawn-signal", G_CALLBACK (handle_spawn_signal), NULL); + + g_signal_connect (portal, "g-authorize-method", G_CALLBACK (authorize_method_handler), NULL); + + if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (portal), + connection, + "/org/freedesktop/portal/Flatpak", + &error)) + { + g_warning ("error: %s", error->message); + g_error_free (error); + } +} + +static void +on_name_acquired (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + g_debug ("Name acquired"); +} + +static void +on_name_lost (GDBusConnection *connection, + const gchar *name, + gpointer user_data) +{ + g_debug ("Name lost"); + unref_skeleton_in_timeout (); +} + +static void +binary_file_changed_cb (GFileMonitor *file_monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + gpointer data) +{ + static gboolean got_it = FALSE; + + if (!got_it) + { + g_debug ("binary file changed"); + unref_skeleton_in_timeout (); + } + + got_it = TRUE; +} + + +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) + g_printerr ("F: %s\n", message); + else + g_printerr ("%s: %s\n", g_get_prgname (), message); +} + +int +main (int argc, + char **argv) +{ + gchar exe_path[PATH_MAX + 1]; + ssize_t exe_path_len; + gboolean replace; + gboolean show_version; + GOptionContext *context; + GBusNameOwnerFlags flags; + + g_autoptr(GError) error = NULL; + const GOptionEntry options[] = { + { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace, "Replace old daemon.", NULL }, + { "verbose", 'v', 0, G_OPTION_ARG_NONE, &opt_verbose, "Enable debug output.", NULL }, + { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, "Show program version.", NULL}, + { "no-idle-exit", 0, 0, G_OPTION_ARG_NONE, &no_idle_exit, "Don't exit when idle.", NULL }, + { NULL } + }; + + setlocale (LC_ALL, ""); + + g_setenv ("GIO_USE_VFS", "local", TRUE); + + g_set_prgname (argv[0]); + + g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, message_handler, NULL); + + context = g_option_context_new (""); + + replace = FALSE; + opt_verbose = FALSE; + show_version = FALSE; + + g_option_context_set_summary (context, "Flatpak portal"); + g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); + + if (!g_option_context_parse (context, &argc, &argv, &error)) + { + g_printerr ("%s: %s", g_get_application_name (), error->message); + g_printerr ("\n"); + g_printerr ("Try \"%s --help\" for more information.", + g_get_prgname ()); + g_printerr ("\n"); + g_option_context_free (context); + return 1; + } + + if (show_version) + { + g_print (PACKAGE_STRING "\n"); + return 0; + } + + if (opt_verbose) + g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, message_handler, NULL); + + client_pid_data_hash = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) pid_data_free); + + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + if (session_bus == NULL) + { + g_printerr ("Can't find bus: %s\n", error->message); + return 1; + } + + exe_path_len = readlink ("/proc/self/exe", exe_path, sizeof (exe_path) - 1); + if (exe_path_len > 0) + { + exe_path[exe_path_len] = 0; + GFileMonitor *monitor; + g_autoptr(GFile) exe = NULL; + g_autoptr(GError) local_error = NULL; + + exe = g_file_new_for_path (exe_path); + monitor = g_file_monitor_file (exe, + G_FILE_MONITOR_NONE, + NULL, + &local_error); + if (monitor == NULL) + g_warning ("Failed to set watch on %s: %s", exe_path, error->message); + else + g_signal_connect (monitor, "changed", + G_CALLBACK (binary_file_changed_cb), NULL); + } + + flatpak_connection_track_name_owners (session_bus); + + flags = G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT; + if (replace) + flags |= G_BUS_NAME_OWNER_FLAGS_REPLACE; + + name_owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, + "org.freedesktop.portal.Flatpak", + flags, + on_bus_acquired, + on_name_acquired, + on_name_lost, + NULL, + NULL); + + /* Ensure we don't idle exit */ + schedule_idle_callback (); + + main_loop = g_main_loop_new (NULL, FALSE); + g_main_loop_run (main_loop); + + return 0; +} diff -Nru flatpak-0.11.3/portal/flatpak-portal.h flatpak-1.0.7/portal/flatpak-portal.h --- flatpak-0.11.3/portal/flatpak-portal.h 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/flatpak-portal.h 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,31 @@ +/* + * Copyright © 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_PORTAL_H__ +#define __FLATPAK_PORTAL_H__ + +typedef enum { + FLATPAK_SPAWN_FLAGS_CLEAR_ENV = 1 << 0, + FLATPAK_SPAWN_FLAGS_LATEST_VERSION = 1 << 1, + FLATPAK_SPAWN_FLAGS_SANDBOX = 1 << 2, + FLATPAK_SPAWN_FLAGS_NO_NETWORK = 1 << 3, +} FlatpakSpawnFlags; + +#endif /* __FLATPAK_PORTAL_H__ */ diff -Nru flatpak-0.11.3/portal/flatpak-portal.service.in flatpak-1.0.7/portal/flatpak-portal.service.in --- flatpak-0.11.3/portal/flatpak-portal.service.in 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/flatpak-portal.service.in 2018-05-30 12:58:57.000000000 +0000 @@ -0,0 +1,7 @@ +[Unit] +Description=flatpak portal + +[Service] +BusName=org.freedesktop.portal.Flatpak +ExecStart=@libexecdir@/flatpak-portal +Type=dbus diff -Nru flatpak-0.11.3/portal/Makefile.am.inc flatpak-1.0.7/portal/Makefile.am.inc --- flatpak-0.11.3/portal/Makefile.am.inc 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/Makefile.am.inc 2018-08-08 14:56:20.000000000 +0000 @@ -0,0 +1,39 @@ +libexec_PROGRAMS += \ + flatpak-portal \ + $(NULL) + +service_in_files += portal/flatpak-portal.service.in +systemduserunit_DATA += portal/flatpak-portal.service + +service_in_files += portal/org.freedesktop.portal.Flatpak.service.in +dbus_service_DATA += portal/org.freedesktop.portal.Flatpak.service + +nodist_flatpak_portal_SOURCES = portal/flatpak-portal-dbus.c portal/flatpak-portal-dbus.h + +portal/flatpak-portal-dbus.c: data/org.freedesktop.portal.Flatpak.xml Makefile + mkdir -p $(builddir)/portal + $(AM_V_GEN) $(GDBUS_CODEGEN) \ + --interface-prefix org.freedesktop.portal \ + --c-namespace Portal \ + --generate-c-code $(builddir)/portal/flatpak-portal-dbus \ + $(srcdir)/data/org.freedesktop.portal.Flatpak.xml \ + $(NULL) + +portal/%-dbus.h: portal/%-dbus.c + @true # Built as a side-effect of the rules for the .c + +flatpak_portal_SOURCES = \ + portal/flatpak-portal.c \ + portal/flatpak-portal.h \ + portal/flatpak-portal-app-info.c \ + portal/flatpak-portal-app-info.h \ + common/flatpak-portal-error.c \ + common/flatpak-portal-error.h \ + $(NULL) + +BUILT_SOURCES += $(nodist_flatpak_portal_SOURCES) +CLEANFILES += $(nodist_flatpak_portal_SOURCES) + +flatpak_portal_LDADD = $(AM_LDADD) $(BASE_LIBS) +flatpak_portal_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) -DFLATPAK_COMPILATION +flatpak_portal_CPPFLAGS = $(AM_CPPFLAGS) -I$(builddir)/portal diff -Nru flatpak-0.11.3/portal/org.freedesktop.portal.Flatpak.service.in flatpak-1.0.7/portal/org.freedesktop.portal.Flatpak.service.in --- flatpak-0.11.3/portal/org.freedesktop.portal.Flatpak.service.in 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/portal/org.freedesktop.portal.Flatpak.service.in 2018-05-30 12:58:57.000000000 +0000 @@ -0,0 +1,4 @@ +[D-BUS Service] +Name=org.freedesktop.portal.Flatpak +Exec=@libexecdir@/flatpak-portal +SystemdService=flatpak-portal.service diff -Nru flatpak-0.11.3/README.md flatpak-1.0.7/README.md --- flatpak-0.11.3/README.md 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/README.md 2019-02-11 12:42:20.000000000 +0000 @@ -2,14 +2,14 @@ Flatpak icon

-Flatpak is a system for building, distributing and running sandboxed +Flatpak is a system for building, distributing, and running sandboxed desktop applications on Linux. See https://flatpak.org/ for more information. Community discussion happens in [#flatpak on Freenode](ircs://chat.freenode.net/flatpak) and on [the mailing list](https://lists.freedesktop.org/mailman/listinfo/flatpak). -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). +Read documentation for the flatpak [commandline tools](http://docs.flatpak.org/en/latest/flatpak-command-reference.html) and for the libflatpak [library API](http://flatpak.github.io/flatpak/reference/html/index.html). # Contributing diff -Nru flatpak-0.11.3/scripts/flatpak-coredumpctl flatpak-1.0.7/scripts/flatpak-coredumpctl --- flatpak-0.11.3/scripts/flatpak-coredumpctl 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/scripts/flatpak-coredumpctl 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +import argparse +import re +import shutil +import sys +import subprocess +import shlex +import tempfile + + +class CoreDumper(): + def __init__(self): + self.build_directory = None + self.app = None + self.coredumpctl_matches = "" + self.extra_flatpak_args = "" + self.gdb_arguments = "" + + def clean_args(self): + if not self.build_directory and not self.app: + print("Either `--build-directory` or `APP` must be specified.", + file=sys.stderr) + return False + + return True + + def run(self): + if not shutil.which('coredumpctl'): + print("'coredumpctl' not present on the system, can't run.", + file=sys.stderr) + sys.exit(1) + + # We need access to the host from the sandbox to run. + flatpak_command = ["flatpak", "build" if self.build_directory else "run", + "--filesystem=%s" % tempfile.gettempdir()] + shlex.split(self.extra_flatpak_args) + if not self.build_directory: + flatpak_command.extend(["--command=gdb", + '--devel', self.app]) + else: + flatpak_command.extend([self.build_directory, "gdb"]) + + with tempfile.NamedTemporaryFile() as coredump: + with tempfile.NamedTemporaryFile() as stderr: + subprocess.check_call(["coredumpctl", "dump"] + shlex.split(self.coredumpctl_matches), + stdout=coredump, stderr=stderr) + + with open(stderr.name, 'r') as stderrf: + stderr = stderrf.read() + executable, = re.findall(".*Executable: (.*)", stderr) + if not executable.startswith("/newroot"): + print("Executable %s doesn't seem to be a flatpaked application." % executable, + file=sys.stderr) + executable = executable.replace("/newroot", "") + flatpak_command.extend([executable, coredump.name]) + flatpak_command.extend(shlex.split(self.gdb_arguments)) + + print('Running: `"%s"`' % '" "'.join(flatpak_command)) + subprocess.check_call(flatpak_command) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + "Debug in gdb an application that crashed inside flatpak." + " It uses (and thus requires) coredumpctl to retrieve the coredump file.") + parser.add_argument('-b', '--build-directory', default=None, + help="The build directory to use. It allows you to retrieve a coredump" + " for applications being built") + parser.add_argument('--extra-flatpak-args', default="", + help="Extra argument to pass to flatpak") + parser.add_argument('app', nargs='?', + help='The flatpak application to use. eg. `org.gnome.Epiphany//3.28`.') + parser.add_argument('-m', '--coredumpctl-matches', default="", nargs="?", + help='Coredumpctl matches, see `man coredumpctl` for more information.') + parser.add_argument('--gdb-arguments', default="", + help='Arguments to pass to gdb.') + + coredumper = CoreDumper() + options = parser.parse_args(namespace=coredumper) + if not coredumper.clean_args(): + parser.print_help() + sys.exit(1) + + coredumper.run() diff -Nru flatpak-0.11.3/session-helper/flatpak-session-helper.c flatpak-1.0.7/session-helper/flatpak-session-helper.c --- flatpak-0.11.3/session-helper/flatpak-session-helper.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/session-helper/flatpak-session-helper.c 2019-02-11 12:42:20.000000000 +0000 @@ -27,16 +27,33 @@ #include #include #include -#include "flatpak-dbus.h" -#include "flatpak-utils.h" +#include "flatpak-dbus-generated.h" +#include "flatpak-utils-private.h" static char *monitor_dir; +static char *p11_kit_server_socket_path; +static int p11_kit_server_pid = 0; static GHashTable *client_pid_data_hash = NULL; static GDBusConnection *session_bus = NULL; -typedef struct { - GPid pid; +static void +do_atexit (void) +{ + if (p11_kit_server_pid != 0) + kill (p11_kit_server_pid, SIGTERM); +} + +static void +handle_sigterm (int signum) +{ + do_atexit (); + _exit (1); +} + +typedef struct +{ + GPid pid; char *client; guint child_watch; } PidData; @@ -49,7 +66,7 @@ } static gboolean -handle_request_monitor (FlatpakSessionHelper *object, +handle_request_monitor (FlatpakSessionHelper *object, GDBusMethodInvocation *invocation, gpointer user_data) { @@ -59,12 +76,35 @@ return TRUE; } +static gboolean +handle_request_session (FlatpakSessionHelper *object, + GDBusMethodInvocation *invocation, + gpointer user_data) +{ + GVariantBuilder builder; + + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{sv}")); + + g_variant_builder_add (&builder, "{s@v}", "path", + g_variant_new_variant (g_variant_new_string (monitor_dir))); + if (p11_kit_server_socket_path) + g_variant_builder_add (&builder, "{s@v}", "pkcs11-socket", + g_variant_new_variant (g_variant_new_string (p11_kit_server_socket_path))); + + flatpak_session_helper_complete_request_session (object, invocation, + g_variant_builder_end (&builder)); + + return TRUE; +} + + static void child_watch_died (GPid pid, gint status, gpointer user_data) { PidData *pid_data = user_data; + g_autoptr(GVariant) signal_variant = NULL; g_debug ("Client Pid %d died", pid_data->pid); @@ -79,26 +119,28 @@ NULL); /* This frees the pid_data, so be careful */ - g_hash_table_remove (client_pid_data_hash, GUINT_TO_POINTER(pid_data->pid)); + g_hash_table_remove (client_pid_data_hash, GUINT_TO_POINTER (pid_data->pid)); } -typedef struct { +typedef struct +{ int from; int to; int final; } FdMapEntry; -typedef struct { +typedef struct +{ FdMapEntry *fd_map; - int fd_map_len; - gboolean set_tty; - int tty; + int fd_map_len; + gboolean set_tty; + int tty; } ChildSetupData; static void child_setup_func (gpointer user_data) { - ChildSetupData *data = (ChildSetupData *)user_data; + ChildSetupData *data = (ChildSetupData *) user_data; FdMapEntry *fd_map = data->fd_map; sigset_t set; int i; @@ -109,7 +151,7 @@ { g_error ("Failed to unblock signals when starting child"); return; - } + } /* Reset the handlers for all signals to their defaults. */ for (i = 1; i < NSIG; i++) @@ -162,13 +204,13 @@ static gboolean -handle_host_command (FlatpakDevelopment *object, +handle_host_command (FlatpakDevelopment *object, GDBusMethodInvocation *invocation, - const gchar *arg_cwd_path, - const gchar *const *arg_argv, - GVariant *arg_fds, - GVariant *arg_envs, - guint flags) + const gchar *arg_cwd_path, + const gchar *const *arg_argv, + GVariant *arg_fds, + GVariant *arg_envs, + guint flags) { g_autoptr(GError) error = NULL; GDBusMessage *message = g_dbus_method_invocation_get_message (invocation); @@ -277,9 +319,9 @@ } if (!g_spawn_async_with_pipes (arg_cwd_path, - (char **)arg_argv, + (char **) arg_argv, env, - G_SPAWN_SEARCH_PATH|G_SPAWN_DO_NOT_REAP_CHILD, + G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, child_setup_func, &child_setup_data, &pid, NULL, @@ -309,7 +351,7 @@ g_debug ("Client Pid is %d", pid_data->pid); - g_hash_table_replace (client_pid_data_hash, GUINT_TO_POINTER(pid_data->pid), + g_hash_table_replace (client_pid_data_hash, GUINT_TO_POINTER (pid_data->pid), pid_data); @@ -319,15 +361,15 @@ } static gboolean -handle_host_command_signal (FlatpakDevelopment *object, +handle_host_command_signal (FlatpakDevelopment *object, GDBusMethodInvocation *invocation, - guint arg_pid, - guint arg_signal, - gboolean to_process_group) + guint arg_pid, + guint arg_signal, + gboolean to_process_group) { PidData *pid_data = NULL; - pid_data = g_hash_table_lookup (client_pid_data_hash, GUINT_TO_POINTER(arg_pid)); + pid_data = g_hash_table_lookup (client_pid_data_hash, GUINT_TO_POINTER (arg_pid)); if (pid_data == NULL || strcmp (pid_data->client, g_dbus_method_invocation_get_sender (invocation)) != 0) { @@ -363,6 +405,7 @@ flatpak_session_helper_set_version (FLATPAK_SESSION_HELPER (helper), 1); g_signal_connect (helper, "handle-request-monitor", G_CALLBACK (handle_request_monitor), NULL); + g_signal_connect (helper, "handle-request-session", G_CALLBACK (handle_request_session), NULL); if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (helper), connection, @@ -410,9 +453,10 @@ * which on stateless systems is often a symlink to a dyamically-generated * or updated file in /run. */ -typedef struct { - const gchar *source; - char *real; +typedef struct +{ + const gchar *source; + char *real; GFileMonitor *monitor_source; GFileMonitor *monitor_real; } MonitorData; @@ -450,17 +494,17 @@ g_free (contents); } -static void -file_changed (GFileMonitor *monitor, - GFile *file, - GFile *other_file, - GFileMonitorEvent event_type, - MonitorData *data); +static void file_changed (GFileMonitor *monitor, + GFile *file, + GFile *other_file, + GFileMonitorEvent event_type, + MonitorData *data); static void update_real_monitor (MonitorData *data) { char *real = realpath (data->source, NULL); + if (real == NULL) { g_debug ("unable to get real path to monitor host file %s: %s", data->source, @@ -512,6 +556,25 @@ } static void +file_monitor_do (MonitorData *data) +{ + update_real_monitor (data); + copy_file (data->source, monitor_dir); + + if (strcmp (data->source, "/etc/localtime") == 0) + { + /* We can't update the /etc/localtime symlink at runtime, nor can we make it a of the + * correct form "../usr/share/zoneinfo/$timezone". So, instead we use the old debian + * /etc/timezone file for telling the sandbox the timezone. */ + char *dest = g_build_filename (monitor_dir, "timezone", NULL); + g_autofree char *timezone = flatpak_get_timezone (); + g_autofree char *timezone_content = g_strdup_printf ("%s\n", timezone); + + g_file_set_contents (dest, timezone_content, -1, NULL); + } +} + +static void file_changed (GFileMonitor *monitor, GFile *file, GFile *other_file, @@ -521,9 +584,7 @@ if (event_type != G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT) return; - update_real_monitor (data); - - copy_file (data->source, monitor_dir); + file_monitor_do (data); } static MonitorData * @@ -548,9 +609,7 @@ g_debug ("failed to monitor host file %s: %s", source, err->message); } - update_real_monitor (data); - - copy_file (source, monitor_dir); + file_monitor_do (data); return data; } @@ -568,6 +627,78 @@ g_printerr ("%s: %s\n", g_get_prgname (), message); } +static void +start_p11_kit_server (const char *flatpak_dir) +{ + g_autofree char *socket_basename = g_strdup_printf ("pkcs11-flatpak-%d", getpid ()); + g_autofree char *socket_path = g_build_filename (flatpak_dir, socket_basename, NULL); + g_autofree char *p11_kit_stdout = NULL; + gint exit_status; + + g_autoptr(GError) local_error = NULL; + g_auto(GStrv) stdout_lines = NULL; + int i; + char *p11_argv[] = { + "p11-kit", "server", + /* We explicitly request --sh here, because we then fail on earlier versions that doesn't support + * this flag. This is good, because those earlier versions did not properly daemonize and caused + * the spawn_sync to hang forever, waiting for the pipe to close. + */ + "--sh", + "-n", socket_path, + "--provider", "p11-kit-trust.so", + "pkcs11:model=p11-kit-trust?write-protected=yes", + NULL + }; + + g_debug ("starting p11-kit server"); + + if (!g_spawn_sync (NULL, + p11_argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL, + NULL, NULL, + &p11_kit_stdout, NULL, + &exit_status, &local_error)) + { + g_warning ("Unable to start p11-kit server: %s\n", local_error->message); + return; + } + + if (exit_status != 0) + { + g_warning ("Unable to start p11-kit server, exited with status %d\n", exit_status); + return; + } + + stdout_lines = g_strsplit (p11_kit_stdout, "\n", 0); + /* Output is something like: + P11_KIT_SERVER_ADDRESS=unix:path=/run/user/1000/p11-kit/pkcs11-2603742; export P11_KIT_SERVER_ADDRESS; + P11_KIT_SERVER_PID=2603743; export P11_KIT_SERVER_PID; + */ + for (i = 0; stdout_lines[i] != NULL; i++) + { + char *line = stdout_lines[i]; + + if (g_str_has_prefix (line, "P11_KIT_SERVER_PID=")) + { + char *pid = line + strlen ("P11_KIT_SERVER_PID="); + char *p = pid; + while (g_ascii_isdigit (*p)) + p++; + + *p = 0; + p11_kit_server_pid = atol (pid); + } + } + + if (p11_kit_server_pid != 0) + { + g_debug ("Using p11-kit socket path %s, pid %d", socket_path, p11_kit_server_pid); + p11_kit_server_socket_path = g_steal_pointer (&socket_path); + } + else + g_debug ("Not using p11-kit due to older version"); +} + int main (int argc, char **argv) @@ -579,6 +710,8 @@ gboolean show_version; GOptionContext *context; GBusNameOwnerFlags flags; + g_autofree char *flatpak_dir = NULL; + g_autoptr(GError) error = NULL; const GOptionEntry options[] = { { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace, "Replace old daemon.", NULL }, @@ -587,6 +720,15 @@ { NULL } }; g_autoptr(MonitorData) m_resolv_conf = NULL, m_host_conf = NULL, m_hosts = NULL, m_localtime = NULL; + struct sigaction action; + + atexit (do_atexit); + + memset (&action, 0, sizeof (struct sigaction)); + action.sa_handler = handle_sigterm; + sigaction (SIGTERM, &action, NULL); + sigaction (SIGHUP, &action, NULL); + sigaction (SIGINT, &action, NULL); setlocale (LC_ALL, ""); @@ -607,7 +749,7 @@ if (!g_option_context_parse (context, &argc, &argv, &error)) { - g_printerr ("%s: %s", g_get_application_name(), error->message); + g_printerr ("%s: %s", g_get_application_name (), error->message); g_printerr ("\n"); g_printerr ("Try \"%s --help\" for more information.", g_get_prgname ()); @@ -627,7 +769,7 @@ flatpak_migrate_from_xdg_app (); - client_pid_data_hash = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify)pid_data_free); + client_pid_data_hash = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) pid_data_free); session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); if (session_bus == NULL) @@ -636,8 +778,20 @@ return 1; } - monitor_dir = g_build_filename (g_get_user_runtime_dir (), "flatpak-monitor", NULL); - if (g_mkdir_with_parents (monitor_dir, 0755) != 0) + flatpak_dir = g_build_filename (g_get_user_runtime_dir (), ".flatpak-helper", NULL); + if (g_mkdir_with_parents (flatpak_dir, 0700) != 0) + { + g_print ("Can't create %s\n", monitor_dir); + exit (1); + } + + if (g_find_program_in_path ("p11-kit")) + start_p11_kit_server (flatpak_dir); + else + g_debug ("p11-kit not found"); + + monitor_dir = g_build_filename (flatpak_dir, "monitor", NULL); + if (g_mkdir_with_parents (monitor_dir, 0700) != 0) { g_print ("Can't create %s\n", monitor_dir); exit (1); diff -Nru flatpak-0.11.3/session-helper/Makefile.am.inc flatpak-1.0.7/session-helper/Makefile.am.inc --- flatpak-0.11.3/session-helper/Makefile.am.inc 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/session-helper/Makefile.am.inc 2018-08-08 14:56:20.000000000 +0000 @@ -13,4 +13,4 @@ $(NULL) flatpak_session_helper_LDADD = $(AM_LDADD) $(BASE_LIBS) libflatpak-common.la -flatpak_session_helper_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(SOUP_CFLAGS) $(OSTREE_CFLAGS) $(GSYSTEM_CFLAGS) $(JSON_CFLAGS) +flatpak_session_helper_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(SOUP_CFLAGS) $(OSTREE_CFLAGS) $(GSYSTEM_CFLAGS) $(JSON_CFLAGS) -DFLATPAK_COMPILATION diff -Nru flatpak-0.11.3/system-helper/flatpak-system-helper.c flatpak-1.0.7/system-helper/flatpak-system-helper.c --- flatpak-0.11.3/system-helper/flatpak-system-helper.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/system-helper/flatpak-system-helper.c 2019-02-11 12:42:20.000000000 +0000 @@ -26,10 +26,10 @@ #include #include -#include "flatpak-dbus.h" -#include "flatpak-dir.h" -#include "flatpak-oci-registry.h" -#include "lib/flatpak-error.h" +#include "flatpak-dbus-generated.h" +#include "flatpak-dir-private.h" +#include "flatpak-oci-registry-private.h" +#include "flatpak-error.h" static PolkitAuthority *authority = NULL; static FlatpakSystemHelper *helper = NULL; @@ -39,13 +39,13 @@ static gboolean on_session_bus = FALSE; static gboolean no_idle_exit = FALSE; -#define IDLE_TIMEOUT_SECS 10*60 +#define IDLE_TIMEOUT_SECS 10 * 60 /* This uses a weird Auto prefix to avoid conflicts with later added polkit types. */ typedef PolkitAuthorizationResult AutoPolkitAuthorizationResult; -typedef PolkitDetails AutoPolkitDetails; -typedef PolkitSubject AutoPolkitSubject; +typedef PolkitDetails AutoPolkitDetails; +typedef PolkitSubject AutoPolkitSubject; G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoPolkitAuthorizationResult, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (AutoPolkitDetails, g_object_unref) @@ -62,6 +62,7 @@ unref_skeleton_in_timeout_cb (gpointer user_data) { static gboolean unreffed = FALSE; + g_debug ("unreffing helper main ref"); if (!unreffed) { @@ -104,7 +105,7 @@ { static guint idle_timeout_id = 0; - G_LOCK(idle); + G_LOCK (idle); if (!no_idle_exit) { @@ -114,7 +115,7 @@ idle_timeout_id = g_timeout_add_seconds (IDLE_TIMEOUT_SECS, idle_timeout_cb, NULL); } - G_UNLOCK(idle); + G_UNLOCK (idle); } static FlatpakDir * @@ -160,7 +161,6 @@ gboolean no_deploy; gboolean local_pull; gboolean reinstall; - g_autoptr(GMainContext) main_context = NULL; g_autofree char *url = NULL; g_debug ("Deploy %s %u %s %s %s", arg_repo_path, arg_flags, arg_ref, arg_origin, arg_installation); @@ -219,7 +219,7 @@ else if (!deploy_dir && is_update) { /* Can't update not installed app */ - g_dbus_method_invocation_return_error (invocation, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, + g_dbus_method_invocation_return_error (invocation, FLATPAK_ERROR, FLATPAK_ERROR_NOT_INSTALLED, "%s is not installed", arg_ref); return TRUE; } @@ -241,9 +241,12 @@ g_autoptr(FlatpakOciIndex) index = NULL; const FlatpakOciManifestDescriptor *desc; g_autoptr(FlatpakOciVersioned) versioned = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; + FlatpakCollectionRef collection_ref; + g_autoptr(GHashTable) remote_refs = NULL; g_autofree char *checksum = NULL; + const char *verified_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, @@ -251,11 +254,11 @@ 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; - } + { + 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) @@ -265,7 +268,7 @@ return TRUE; } - index = flatpak_oci_registry_load_index (registry, NULL, NULL, NULL, &error); + index = flatpak_oci_registry_load_index (registry, NULL, &error); if (index == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, @@ -290,16 +293,42 @@ return TRUE; } - 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; - } + state = flatpak_dir_get_remote_state (system, arg_origin, NULL, &error); + if (state == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "%s: Can't get remote state: %s", arg_origin, error->message); + return TRUE; + } + + /* We need to use list_all_remote_refs because we don't care about + * enumerate vs. noenumerate. + */ + if (!flatpak_dir_list_all_remote_refs (system, state, &remote_refs, NULL, &error)) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "%s: Can't list refs: %s", arg_origin, error->message); + return TRUE; + } + + collection_ref.collection_id = state->collection_id; + collection_ref.ref_name = (char *) arg_ref; + + verified_digest = g_hash_table_lookup (remote_refs, &collection_ref); + if (!verified_digest) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "%s: ref %s not found", arg_origin, arg_ref); + return TRUE; + } + + if (!g_str_has_prefix (desc->parent.digest, "sha256:") || + strcmp (desc->parent.digest + strlen ("sha256:"), verified_digest) != 0) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "%s: manifest hash in downloaded content does not match ref %s", arg_origin, arg_ref); + return 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); @@ -312,9 +341,10 @@ } else if (strlen (arg_repo_path) > 0) { + g_autoptr(GMainContextPopDefault) main_context = NULL; + /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); + main_context = flatpak_main_context_new_default (); ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); @@ -325,18 +355,23 @@ ostree_progress, NULL, &error)) { - g_main_context_pop_thread_default (main_context); - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Error pulling from repo: %s", error->message); + if (error->domain == FLATPAK_ERROR) + g_dbus_method_invocation_return_gerror (invocation, error); + else + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "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); } else if (local_pull) { + g_autoptr(GMainContextPopDefault) main_context = NULL; + + g_autoptr(FlatpakRemoteState) state = NULL; if (!ostree_repo_remote_get_url (flatpak_dir_get_repo (system), arg_origin, &url, @@ -354,24 +389,32 @@ return TRUE; } + state = flatpak_dir_get_remote_state_optional (system, arg_origin, NULL, &error); + if (state == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Error pulling from repo: %s", error->message); + return TRUE; + } + /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); + main_context = flatpak_main_context_new_default (); 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, + if (!flatpak_dir_pull (system, state, arg_ref, NULL, NULL, (const char **) arg_subpaths, NULL, FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, ostree_progress, NULL, &error)) { - g_main_context_pop_thread_default (main_context); - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Error pulling from repo: %s", error->message); + if (error->domain == FLATPAK_ERROR) + g_dbus_method_invocation_return_gerror (invocation, error); + else + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "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); } @@ -381,7 +424,7 @@ if (is_update) { if (!flatpak_dir_deploy_update (system, arg_ref, - NULL, (const char **)arg_subpaths, NULL, &error)) + NULL, (const char **) arg_subpaths, NULL, &error)) { if (g_error_matches (error, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED)) g_dbus_method_invocation_return_error (invocation, FLATPAK_ERROR, FLATPAK_ERROR_ALREADY_INSTALLED, @@ -420,10 +463,9 @@ const gchar *arg_installation) { g_autoptr(FlatpakDir) system = NULL; - g_autoptr(GFile) path = g_file_new_for_path (arg_repo_path); g_autoptr(GError) error = NULL; - g_autoptr(GMainContext) main_context = NULL; - g_autofree char *branch = NULL; + g_autofree char *new_branch = NULL; + g_autofree char *old_branch = NULL; gboolean is_oci; g_debug ("DeployAppstream %s %s %s %s", arg_repo_path, arg_origin, arg_arch, arg_installation); @@ -435,10 +477,14 @@ return TRUE; } - if (!g_file_query_exists (path, NULL)) + if (strlen (arg_repo_path) > 0) { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Path does not exist"); - return TRUE; + g_autoptr(GFile) path = g_file_new_for_path (arg_repo_path); + if (!g_file_query_exists (path, NULL)) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, "Path does not exist"); + return TRUE; + } } if (!flatpak_dir_ensure_repo (system, NULL, &error)) @@ -450,80 +496,123 @@ is_oci = flatpak_dir_get_remote_oci (system, arg_origin); - branch = g_strdup_printf ("appstream/%s", arg_arch); + new_branch = g_strdup_printf ("appstream2/%s", arg_arch); + old_branch = g_strdup_printf ("appstream/%s", arg_arch); if (is_oci) { - g_autoptr(GFile) registry_file = g_file_new_for_path (arg_repo_path); - g_autofree char *registry_uri = g_file_get_uri (registry_file); - g_autoptr(FlatpakOciRegistry) registry = NULL; - g_autoptr(FlatpakOciIndex) index = NULL; - const FlatpakOciManifestDescriptor *desc; - g_autoptr(FlatpakOciVersioned) versioned = NULL; - g_autofree char *checksum = NULL; + g_autoptr(GMainContextPopDefault) context = NULL; - registry = flatpak_oci_registry_new (registry_uri, FALSE, -1, NULL, &error); - if (registry == NULL) + /* This does soup http requests spinning the current mainloop, so we need one + for this thread. */ + context = flatpak_main_context_new_default (); + /* In the OCI case, we just do the full update, including network i/o, in the + * system helper, see comment in flatpak_dir_update_appstream() + */ + if (!flatpak_dir_update_appstream (system, + arg_origin, + arg_arch, + NULL, + NULL, + NULL, + &error)) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child OCI registry: %s", error->message); + "Error updating appstream: %s", error->message); return TRUE; } - index = flatpak_oci_registry_load_index (registry, NULL, NULL, NULL, &error); - if (index == NULL) + flatpak_system_helper_complete_deploy_appstream (object, invocation); + return TRUE; + } + else if (strlen (arg_repo_path) > 0) + { + g_autoptr(GError) first_error = NULL; + g_autoptr(GError) second_error = NULL; + g_autoptr(GMainContextPopDefault) main_context = NULL; + + /* Work around ostree-pull spinning the default main context for the sync calls */ + main_context = flatpak_main_context_new_default (); + + if (!flatpak_dir_pull_untrusted_local (system, arg_repo_path, + arg_origin, + new_branch, + NULL, + NULL, + NULL, &first_error)) { - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child OCI registry index: %s", error->message); - return TRUE; + if (!flatpak_dir_pull_untrusted_local (system, arg_repo_path, + arg_origin, + old_branch, + NULL, + NULL, + NULL, &second_error)) + { + g_prefix_error (&first_error, "Error updating appstream2: "); + g_prefix_error (&second_error, "%s; Error updating appstream: ", first_error->message); + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Error pulling from repo: %s", second_error->message); + return TRUE; + } } + } + else /* empty path == local pull */ + { + g_autoptr(FlatpakRemoteState) state = NULL; + g_autoptr(OstreeAsyncProgress) ostree_progress = NULL; + g_autoptr(GError) first_error = NULL; + g_autoptr(GError) second_error = NULL; + g_autofree char *url = NULL; + g_autoptr(GMainContextPopDefault) main_context = NULL; - desc = flatpak_oci_index_get_manifest (index, branch); - if (desc == NULL) + if (!ostree_repo_remote_get_url (flatpak_dir_get_repo (system), + arg_origin, + &url, + &error)) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't find ref %s in child OCI registry index", branch); + "Error getting remote url: %s", error->message); return TRUE; } - versioned = flatpak_oci_registry_load_versioned (registry, NULL, desc->parent.digest, NULL, - NULL, &error); - if (versioned == NULL || !FLATPAK_IS_OCI_MANIFEST (versioned)) + if (!g_str_has_prefix (url, "file:")) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't open child manifest"); + "Local pull url doesn't start with file://"); return TRUE; } - 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) + state = flatpak_dir_get_remote_state_optional (system, arg_origin, NULL, &error); + if (state == NULL) { g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Can't pull ref %s from child OCI registry index: %s", branch, error->message); + "Error pulling from repo: %s", error->message); return TRUE; } - } - else - { + /* Work around ostree-pull spinning the default main context for the sync calls */ - main_context = g_main_context_new (); - g_main_context_push_thread_default (main_context); + main_context = flatpak_main_context_new_default (); - if (!flatpak_dir_pull_untrusted_local (system, arg_repo_path, - arg_origin, - branch, - NULL, - NULL, - NULL, &error)) + ostree_progress = ostree_async_progress_new_and_connect (no_progress_cb, NULL); + + if (!flatpak_dir_pull (system, state, new_branch, NULL, NULL, NULL, NULL, + FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, ostree_progress, + NULL, &first_error)) { - g_main_context_pop_thread_default (main_context); - g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, - "Error pulling from repo: %s", error->message); - return TRUE; + if (!flatpak_dir_pull (system, state, old_branch, NULL, NULL, NULL, NULL, + FLATPAK_PULL_FLAGS_NONE, OSTREE_REPO_PULL_FLAGS_UNTRUSTED, ostree_progress, + NULL, &second_error)) + { + g_prefix_error (&first_error, "Error updating appstream2: "); + g_prefix_error (&second_error, "%s; Error updating appstream: ", first_error->message); + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_FAILED, + "Error pulling from repo: %s", second_error->message); + return TRUE; + } } - g_main_context_pop_thread_default (main_context); + if (ostree_progress) + ostree_async_progress_finish (ostree_progress); } if (!flatpak_dir_deploy_appstream (system, @@ -544,11 +633,11 @@ } static gboolean -handle_uninstall (FlatpakSystemHelper *object, +handle_uninstall (FlatpakSystemHelper *object, GDBusMethodInvocation *invocation, - guint arg_flags, - const gchar *arg_ref, - const gchar *arg_installation) + guint arg_flags, + const gchar *arg_ref, + const gchar *arg_installation) { g_autoptr(FlatpakDir) system = NULL; g_autoptr(GError) error = NULL; @@ -635,13 +724,13 @@ static gboolean -handle_configure_remote (FlatpakSystemHelper *object, +handle_configure_remote (FlatpakSystemHelper *object, GDBusMethodInvocation *invocation, - guint arg_flags, - const gchar *arg_remote, - const gchar *arg_config, - GVariant *arg_gpg_key, - const gchar *arg_installation) + guint arg_flags, + const gchar *arg_remote, + const gchar *arg_config, + GVariant *arg_gpg_key, + const gchar *arg_installation) { g_autoptr(FlatpakDir) system = NULL; g_autoptr(GError) error = NULL; @@ -721,12 +810,12 @@ } static gboolean -handle_configure (FlatpakSystemHelper *object, - GDBusMethodInvocation *invocation, - guint arg_flags, - const gchar *arg_key, - const gchar *arg_value, - const gchar *arg_installation) +handle_configure (FlatpakSystemHelper *object, + GDBusMethodInvocation *invocation, + guint arg_flags, + const gchar *arg_key, + const gchar *arg_value, + const gchar *arg_installation) { g_autoptr(FlatpakDir) system = NULL; g_autoptr(GError) error = NULL; @@ -776,25 +865,23 @@ } static gboolean -handle_update_remote (FlatpakSystemHelper *object, +handle_update_remote (FlatpakSystemHelper *object, GDBusMethodInvocation *invocation, - guint arg_flags, - const gchar *arg_remote, - const gchar *arg_installation, - const gchar *arg_summary_path, - const gchar *arg_summary_sig_path) + guint arg_flags, + const gchar *arg_remote, + const gchar *arg_installation, + const gchar *arg_summary_path, + const gchar *arg_summary_sig_path) { g_autoptr(FlatpakDir) system = NULL; g_autoptr(GError) error = NULL; char *summary_data = NULL; gsize summary_size; g_autoptr(GBytes) summary_bytes = NULL; - g_autoptr(GVariant) summary = NULL; char *summary_sig_data = NULL; gsize summary_sig_size; g_autoptr(GBytes) summary_sig_bytes = NULL; - g_autoptr(OstreeGpgVerifyResult) gpg_result = NULL; - g_autofree char *collection_id = NULL; + g_autoptr(FlatpakRemoteState) state = NULL; g_debug ("UpdateRemote %u %s %s %s %s", arg_flags, arg_remote, arg_installation, arg_summary_path, arg_summary_sig_path); @@ -819,23 +906,6 @@ return TRUE; } - if (!flatpak_dir_ensure_repo (system, NULL, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return TRUE; - } - -#ifdef FLATPAK_ENABLE_P2P - if (!ostree_repo_get_remote_option (flatpak_dir_get_repo (system), arg_remote, "collection-id", - NULL, &collection_id, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return TRUE; - } - else if (collection_id != NULL && *collection_id == '\0') - g_clear_pointer (&collection_id, g_free); -#endif /* FLATPAK_ENABLE_P2P */ - if (!g_file_get_contents (arg_summary_path, &summary_data, &summary_size, &error)) { g_dbus_method_invocation_return_gerror (invocation, error); @@ -843,7 +913,7 @@ } summary_bytes = g_bytes_new_take (summary_data, summary_size); - if (collection_id == NULL) + if (*arg_summary_sig_path != 0) { if (!g_file_get_contents (arg_summary_sig_path, &summary_sig_data, &summary_sig_size, &error)) { @@ -851,36 +921,26 @@ return TRUE; } summary_sig_bytes = g_bytes_new_take (summary_sig_data, summary_sig_size); + } - gpg_result = ostree_repo_verify_summary (flatpak_dir_get_repo (system), - arg_remote, - summary_bytes, - summary_sig_bytes, - NULL, &error); - if (gpg_result == NULL || - !ostree_gpg_verify_result_require_valid_signature (gpg_result, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return TRUE; - } + state = flatpak_dir_get_remote_state_for_summary (system, arg_remote, summary_bytes, summary_sig_bytes, NULL, &error); + if (state == NULL) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } - summary = g_variant_ref_sink (g_variant_new_from_bytes (OSTREE_SUMMARY_GVARIANT_FORMAT, - summary_bytes, FALSE)); - if (!flatpak_dir_update_remote_configuration_for_summary (system, arg_remote, summary, - FALSE, NULL, NULL, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return TRUE; - } + if (summary_sig_bytes == NULL && state->collection_id == NULL) + { + g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR, G_DBUS_ERROR_INVALID_ARGS, + "UpdateRemote requires a summary signature"); + return TRUE; } - else + + if (!flatpak_dir_update_remote_configuration_for_state (system, state, FALSE, NULL, NULL, &error)) { - if (!flatpak_dir_update_remote_configuration_for_repo_metadata (system, arg_remote, summary, - FALSE, NULL, NULL, &error)) - { - g_dbus_method_invocation_return_gerror (invocation, error); - return TRUE; - } + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; } flatpak_system_helper_complete_update_remote (object, invocation); @@ -965,6 +1025,103 @@ return TRUE; } + +static gboolean +handle_ensure_repo (FlatpakSystemHelper *object, + GDBusMethodInvocation *invocation, + const gchar *arg_installation) +{ + g_autoptr(FlatpakDir) system = NULL; + g_autoptr(GError) error = NULL; + + g_debug ("EnsureRepo %s", arg_installation); + + system = dir_get_system (arg_installation, &error); + if (system == NULL) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + if (!flatpak_dir_ensure_repo (system, NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + flatpak_system_helper_complete_ensure_repo (object, invocation); + + return TRUE; +} + +static gboolean +handle_run_triggers (FlatpakSystemHelper *object, + GDBusMethodInvocation *invocation, + const gchar *arg_installation) +{ + g_autoptr(FlatpakDir) system = NULL; + g_autoptr(GError) error = NULL; + + g_debug ("RunTriggers %s", arg_installation); + + system = dir_get_system (arg_installation, &error); + if (system == NULL) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + if (!flatpak_dir_ensure_repo (system, NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + if (!flatpak_dir_run_triggers (system, NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + flatpak_system_helper_complete_run_triggers (object, invocation); + + return TRUE; +} + +static gboolean +handle_update_summary (FlatpakSystemHelper *object, + GDBusMethodInvocation *invocation, + const gchar *arg_installation) +{ + g_autoptr(FlatpakDir) system = NULL; + g_autoptr(GError) error = NULL; + + g_debug ("UpdateSummary %s", arg_installation); + + system = dir_get_system (arg_installation, &error); + if (system == NULL) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + if (!flatpak_dir_ensure_repo (system, NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + if (!flatpak_dir_update_summary (system, NULL, &error)) + { + g_dbus_method_invocation_return_gerror (invocation, error); + return TRUE; + } + + flatpak_system_helper_complete_update_summary (object, invocation); + + return TRUE; +} + static gboolean flatpak_authorize_method_handler (GDBusInterfaceSkeleton *interface, GDBusMethodInvocation *invocation, @@ -973,6 +1130,7 @@ const gchar *method_name = g_dbus_method_invocation_get_method_name (invocation); const gchar *sender = g_dbus_method_invocation_get_sender (invocation); GVariant *parameters = g_dbus_method_invocation_get_parameters (invocation); + g_autoptr(AutoPolkitSubject) subject = polkit_system_bus_name_new (sender); g_autoptr(AutoPolkitDetails) details = polkit_details_new (); const gchar *action = NULL; @@ -1089,7 +1247,10 @@ polkit_details_insert (details, "remote", remote); } else if (g_strcmp0 (method_name, "RemoveLocalRef") == 0 || - g_strcmp0 (method_name, "PruneLocalRepo") == 0) + g_strcmp0 (method_name, "PruneLocalRepo") == 0 || + g_strcmp0 (method_name, "EnsureRepo") == 0 || + g_strcmp0 (method_name, "RunTriggers") == 0 || + g_strcmp0 (method_name, "UpdateSummary") == 0) { const char *remote; @@ -1143,7 +1304,7 @@ flatpak_system_helper_set_version (FLATPAK_SYSTEM_HELPER (helper), 1); - g_object_set_data_full (G_OBJECT(helper), "track-alive", GINT_TO_POINTER(42), skeleton_died_cb); + g_object_set_data_full (G_OBJECT (helper), "track-alive", GINT_TO_POINTER (42), skeleton_died_cb); g_dbus_interface_skeleton_set_flags (G_DBUS_INTERFACE_SKELETON (helper), G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD); @@ -1157,6 +1318,9 @@ g_signal_connect (helper, "handle-update-remote", G_CALLBACK (handle_update_remote), NULL); g_signal_connect (helper, "handle-remove-local-ref", G_CALLBACK (handle_remove_local_ref), NULL); g_signal_connect (helper, "handle-prune-local-repo", G_CALLBACK (handle_prune_local_repo), NULL); + g_signal_connect (helper, "handle-ensure-repo", G_CALLBACK (handle_ensure_repo), NULL); + g_signal_connect (helper, "handle-run-triggers", G_CALLBACK (handle_run_triggers), NULL); + g_signal_connect (helper, "handle-update-summary", G_CALLBACK (handle_update_summary), NULL); g_signal_connect (helper, "g-authorize-method", G_CALLBACK (flatpak_authorize_method_handler), @@ -1190,11 +1354,11 @@ } static void -binary_file_changed_cb (GFileMonitor *file_monitor, - GFile *file, - GFile *other_file, +binary_file_changed_cb (GFileMonitor *file_monitor, + GFile *file, + GFile *other_file, GFileMonitorEvent event_type, - gpointer data) + gpointer data) { static gboolean got_it = FALSE; @@ -1224,13 +1388,14 @@ main (int argc, char **argv) { - gchar exe_path[PATH_MAX+1]; + gchar exe_path[PATH_MAX + 1]; ssize_t exe_path_len; gboolean replace; gboolean verbose; gboolean show_version; GBusNameOwnerFlags flags; GOptionContext *context; + g_autoptr(GError) error = NULL; const GOptionEntry options[] = { { "replace", 'r', 0, G_OPTION_ARG_NONE, &replace, "Replace old daemon.", NULL }, @@ -1260,7 +1425,7 @@ if (!g_option_context_parse (context, &argc, &argv, &error)) { - g_printerr ("%s: %s", g_get_application_name(), error->message); + g_printerr ("%s: %s", g_get_application_name (), error->message); g_printerr ("\n"); g_printerr ("Try \"%s --help\" for more information.", g_get_prgname ()); diff -Nru flatpak-0.11.3/system-helper/flatpak-system-helper.service.in flatpak-1.0.7/system-helper/flatpak-system-helper.service.in --- flatpak-0.11.3/system-helper/flatpak-system-helper.service.in 2017-05-11 15:32:10.000000000 +0000 +++ flatpak-1.0.7/system-helper/flatpak-system-helper.service.in 2018-09-12 08:41:11.000000000 +0000 @@ -6,3 +6,4 @@ Environment=XDG_DATA_DIRS=@localstatedir@/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/ ExecStart=@libexecdir@/flatpak-system-helper Type=dbus +IOSchedulingClass=idle diff -Nru flatpak-0.11.3/system-helper/Makefile.am.inc flatpak-1.0.7/system-helper/Makefile.am.inc --- flatpak-0.11.3/system-helper/Makefile.am.inc 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/system-helper/Makefile.am.inc 2019-02-11 12:42:20.000000000 +0000 @@ -16,11 +16,10 @@ flatpak_system_helper_SOURCES = \ system-helper/flatpak-system-helper.c \ - lib/flatpak-error.c \ $(NULL) flatpak_system_helper_LDADD = $(BASE_LIBS) $(OSTREE_LIBS) $(JSON_LIBS) $(POLKIT_LIBS) libflatpak-common.la -flatpak_system_helper_CFLAGS = $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(POLKIT_CFLAGS) +flatpak_system_helper_CFLAGS = $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(POLKIT_CFLAGS) -DFLATPAK_COMPILATION system-helper/org.freedesktop.Flatpak.rules: system-helper/org.freedesktop.Flatpak.rules.in $(AM_V_GEN) $(SED) -e "s|\@privileged_group\@|$(PRIVILEGED_GROUP)|" $< > $@ diff -Nru flatpak-0.11.3/system-helper/org.freedesktop.Flatpak.policy.in flatpak-1.0.7/system-helper/org.freedesktop.Flatpak.policy.in --- flatpak-0.11.3/system-helper/org.freedesktop.Flatpak.policy.in 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/system-helper/org.freedesktop.Flatpak.policy.in 2019-02-11 12:42:20.000000000 +0000 @@ -10,7 +10,7 @@ --> The Flatpak Project - https://cgit.freedesktop.org/xdg-app/xdg-app/ + https://github.com/flatpak/flatpak package-x-generic diff -Nru flatpak-0.11.3/test-driver flatpak-1.0.7/test-driver --- flatpak-0.11.3/test-driver 2018-02-19 10:33:04.000000000 +0000 +++ flatpak-1.0.7/test-driver 2019-02-10 17:12:18.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # test-driver - basic testsuite driver script. -scriptversion=2013-07-13.22; # UTC +scriptversion=2018-03-07.03; # UTC -# Copyright (C) 2011-2014 Free Software Foundation, Inc. +# Copyright (C) 2011-2018 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -16,7 +16,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program. If not, see . +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -140,9 +140,9 @@ # Local Variables: # mode: shell-script # sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru flatpak-0.11.3/tests/expand-test-matrix.sh flatpak-1.0.7/tests/expand-test-matrix.sh --- flatpak-0.11.3/tests/expand-test-matrix.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/expand-test-matrix.sh 2018-10-04 09:17:06.000000000 +0000 @@ -0,0 +1,126 @@ +#!/bin/bash + +# This script expands test-matrix expressions into indiviual featuressets +# +# The basic element is a feature, which is just a name: +# "a" == enable feature a +# +# A featureset is a comma separated list of features: +# "a,b,c" == enable feature a, b and c +# +# A test-matrix is a list of featuresets to test and are specified by +# separating featuresets by '+': +# "a,b+a,c+e" == featuresets "a,b", "a,c" and "e" +# +# At any point in the expression where a feature is expected you can +# instead specify an entire test-matrix by enclosing a sub-expression +# in brackets. The result is the combinatorial combination of the +# sub-test-matrix with the current featureset. +# +# For example: +# +# "a,{b+c}" == "a,b+a,c" +# or: +# "a,b,{c,d+e,f}" == "a,b,c,d+a,b,e,f" +# +# This can happen multple times in an optionset which will fully expand all +# instances: +# "a,{b+c},{d+e}" == "a,{b+c},d+a,{b+c},e" == "a,b,d+a,c,d+a,{b+c},e" == "a,b,d+a,c,d+a,b,e+a,c,e" +# +# +# The common way to use this is to eiter list all the options to instance the test for each case: +# foo+bar+gazonk +# Or to create all combination of features: +# {foo+nofoo},{bar+nobar} + +tokens=( ) +current_token="" + +function next_token { + if [ ${#tokens[@]} -eq 0 ]; then + current_token="$" + else + current_token=${tokens[0]} + tokens=("${tokens[@]:1}") + fi +} + +parse_res="" +function parse { + local res=( ) + local cur=( ) + while true; do + next_token + local t=$current_token + if [ $t == "}" -o $t == "$" ]; then + break; + elif [ $t == "{" ]; then + parse + local sub=$parse_res + if [ ${#cur} -eq 0 ]; then + cur=( ${sub[@]} ) + else + local sub_res=( ) + for left in "${cur[@]}"; do + for right in $sub; do + sub_res+=("$left,$right") + done + done + cur=( ${sub_res[@]} ) + fi + elif [ $t == "+" ]; then + res+=( "${cur[@]}" ) + cur=( ) + else # ,t + if [ ${#cur} -eq 0 ]; then + cur=( $t ) + else + for i in "${!cur[@]}"; do + cur[$i]="${cur[$i]:+${cur[$i]},}$t" + done + fi + fi + done + if [ ${#cur} -ne 0 ]; then + res+=( "${cur[@]}" ) + fi + + parse_res="${res[@]}" +} + +tests="" +dist_tests="" +extra_dist_tests="" +function parse_test { + if [[ $1 =~ ^(.*).sh\{(.*)\}$ ]]; then + tokens=( $(awk -v RS='[{}+,]' '{if ($0 != "" && $0 != "\n") print $0; if (RT != "" && RT != ",") print RT}' <<< "${BASH_REMATCH[2]}") ) + parse + for r in $parse_res; do + tests="$tests ${BASH_REMATCH[1]}@$r.wrap" + done + extra_dist_tests="$extra_dist_tests ${BASH_REMATCH[1]}.sh" + else + dist_tests="$dist_tests $1" + fi +} + +for test in $1; do + parse_test $test +done + +echo "# This file is autogenerated by make update-test-matrix, don't edit" +echo "TEST_MATRIX= \\" +for f in $tests; do + echo " ${f} \\" +done +echo " \$(NULL)" +echo "TEST_MATRIX_DIST= \\" +for f in $dist_tests; do + echo " ${f} \\" +done +echo " \$(NULL)" +echo "TEST_MATRIX_EXTRA_DIST= \\" +for f in $extra_dist_tests; do + echo " ${f} \\" +done +echo " \$(NULL)" diff -Nru flatpak-0.11.3/tests/flatpak.supp flatpak-1.0.7/tests/flatpak.supp --- flatpak-0.11.3/tests/flatpak.supp 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/flatpak.supp 2019-02-11 12:42:20.000000000 +0000 @@ -27,7 +27,6 @@ ioctl(generic) fun:ioctl fun:glnx_regfile_copy_bytes - fun:glnx_file_copy_at } # There seem to be some leaks in "ostree pull", lets just ignore them for now @@ -138,3 +137,49 @@ fun:_g_local_file_new fun:soup_request_file_ensure_file } + +# glibc valgrind fnmatch issue (https://www.mail-archive.com/kde-bugs-dist@kde.org/msg214842.html) +{ + ignore_glibc_fnmatch + Memcheck:Cond + fun:__wmemchr_avx2 + fun:internal_fnwmatch + fun:fnmatch@@GLIBC_2.2.5 +} + +# ostree reflink check +{ + ignore_ostree_reflink_check_ioctl + Memcheck:Param + ioctl(generic) + fun:ioctl + fun:_check_support_reflink +} + +# ostree pthread_create issue +{ + ostree_pthread_create_issue + Memcheck:Leak + match-leak-kinds: possible + fun:calloc + fun:allocate_dtv + fun:_dl_allocate_tls + fun:pthread_create@@GLIBC_2.2.5 + fun:g_system_thread_new +} + +# Weird leak of UnixInputStream in ostree, can't figure it out +{ + ostree_unix_stream_leak + Memcheck:Leak + match-leak-kinds: definite + ... + fun:g_type_create_instance + ... + fun:g_object_new + fun:g_unix_input_stream_new + fun:repo_load_file_archive + fun:ostree_repo_load_file + fun:_ostree_repo_import_object + fun:async_import_in_thread +} diff -Nru flatpak-0.11.3/tests/httpcache.c flatpak-1.0.7/tests/httpcache.c --- flatpak-0.11.3/tests/httpcache.c 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/httpcache.c 2018-08-13 09:07:30.000000000 +0000 @@ -0,0 +1,46 @@ +#include "common/flatpak-utils-private.h" + +int +main (int argc, char *argv[]) +{ + SoupSession *session = flatpak_create_soup_session (PACKAGE_STRING); + GError *error = NULL; + const char *url, *dest; + int flags = 0; + + /* Avoid weird recursive type initialization deadlocks from libsoup */ + g_type_ensure (G_TYPE_SOCKET); + + if (argc == 3) + { + url = argv[1]; + dest = argv[2]; + } + else if (argc == 4 && g_strcmp0 (argv[1], "--compressed") == 0) + { + url = argv[2]; + dest = argv[3]; + flags |= FLATPAK_HTTP_FLAGS_STORE_COMPRESSED; + } + else + { + g_printerr("Usage httpcache [--compressed] URL DEST\n"); + return 1; + } + + + if (!flatpak_cache_http_uri (session, + url, + flags, + AT_FDCWD, dest, + NULL, NULL, NULL, &error)) + { + g_print ("%s\n", error->message); + return 1; + } + else + { + g_print ("Server returned status 200: ok\n"); + return 0; + } +} diff -Nru flatpak-0.11.3/tests/http-utils-test-server.py flatpak-1.0.7/tests/http-utils-test-server.py --- flatpak-0.11.3/tests/http-utils-test-server.py 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/http-utils-test-server.py 2018-08-28 08:05:44.000000000 +0000 @@ -0,0 +1,103 @@ +#!/usr/bin/python + +from wsgiref.handlers import format_date_time +from email.utils import parsedate +from calendar import timegm +import gzip +import sys +import time +import zlib + +if sys.version_info[0] >= 3: + from urllib.parse import parse_qs + import http.server as http_server + from io import BytesIO +else: + from urlparse import parse_qs + import BaseHTTPServer as http_server + from StringIO import StringIO as BytesIO + +server_start_time = int(time.time()) + +def parse_http_date(date): + parsed = parsedate(date) + if parsed is not None: + return timegm(parsed) + else: + return None + +class RequestHandler(http_server.BaseHTTPRequestHandler): + def do_GET(self): + parts = self.path.split('?', 1) + path = parts[0] + if len(parts) == 1: + query = {} + else: + query = parse_qs(parts[1], keep_blank_values=True) + + response = 200 + add_headers = {} + + if 'modified-time' in query: + modified_since = self.headers.get("If-Modified-Since") + if modified_since: + modified_since_time = parse_http_date(modified_since) + if modified_since_time <= server_start_time: + response = 304 + add_headers["Last-Modified"] = format_date_time(server_start_time) + + if 'etag' in query: + etag = str(server_start_time) + + if self.headers.get("If-None-Match") == etag: + response = 304 + add_headers['Etag'] = etag + + self.send_response(response) + for k, v in add_headers.items(): + self.send_header(k, v) + + if 'max-age' in query: + self.send_header('Cache-Control', 'max-age=' + query['max-age'][0]) + if 'no-cache' in query: + self.send_header('Cache-Control', 'no-cache') + if 'expires-past' in query: + self.send_header('Expires', format_date_time(server_start_time - 3600)) + if 'expires-future' in query: + self.send_header('Expires', format_date_time(server_start_time + 3600)) + + if response == 200: + self.send_header("Content-Type", "text/plain; charset=UTF-8") + + contents = "path=" + self.path + "\n" + + if not 'ignore-accept-encoding' in query: + accept_encoding = self.headers.get("Accept-Encoding") + if accept_encoding and accept_encoding == 'gzip': + self.send_header("Content-Encoding", "gzip") + + buf = BytesIO() + gzfile = gzip.GzipFile(mode='wb', fileobj=buf) + if isinstance(contents, bytes): + gzfile.write(contents) + else: + gzfile.write(contents.encode('utf-8')) + gzfile.close() + contents = buf.getvalue() + + self.end_headers() + + if response == 200: + if isinstance(contents, bytes): + self.wfile.write(contents) + else: + self.wfile.write(contents.encode('utf-8')) + +def test(): + if sys.version_info[0] >= 3: + http_server.test(RequestHandler, port=0) + else: + http_server.test(RequestHandler) + +if __name__ == '__main__': + test() diff -Nru flatpak-0.11.3/tests/libtest.sh flatpak-1.0.7/tests/libtest.sh --- flatpak-0.11.3/tests/libtest.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/libtest.sh 2019-02-11 12:42:20.000000000 +0000 @@ -62,9 +62,9 @@ fi if test -n "${FLATPAK_TESTS_VALGRIND:-}"; then - CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=no --error-exitcode=1 --num-callers=30 --suppressions=${test_srcdir}/flatpak.supp --suppressions=${test_srcdir}/glib.supp" + CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=no --error-exitcode=1 --gen-suppressions=all --num-callers=30 --suppressions=${test_srcdir}/flatpak.supp --suppressions=${test_srcdir}/glib.supp" elif test -n "${FLATPAK_TESTS_VALGRIND_LEAKS:-}"; then - CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=full --error-exitcode=1 --num-callers=30 --suppressions=${test_srcdir}/flatpak.supp --suppressions=${test_srcdir}/glib.supp" + CMD_PREFIX="env G_SLICE=always-malloc valgrind -q --leak-check=full --error-exitcode=1 --gen-suppressions=all --num-callers=30 --suppressions=${test_srcdir}/flatpak.supp --suppressions=${test_srcdir}/glib.supp" else CMD_PREFIX="" fi @@ -72,8 +72,7 @@ export MALLOC_CHECK_=3 export MALLOC_PERTURB_=$(($RANDOM % 255 + 1)) -# We need this to be in /var/tmp because /tmp has no xattr support -TEST_DATA_DIR=`mktemp -d /var/tmp/test-flatpak-XXXXXX` +TEST_DATA_DIR=`mktemp -d /tmp/test-flatpak-XXXXXX` mkdir -p ${TEST_DATA_DIR}/home mkdir -p ${TEST_DATA_DIR}/runtime mkdir -p ${TEST_DATA_DIR}/system @@ -94,9 +93,11 @@ if [ x${USE_SYSTEMDIR-} == xyes ] ; then export FL_DIR=${SYSTEMDIR} export U= + export INVERT_U=--user else export FL_DIR=${USERDIR} export U="--user" + export INVERT_U=--system fi if [ x${USE_DELTAS-} == xyes ] ; then @@ -203,7 +204,7 @@ fi GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-runtime.sh ${REPONAME} org.test.Platform "${COLLECTION_ID}" bash ls cat echo readlink > /dev/null - GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-app.sh ${REPONAME} "${COLLECTION_ID}" > /dev/null + GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-app.sh ${REPONAME} "" "${COLLECTION_ID}" > /dev/null update_repo $REPONAME "${COLLECTION_ID}" if [ $REPONAME == "test" ]; then $(dirname $0)/test-webserver.sh repos @@ -254,7 +255,7 @@ COLLECTION_ID="" fi - GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-app.sh ${REPONAME} "${COLLECTION_ID}" ${3:-UPDATED} > /dev/null + GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-app.sh ${REPONAME} "" "${COLLECTION_ID}" ${3:-UPDATED} > /dev/null update_repo $REPONAME "${COLLECTION_ID}" } @@ -270,34 +271,15 @@ update_repo $REPONAME "${COLLECTION_ID}" } -setup_python2_repo () { - REPONAME=${1:-test} - if [ x${USE_COLLECTIONS_IN_SERVER-} == xyes ] ; then - COLLECTION_ID=${2:-org.test.Collection.${REPONAME}} - else - COLLECTION_ID="" - fi - - GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-runtime.sh ${REPONAME} org.test.PythonPlatform "${COLLECTION_ID}" bash python2 ls cat echo rm readlink > /dev/null - GPGARGS="${GPGARGS:-${FL_GPGARGS}}" . $(dirname $0)/make-test-runtime.sh ${REPONAME} org.test.PythonSdk "${COLLECTION_ID}" python2 bash ls cat echo rm readlink make mkdir cp touch > /dev/null - update_repo $REPONAME "${COLLECTION_ID}" -} - install_repo () { REPONAME=${1:-test} - ${FLATPAK} ${U} install ${REPONAME}-repo org.test.Platform master - ${FLATPAK} ${U} install ${REPONAME}-repo org.test.Hello master + ${FLATPAK} ${U} install -y ${REPONAME}-repo org.test.Platform master + ${FLATPAK} ${U} install -y ${REPONAME}-repo org.test.Hello master } install_sdk_repo () { REPONAME=${1:-test} - ${FLATPAK} ${U} install ${REPONAME}-repo org.test.Sdk master -} - -install_python2_repo () { - REPONAME=${1:-test} - ${FLATPAK} ${U} install ${REPONAME}-repo org.test.PythonPlatform master - ${FLATPAK} ${U} install ${REPONAME}-repo org.test.PythonSdk master + ${FLATPAK} ${U} install -y ${REPONAME}-repo org.test.Sdk master } run () { @@ -309,14 +291,6 @@ ${CMD_PREFIX} flatpak run --command=bash ${ARGS-} org.test.Hello -c "$*" } -skip_without_user_xattrs () { - touch ${TEST_DATA_DIR}/test-xattrs - if ! setfattr -n user.testvalue -v somevalue ${TEST_DATA_DIR}/test-xattrs; then - echo "1..0 # SKIP this test requires xattr support" - exit 0 - fi -} - skip_without_bwrap () { if [ -z "${FLATPAK_BWRAP:-}" ]; then # running installed-tests: assume we know what we're doing @@ -329,21 +303,6 @@ fi } -skip_without_python2 () { - if ! test -f /usr/bin/python2 || ! /usr/bin/python2 -c "import sys; sys.exit(0 if sys.version_info >= (2, 7) else 1)" ; then - echo "1..0 # SKIP this test requires /usr/bin/python2 (2.7) support" - exit 0 - fi -} - -skip_without_p2p () { - if ! ${FLATPAK} remote-add --help | grep -q -e '--collection-id'; then - echo "1..0 # SKIP this test requires peer to peer support (--enable-p2p)" - exit 0 - fi -} - - sed s#@testdir@#${test_builddir}# ${test_srcdir}/session.conf.in > session.conf dbus-daemon --fork --config-file=session.conf --print-address=3 --print-pid=4 \ 3> dbus-session-bus-address 4> dbus-session-bus-pid @@ -355,7 +314,7 @@ fi cleanup () { - /bin/kill $DBUS_SESSION_BUS_PID ${FLATPAK_HTTP_PID:-} + /bin/kill -9 $DBUS_SESSION_BUS_PID ${FLATPAK_HTTP_PID:-} gpg-connect-agent --homedir "${FL_GPG_HOMEDIR}" killagent /bye || true fusermount -u $XDG_RUNTIME_DIR/doc || : if test -n "${TEST_SKIP_CLEANUP:-}"; then diff -Nru flatpak-0.11.3/tests/Makefile.am.inc flatpak-1.0.7/tests/Makefile.am.inc --- flatpak-0.11.3/tests/Makefile.am.inc 2018-02-19 10:32:48.000000000 +0000 +++ flatpak-1.0.7/tests/Makefile.am.inc 2019-02-11 12:42:20.000000000 +0000 @@ -12,15 +12,22 @@ AM_TESTS_ENVIRONMENT += FLATPAK_BWRAP=$$(cd $(top_builddir) && pwd)/flatpak-bwrap endif -testlibrary_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) +testlibrary_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) -DFLATPAK_COMPILATION testlibrary_LDADD = \ $(AM_LDADD) \ $(BASE_LIBS) \ + $(OSTREE_LIBS) \ libglnx.la \ libflatpak.la \ $(NULL) testlibrary_SOURCES = tests/testlibrary.c +tests_httpcache_CFLAGS = $(AM_CFLAGS) $(BASE_CFLAGS) $(OSTREE_CFLAGS) $(SOUP_CFLAGS) $(JSON_CFLAGS) $(APPSTREAM_GLIB_CFLAGS) \ + -DFLATPAK_COMPILATION \ + -DLOCALEDIR=\"$(localedir)\" +tests_httpcache_LDADD = $(AM_LDADD) $(BASE_LIBS) $(OSTREE_LIBS) $(SOUP_LIBS) $(JSON_LIBS) $(APPSTREAM_GLIB_LIBS) \ + libglnx.la libflatpak-common.la + 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)|" $< > $@ @@ -45,10 +52,15 @@ dist_installed_test_extra_scripts += \ buildutil/tap-driver.sh \ + tests/http-utils-test-server.py \ + tests/oci-registry-server.py \ + tests/oci-registry-client.py \ + tests/make-multi-collection-id-repo.sh \ tests/make-test-app.sh \ tests/make-test-runtime.sh \ tests/make-test-bundles.sh \ tests/test-webserver.sh \ + tests/test-wrapper.sh \ $(NULL) dist_installed_test_data = \ @@ -74,29 +86,39 @@ $(NULL) endif -dist_test_scripts = \ +# Run make update-test-matrix after changing this +TEST_MATRIX_SOURCE = \ tests/test-basic.sh \ - tests/test-run.sh \ - tests/test-run-system.sh \ - tests/test-run-deltas.sh \ - tests/test-run-system-deltas.sh \ - tests/test-repo.sh \ - tests/test-repo-collections.sh \ - tests/test-repo-collections-server-only.sh \ - tests/test-repo-system.sh \ + tests/test-build-update-repo.sh \ + tests/test-http-utils.sh \ + tests/test-run.sh{{user+system},{nodeltas+deltas}} \ + tests/test-repo.sh{user+system+collections+collections-server-only} \ tests/test-extensions.sh \ - tests/test-bundle.sh \ - tests/test-bundle-system.sh \ + tests/test-bundle.sh{user+system} \ tests/test-oci.sh \ + tests/test-oci-registry.sh{user+system} \ tests/test-unsigned-summaries.sh \ tests/test-update-remote-configuration.sh \ $(NULL) +update-test-matrix: + $(srcdir)/tests/expand-test-matrix.sh "$(TEST_MATRIX_SOURCE)" > tests/Makefile-test-matrix.am.inc + +tests/test-%.wrap: + @true + +include tests/Makefile-test-matrix.am.inc + +test_scripts = ${TEST_MATRIX} +dist_test_scripts = ${TEST_MATRIX_DIST} +dist_installed_test_extra_scripts += ${TEST_MATRIX_EXTRA_DIST} + test_programs = testlibrary +test_extra_programs = tests/httpcache @VALGRIND_CHECK_RULES@ VALGRIND_SUPPRESSIONS_FILES=tests/flatpak.supp tests/glib.supp -EXTRA_DIST += tests/flatpak.supp tests/glib.supp +EXTRA_DIST += tests/flatpak.supp tests/glib.supp tests/Makefile-test-matrix.am.inc tests/expand-test-matrix.sh tests/test-wrapper.sh DISTCLEANFILES += \ tests/services/org.freedesktop.Flatpak.service \ tests/services/org.freedesktop.Flatpak.SystemHelper.service \ diff -Nru flatpak-0.11.3/tests/Makefile-test-matrix.am.inc flatpak-1.0.7/tests/Makefile-test-matrix.am.inc --- flatpak-0.11.3/tests/Makefile-test-matrix.am.inc 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/Makefile-test-matrix.am.inc 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,30 @@ +# This file is autogenerated by make update-test-matrix, don't edit +TEST_MATRIX= \ + tests/test-run@user,nodeltas.wrap \ + tests/test-run@user,deltas.wrap \ + tests/test-run@system,nodeltas.wrap \ + tests/test-run@system,deltas.wrap \ + tests/test-repo@user.wrap \ + tests/test-repo@system.wrap \ + tests/test-repo@collections.wrap \ + tests/test-repo@collections-server-only.wrap \ + tests/test-bundle@user.wrap \ + tests/test-bundle@system.wrap \ + tests/test-oci-registry@user.wrap \ + tests/test-oci-registry@system.wrap \ + $(NULL) +TEST_MATRIX_DIST= \ + tests/test-basic.sh \ + tests/test-build-update-repo.sh \ + tests/test-http-utils.sh \ + tests/test-extensions.sh \ + tests/test-oci.sh \ + tests/test-unsigned-summaries.sh \ + tests/test-update-remote-configuration.sh \ + $(NULL) +TEST_MATRIX_EXTRA_DIST= \ + tests/test-run.sh \ + tests/test-repo.sh \ + tests/test-bundle.sh \ + tests/test-oci-registry.sh \ + $(NULL) diff -Nru flatpak-0.11.3/tests/make-multi-collection-id-repo.sh flatpak-1.0.7/tests/make-multi-collection-id-repo.sh --- flatpak-0.11.3/tests/make-multi-collection-id-repo.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/make-multi-collection-id-repo.sh 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,50 @@ +#!/bin/bash +# +# make-multi-collection-id-repo.sh: Creates an ostree repository +# that will hold a different collection ID per ref. +# +# Copyright (C) 2017 Endless, Inc. +# +# Authors: +# Joaquim Rocha +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -e + +. $(dirname $0)/libtest.sh + +REPO_DIR=$1 +REPO_NAME=$(basename $REPO_DIR) + +COLLECTION_ID_PREFIX=org.test.Collection + +ostree --repo=${REPO_DIR} init --mode=archive --collection-id=${COLLECTION_ID_PREFIX}1 + +for i in {1..3}; do + APP_REPO=test${i} + APP_REPO_DIR=`pwd`/repos/${APP_REPO} + APP_ID=org.test.Hello${i} + COLLECTION_ID=${COLLECTION_ID_PREFIX}${i} + + $(dirname $0)/make-test-app.sh ${APP_REPO} ${APP_ID} ${COLLECTION_ID} + ref=$(ostree --repo=${APP_REPO_DIR} refs | grep ${APP_ID}) + + ostree --repo=${REPO_DIR} remote add --no-gpg-verify --collection-id=${COLLECTION_ID} ${APP_REPO} file://${APP_REPO_DIR} + ostree --repo=${REPO_DIR} pull ${APP_REPO} ${ref} +done + +ostree --repo=${REPO_DIR} summary --update diff -Nru flatpak-0.11.3/tests/make-test-app.sh flatpak-1.0.7/tests/make-test-app.sh --- flatpak-0.11.3/tests/make-test-app.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/make-test-app.sh 2019-02-11 12:42:20.000000000 +0000 @@ -6,9 +6,15 @@ REPONAME=$1 shift +APP_ID=$1 +shift COLLECTION_ID=$1 shift +if [ x$APP_ID = x ]; then + APP_ID=org.test.Hello +fi + EXTRA="${1-}" ARCH=`flatpak --default-arch` @@ -16,7 +22,7 @@ # Init dir cat > ${DIR}/metadata < ${DIR}/files/share/app-info/xmls/org.test.Hello.xml.gz < ${DIR}/files/share/app-info/xmls/${APP_ID}.xml.gz < - org.test.Hello.desktop - Hello world test app + $APP_ID.desktop + Hello world test app: $APP_ID Print a greeting

This is a test app.

@@ -63,7 +69,7 @@
EOF -cp $(dirname $0)/org.test.Hello.png ${DIR}/files/share/app-info/icons/flatpak/64x64/ +cp $(dirname $0)/org.test.Hello.png ${DIR}/files/share/app-info/icons/flatpak/64x64/${APP_ID}.png if [ x$COLLECTION_ID != x ]; then collection_args=--collection-id=${COLLECTION_ID} @@ -73,5 +79,5 @@ flatpak build-finish --command=hello.sh ${DIR} mkdir -p repos -flatpak build-export ${collection_args} ${GPGARGS-} repos/${REPONAME} ${DIR} +flatpak build-export ${collection_args} ${GPGARGS-} ${EXPORT_ARGS-} repos/${REPONAME} ${DIR} rm -rf ${DIR} diff -Nru flatpak-0.11.3/tests/make-test-runtime.sh flatpak-1.0.7/tests/make-test-runtime.sh --- flatpak-0.11.3/tests/make-test-runtime.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/make-test-runtime.sh 2019-02-11 12:42:20.000000000 +0000 @@ -2,6 +2,9 @@ set -e +# Don't inherit the -x from the testsuite +set +x + DIR=`mktemp -d` REPONAME=$1 @@ -18,7 +21,9 @@ name=${ID} EOF -cat ${DIR}/metadata +# On Debian derivatives, /usr/sbin and /sbin aren't in ordinary users' +# PATHs, but ldconfig is kept in /sbin +PATH="$PATH:/usr/sbin:/sbin" # Add bash and dependencies mkdir -p ${DIR}/usr/bin @@ -30,41 +35,42 @@ else cp `which ldconfig` ${DIR}/usr/bin fi -T=`mktemp` +LIBS=`mktemp` +BINS=`mktemp` + +add_bin() { + local f=$1 + shift + + if grep -qFe "${f}" $BINS; then + # Already handled + return 0 + fi + + echo $f >> $BINS + + # Add library dependencies + (ldd "${f}" | sed "s/.* => //" | awk '{ print $1}' | grep ^/ | sort -u -o $LIBS $LIBS -) || true + + local shebang=$(sed -n '1s/^#!\([^ ]*\).*/\1/p' "${f}") + if [ x$shebang != x ]; then + add_bin "$shebang" + fi +} + for i in $@; do I=`which $i` - cp $I ${DIR}/usr/bin - ldd $I | sed "s/.* => //" | awk '{ print $1}' | grep ^/ | grep ^/ >> $T - if test $i == python2; then - mkdir -p ${DIR}/usr/lib/python2.7/lib-dynload - # This is a hardcoded minimal set of modules we need in the current tests. - # Pretty hacky stuff. Add modules as needed. - PYDIR=/usr/lib/python2.7 - if test -d /usr/lib64/python2.7; then PYDIR=/usr/lib64/python2.7; fi - for py in site os stat posixpath genericpath warnings \ - linecache types UserDict abc _abcoll \ - _weakrefset copy_reg traceback sysconfig \ - re sre_compile sre_parse sre_constants \ - _sysconfigdata ; do - cp ${PYDIR}/$py.py ${DIR}/usr/lib/python2.7 - done - # These might not exist, depending how Python was configured; and the - # part after ${so} might be "module" or ".x86_64-linux-gnu" or - # something else - for so in _locale strop ; do - cp ${PYDIR}/lib-dynload/${so}*.so ${DIR}/usr/lib/python2.7/lib-dynload || : - done - for plat in $( cd ${PYDIR} && echo plat-* ); do - test -e ${PYDIR}/${plat} || continue - mkdir -p ${DIR}/usr/lib/python2.7/${plat} - cp ${PYDIR}/${plat}/*.py ${DIR}/usr/lib/python2.7/${plat}/ - done - fi + add_bin $I done -ln -s bash ${DIR}/usr/bin/sh -for i in `sort -u $T`; do +for i in `cat $BINS`; do + echo Adding binary $i 1>&2 + cp "$i" ${DIR}/usr/bin/ +done +for i in `cat $LIBS`; do + echo Adding library $i 1>&2 cp "$i" ${DIR}/usr/lib/ done +ln -s bash ${DIR}/usr/bin/sh # We copy the C.UTF8 locale and call it en_US. Its a bit of a lie, but # the real en_US locale is often not available, because its in the diff -Nru flatpak-0.11.3/tests/oci-registry-client.py flatpak-1.0.7/tests/oci-registry-client.py --- flatpak-0.11.3/tests/oci-registry-client.py 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/oci-registry-client.py 2018-08-28 08:05:44.000000000 +0000 @@ -0,0 +1,45 @@ +#!/usr/bin/python + +from __future__ import print_function + +import sys + +if sys.version_info[0] >= 3: + import http.client as http_client + import urllib.parse as urllib_parse +else: + import httplib as http_client + import urllib as urllib_parse + +if sys.argv[2] == 'add': + detach_icons = '--detach-icons' in sys.argv + if detach_icons: + sys.argv.remove('--detach-icons') + params = {'d': sys.argv[5]} + if detach_icons: + params['detach-icons'] = 1 + query = urllib_parse.urlencode(params) + conn = http_client.HTTPConnection(sys.argv[1]) + path = "/testing/{repo}/{tag}?{query}".format(repo=sys.argv[3], + tag=sys.argv[4], + query=query) + conn.request("POST", path) + response = conn.getresponse() + if response.status != 200: + print(response.read(), file=sys.stderr) + print("Failed: status={}".format(response.status), file=sys.stderr) + sys.exit(1) +elif sys.argv[2] == 'delete': + conn = http_client.HTTPConnection(sys.argv[1]) + path = "/testing/{repo}/{ref}".format(repo=sys.argv[3], + ref=sys.argv[4]) + conn.request("DELETE", path) + response = conn.getresponse() + if response.status != 200: + print(response.read(), file=sys.stderr) + print("Failed: status={}".format(response.status), file=sys.stderr) + sys.exit(1) +else: + print("Usage: oci-registry-client.py [add|remove] ARGS", file=sys.stderr) + sys.exit(1) + diff -Nru flatpak-0.11.3/tests/oci-registry-server.py flatpak-1.0.7/tests/oci-registry-server.py --- flatpak-0.11.3/tests/oci-registry-server.py 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/oci-registry-server.py 2018-08-28 08:05:44.000000000 +0000 @@ -0,0 +1,247 @@ +#!/usr/bin/python + +from __future__ import print_function + +import base64 +import hashlib +import json +import os +import sys +import time + +if sys.version_info[0] >= 3: + from urllib.parse import parse_qs + import http.server as http_server +else: + from urlparse import parse_qs + import BaseHTTPServer as http_server + +repositories = {} +icons = {} + +def get_index(): + results = [] + for repo_name in sorted(repositories.keys()): + repo = repositories[repo_name] + results.append({ + 'Name': repo_name, + 'Images': repo['images'], + 'Lists': [], + }) + + return json.dumps({ + 'Registry': '/', + 'Results': results + }, indent=4) + +def cache_icon(data_uri): + prefix = 'data:image/png;base64,' + assert data_uri.startswith(prefix) + data = base64.b64decode(data_uri[len(prefix):]) + h = hashlib.sha256() + h.update(data) + digest = h.hexdigest() + filename = digest + '.png' + icons[filename] = data + + return '/icons/' + filename + +serial = 0 +server_start_time = int(time.time()) + +def get_etag(): + return str(server_start_time) + '-' + str(serial) + +def modified(): + global serial + serial += 1 + +def parse_http_date(date): + parsed = parsedate(date) + if parsed is not None: + return timegm(parsed) + else: + return None + +class RequestHandler(http_server.BaseHTTPRequestHandler): + def check_route(self, route): + parts = self.path.split('?', 1) + path = parts[0].split('/') + + result = [] + + route_path = route.split('/') + print((route_path, path)) + if len(route_path) != len(path): + return False + + matches = {} + for i in range(1, len(route_path)): + if route_path[i][0] == '@': + matches[route_path[i][1:]] = path[i] + elif route_path[i] != path[i]: + return False + + self.matches = matches + if len(parts) == 1: + self.query = {} + else: + self.query = parse_qs(parts[1], keep_blank_values=True) + + return True + + def do_GET(self): + response = 200 + response_string = None + response_content_type = "application/octet-stream" + response_file = None + + add_headers = {} + + if self.check_route('/v2/@repo_name/blobs/@digest'): + repo_name = self.matches['repo_name'] + digest = self.matches['digest'] + response_file = repositories[repo_name]['blobs'][digest] + elif self.check_route('/v2/@repo_name/manifests/@ref'): + repo_name = self.matches['repo_name'] + ref = self.matches['ref'] + response_file = repositories[repo_name]['manifests'][ref] + elif self.check_route('/index/static') or self.check_route('/index/dynamic'): + etag = get_etag() + if self.headers.get("If-None-Match") == etag: + response = 304 + else: + response_string = get_index() + add_headers['Etag'] = etag + elif self.check_route('/icons/@filename') : + response_string = icons[self.matches['filename']] + response_content_type = 'image/png' + else: + response = 404 + + self.send_response(response) + for k, v in add_headers.items(): + self.send_header(k, v) + + if response == 200: + self.send_header("Content-Type", response_content_type) + + if response == 200 or response == 304: + self.send_header('Cache-Control', 'no-cache') + + self.end_headers() + + if response == 200: + if response_file: + with open(response_file, 'rb') as f: + response_string = f.read() + + if isinstance(response_string, bytes): + self.wfile.write(response_string) + else: + self.wfile.write(response_string.encode('utf-8')) + + def do_POST(self): + if self.check_route('/testing/@repo_name/@tag'): + repo_name = self.matches['repo_name'] + tag = self.matches['tag'] + d = self.query['d'][0] + detach_icons = 'detach-icons' in self.query + + repo = repositories.setdefault(repo_name, {}) + blobs = repo.setdefault('blobs', {}) + manifests = repo.setdefault('manifests', {}) + images = repo.setdefault('images', []) + + with open(os.path.join(d, 'index.json')) as f: + index = json.load(f) + + manifest_digest = index['manifests'][0]['digest'] + manifest_path = os.path.join(d, 'blobs', *manifest_digest.split(':')) + manifests[manifest_digest] = manifest_path + manifests[tag] = manifest_path + + with open(manifest_path) as f: + manifest = json.load(f) + + config_digest = manifest['config']['digest'] + config_path = os.path.join(d, 'blobs', *config_digest.split(':')) + + with open(config_path) as f: + config = json.load(f) + + for dig in os.listdir(os.path.join(d, 'blobs', 'sha256')): + digest = 'sha256:' + dig + path = os.path.join(d, 'blobs', 'sha256', dig) + if digest != manifest_digest: + blobs[digest] = path + + if detach_icons: + for size in (64, 128): + annotation = 'org.freedesktop.appstream.icon-{}'.format(size) + icon = manifest['annotations'].get(annotation) + if icon: + path = cache_icon(icon) + manifest['annotations'][annotation] = path + + image = { + "Tags": [tag], + "Digest": manifest_digest, + "MediaType": "application/vnd.oci.image.manifest.v1+json", + "OS": config['os'], + "Architecture": config['architecture'], + "Annotations": manifest['annotations'], + "Labels": {}, + } + + images.append(image) + + modified() + self.send_response(200) + self.end_headers() + return + else: + self.send_response(404) + self.end_headers() + return + + def do_DELETE(self): + if self.check_route('/testing/@repo_name/@ref'): + repo_name = self.matches['repo_name'] + ref = self.matches['ref'] + + repo = repositories.setdefault(repo_name, {}) + blobs = repo.setdefault('blobs', {}) + manifests = repo.setdefault('manifests', {}) + images = repo.setdefault('images', []) + + image = None + for i in images: + if i['Digest'] == ref or ref in i['Tags']: + image = i + break + + assert image + + images.remove(image) + del manifests[image['Digest']] + for t in image['Tags']: + del manifests[t] + + modified() + self.send_response(200) + self.end_headers() + return + else: + self.send_response(404) + self.end_headers() + return + +def test(): + if sys.version_info[0] >= 3: + http_server.test(RequestHandler, port=0) + else: + http_server.test(RequestHandler) + +if __name__ == '__main__': + test() diff -Nru flatpak-0.11.3/tests/package_version.txt flatpak-1.0.7/tests/package_version.txt --- flatpak-0.11.3/tests/package_version.txt 2018-02-19 13:20:10.000000000 +0000 +++ flatpak-1.0.7/tests/package_version.txt 2019-02-11 12:42:31.000000000 +0000 @@ -1 +1 @@ -0.11.3 +1.0.7 diff -Nru flatpak-0.11.3/tests/test-build-update-repo.sh flatpak-1.0.7/tests/test-build-update-repo.sh --- flatpak-0.11.3/tests/test-build-update-repo.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/test-build-update-repo.sh 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,50 @@ +#!/bin/bash +# +# Copyright © 2018 Endless Mobile, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# Authors: +# - Philip Withnall + +set -euo pipefail + +. $(dirname $0)/libtest.sh + +skip_without_bwrap + +echo "1..2" + +# Configure a repository, then set a collection ID on it and check that the ID +# is saved in the config file. +setup_repo +install_repo + +${FLATPAK} build-update-repo --collection-id=org.test.Collection repos/test + +assert_file_has_content repos/test/config '^collection-id=org.test.Collection$' + +echo "ok 1 update repo to add collection ID" + +# Test that you’re not allowed to change the collection ID once it’s already set. +if ${FLATPAK} build-update-repo --collection-id=org.test.Collection2 repos/test 2> build-update-repo-error-log; then + assert_not_reached "flatpak build-update-repo should not set a collection ID when one is already set" +fi + +assert_file_has_content repos/test/config '^collection-id=org.test.Collection$' +assert_not_file_has_content repos/test/config '^collection-id=org.test.Collection2$' + +echo "ok 2 collection ID cannot be changed" diff -Nru flatpak-0.11.3/tests/test-bundle.sh flatpak-1.0.7/tests/test-bundle.sh --- flatpak-0.11.3/tests/test-bundle.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-bundle.sh 2019-02-11 12:42:20.000000000 +0000 @@ -22,7 +22,6 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs echo "1..7" @@ -85,11 +84,11 @@ echo "ok install app bundle" -${FLATPAK} uninstall ${U} org.test.Platform +${FLATPAK} uninstall -y --force-remove ${U} org.test.Platform assert_not_has_file $FL_DIR/repo/refs/remotes/org.test.Platform-origin/runtime/org.test.Platform/$ARCH/master -${FLATPAK} install ${U} --bundle bundles/platform.flatpak +${FLATPAK} install -y ${U} --bundle bundles/platform.flatpak assert_has_file $FL_DIR/repo/refs/remotes/org.test.Platform-origin/runtime/org.test.Platform/$ARCH/master RUNTIME_COMMIT=`cat $FL_DIR/repo/refs/remotes/org.test.Platform-origin/runtime/org.test.Platform/$ARCH/master` @@ -128,7 +127,7 @@ # TODO: For weird reasons this breaks in the system case. Needs debugging if [ x${USE_SYSTEMDIR-} != xyes ] ; then - ${FLATPAK} ${U} update -v org.test.Hello master + ${FLATPAK} ${U} update -y -v org.test.Hello master ALSO_OLD_COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Hello` assert_streq "$OLD_COMMIT" "$ALSO_OLD_COMMIT" fi @@ -137,7 +136,7 @@ make_updated_app -${FLATPAK} ${U} update org.test.Hello +${FLATPAK} ${U} update -y org.test.Hello NEW_COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Hello` diff -Nru flatpak-0.11.3/tests/test-bundle-system.sh flatpak-1.0.7/tests/test-bundle-system.sh --- flatpak-0.11.3/tests/test-bundle-system.sh 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/tests/test-bundle-system.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011 Colin Walters -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_SYSTEMDIR=yes - -. $(dirname $0)/test-bundle.sh diff -Nru flatpak-0.11.3/tests/test-extensions.sh flatpak-1.0.7/tests/test-extensions.sh --- flatpak-0.11.3/tests/test-extensions.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-extensions.sh 2019-02-11 12:42:20.000000000 +0000 @@ -22,7 +22,6 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs echo "1..2" @@ -44,7 +43,7 @@ ${FLATPAK} build-export --runtime ${GPGARGS-} repos/test ${DIR} ${VERSION} rm -rf ${DIR} - ${FLATPAK} --user install test-repo $ID $VERSION + ${FLATPAK} --user install -y test-repo $ID $VERSION } add_extensions () { @@ -57,6 +56,7 @@ mkdir -p $DIR/files/foo/none mkdir -p $DIR/files/foo/dir mkdir -p $DIR/files/foo/dir2 + mkdir -p $DIR/files/foo/multiversion cat >> $DIR/metadata < /dev/null -. $(dirname $0)/make-test-app.sh test "" > /dev/null +. $(dirname $0)/make-test-app.sh test "" "" > /dev/null # Modify platform metadata ostree checkout -U --repo=repos/test runtime/org.test.Platform/${ARCH}/master platform add_extensions platform -ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --branch=runtime/org.test.Platform/${ARCH}/master -s "modified metadata" platform -ostree summary -u --repo=repos/test +ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --canonical-permissions --branch=runtime/org.test.Platform/${ARCH}/master -s "modified metadata" platform +${FLATPAK} build-update-repo repos/test ${FLATPAK} remote-add --user --no-gpg-verify test-repo repos/test -${FLATPAK} --user install test-repo org.test.Platform master -${FLATPAK} --user install test-repo org.test.Hello master +${FLATPAK} --user install -y test-repo org.test.Platform master +${FLATPAK} --user install -y test-repo org.test.Hello master make_extension org.test.Extension1 master make_extension org.test.Extension1 not-master @@ -112,6 +117,8 @@ make_extension org.test.Extension4 master make_extension org.test.Dir.foo master make_extension org.test.Dir.bar master +make_extension org.test.Multiversion.master master +make_extension org.test.Multiversion.notmaster not-master assert_has_extension_file () { local prefix=$1 @@ -139,16 +146,19 @@ assert_has_extension_file /usr dir/foo/extension-org.test.Dir.foo:master assert_has_extension_file /usr dir/bar/extension-org.test.Dir.bar:master assert_not_has_extension_file /usr dir2/foo/exists +run_sh "ls -lR /usr/foo/multiversion" +assert_has_extension_file /usr multiversion/master/extension-org.test.Multiversion.master:master +assert_has_extension_file /usr multiversion/notmaster/extension-org.test.Multiversion.notmaster:not-master echo "ok runtime extensions" # Modify app metadata ostree checkout -U --repo=repos/test app/org.test.Hello/${ARCH}/master hello add_extensions hello -ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --branch=app/org.test.Hello/${ARCH}/master -s "modified metadata" hello -ostree summary -u --repo=repos/test +ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --canonical-permissions --branch=app/org.test.Hello/${ARCH}/master -s "modified metadata" hello +${FLATPAK} build-update-repo repos/test -${FLATPAK} --user update org.test.Hello master +${FLATPAK} --user update -y org.test.Hello master assert_has_extension_file /app ext1/exists assert_has_extension_file /app ext1/extension-org.test.Extension1:master @@ -161,5 +171,7 @@ assert_has_extension_file /app dir/foo/extension-org.test.Dir.foo:master assert_has_extension_file /app dir/bar/extension-org.test.Dir.bar:master assert_not_has_extension_file /app dir2/foo/exists +assert_has_extension_file /app multiversion/master/extension-org.test.Multiversion.master:master +assert_has_extension_file /app multiversion/notmaster/extension-org.test.Multiversion.notmaster:not-master echo "ok app extensions" diff -Nru flatpak-0.11.3/tests/test-http-utils.sh flatpak-1.0.7/tests/test-http-utils.sh --- flatpak-0.11.3/tests/test-http-utils.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/test-http-utils.sh 2018-10-03 13:41:21.000000000 +0000 @@ -0,0 +1,160 @@ +#!/bin/bash +# +# Copyright (C) 2018 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -euo pipefail + +. $(dirname $0)/libtest.sh + +$(dirname $0)/test-webserver.sh "" "python $test_srcdir/http-utils-test-server.py 0" +FLATPAK_HTTP_PID=$(cat httpd-pid) +mv httpd-port httpd-port-main +port=$(cat httpd-port-main) + +assert_result() { + test_string=$1 + compressed= + if [ "$2" = "--compressed" ] ; then + compressed="--compressed" + shift + fi + remote=$2 + local=$3 + + out=`${test_builddir}/httpcache $compressed "http://localhost:$port$remote" $local || :` + + case "$out" in + $test_string*) + return + ;; + *) + echo "For $remote => $local, expected '$test_string', got '$out'" + exit 1 + ;; + esac +} + +assert_cached() { + assert_result "Reusing cached value" $@ +} + +assert_304() { + assert_result "Server returned status 304:" $@ +} + +assert_ok() { + assert_result "Server returned status 200:" $@ +} + + +have_xattrs() { + touch $1/test-xattrs + setfattr -n user.testvalue -v somevalue $1/test-xattrs > /dev/null 2>&1 +} + +echo "1..6" + +# Without anything else, cached for 30 minutes +assert_ok "/" $test_tmpdir/output +assert_cached "/" $test_tmpdir/output +rm -f $test_tmpdir/output* + +# An explicit cache-lifetime +assert_ok "/?max-age=3600" $test_tmpdir/output +assert_cached "/?max-age=3600" $test_tmpdir/output +rm -f $test_tmpdir/output* + +# Turn off caching +assert_ok "/?max-age=0" $test_tmpdir/output +assert_ok "/?max-age=0" $test_tmpdir/output +rm -f $test_tmpdir/output* + +# Turn off caching a different way +assert_ok "/?no-cache" $test_tmpdir/output +assert_ok "/?no-cache" $test_tmpdir/output +rm -f $test_tmpdir/output* + +# Expires support +assert_ok "/?expires-future" $test_tmpdir/output +assert_cached "/?expires-future" $test_tmpdir/output +rm -f $test_tmpdir/output* + +assert_ok "/?expires-past" $test_tmpdir/output +assert_ok "/?expires-past" $test_tmpdir/output +rm -f $test_tmpdir/output* + +echo 'ok http cache lifetimes' + +# Revalation with an etag +assert_ok "/?etag&no-cache" $test_tmpdir/output +assert_304 "/?etag&no-cache" $test_tmpdir/output +rm -f $test_tmpdir/output* + +# Revalation with an modified time +assert_ok "/?modified-time&no-cache" $test_tmpdir/output +assert_304 "/?modified-time&no-cache" $test_tmpdir/output +rm -f $test_tmpdir/output* + +echo 'ok http revalidation' + +# Test compressd downloading and storage +assert_ok --compressed "/compress" $test_tmpdir/output +contents=$(gunzip -c < $test_tmpdir/output) +assert_streq $contents path=/compress +rm -f $test_tmpdir/output* + +echo 'ok compressed download' + +# Test uncompressed downloading with compressed storage +assert_ok --compressed "/compress?ignore-accept-encoding" $test_tmpdir/output +contents=$(gunzip -c < $test_tmpdir/output) +assert_streq $contents path=/compress?ignore-accept-encoding +rm -f $test_tmpdir/output* + +echo 'ok compress after download' + +# Testing that things work without xattr support + +if have_xattrs $test_tmpdir ; then + echo "ok no-xattrs # skip /tmp doesn't have user xattr support" +else + assert_ok "/?etag&no-cache" $test_tmpdir/output + assert_has_file $test_tmpdir/output.flatpak.http + assert_304 "/?etag&no-cache" $test_tmpdir/output + rm -f $test_tmpdir/output* + echo "ok no-xattrs" +fi + +# Testing with xattr support + +xattrs_tempdir=`mktemp -d /var/tmp/test-flatpak-XXXXXX` +xattrs_cleanup () { + rm -rf xattrs_tempdir + cleanup +} +trap xattrs_cleanup EXIT + +if have_xattrs $xattrs_tempdir ; then + assert_ok "/?etag&no-cache" $xattrs_tempdir/output + assert_not_has_file $xattrs_tempdir/output.flatpak.http + assert_304 "/?etag&no-cache" $xattrs_tempdir/output + rm -f $xattrs_tempdir/output* + echo "ok xattrs" +else + echo "ok xattrs # skip /var/tmp has user no xattr support" +fi diff -Nru flatpak-0.11.3/tests/testlibrary.c flatpak-1.0.7/tests/testlibrary.c --- flatpak-0.11.3/tests/testlibrary.c 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/testlibrary.c 2019-02-11 12:42:20.000000000 +0000 @@ -5,6 +5,7 @@ #include #include +#include #include "libglnx/libglnx.h" #include "flatpak.h" @@ -18,19 +19,26 @@ static char *gpg_homedir; static char *gpg_args; static char *repo_url; -#ifdef FLATPAK_ENABLE_P2P static char *repo_collection_id; -#endif /* FLATPAK_ENABLE_P2P */ int httpd_pid = -1; static const char *gpg_id = "7B0961FD"; const char *repo_name = "test-repo"; +typedef enum { + RUN_TEST_SUBPROCESS_DEFAULT = 0, + RUN_TEST_SUBPROCESS_IGNORE_FAILURE = (1 << 0), + RUN_TEST_SUBPROCESS_NO_CAPTURE = (1 << 1), +} RunTestSubprocessFlags; + +static void run_test_subprocess (char **argv, + RunTestSubprocessFlags flags); + typedef struct { - const char *id; - const char *display_name; - gint priority; + const char *id; + const char *display_name; + gint priority; FlatpakStorageType storage_type; } InstallationExtraData; @@ -39,7 +47,7 @@ { g_autofree char *version = NULL; - version = g_strdup_printf ("%d.%d.%d" G_STRINGIFY(PACKAGE_EXTRA_VERSION), + version = g_strdup_printf ("%d.%d.%d" G_STRINGIFY (PACKAGE_EXTRA_VERSION), FLATPAK_MAJOR_VERSION, FLATPAK_MINOR_VERSION, FLATPAK_MICRO_VERSION); @@ -114,11 +122,11 @@ for (i = 0; i < system_dirs->len; i++) { - g_autoptr (FlatpakInstallation) new_install = NULL; + g_autoptr(FlatpakInstallation) new_install = NULL; g_autoptr(GFile) installation_path = NULL; g_autofree char *path_str = NULL; - installation = (FlatpakInstallation*) g_ptr_array_index (system_dirs, i); + installation = (FlatpakInstallation *) g_ptr_array_index (system_dirs, i); g_assert_false (flatpak_installation_get_is_user (installation)); installation_path = flatpak_installation_get_path (installation); @@ -147,10 +155,10 @@ new_install = flatpak_installation_new_system_with_id (current_id, NULL, &error); g_assert_nonnull (new_install); - g_assert_cmpstr(current_id, ==, flatpak_installation_get_id (new_install)); - g_assert_cmpstr(current_display_name, ==, flatpak_installation_get_display_name (new_install)); - g_assert_cmpint(current_priority, ==, flatpak_installation_get_priority (new_install)); - g_assert_cmpint(current_storage_type, ==, flatpak_installation_get_storage_type (new_install)); + g_assert_cmpstr (current_id, ==, flatpak_installation_get_id (new_install)); + g_assert_cmpstr (current_display_name, ==, flatpak_installation_get_display_name (new_install)); + g_assert_cmpint (current_priority, ==, flatpak_installation_get_priority (new_install)); + g_assert_cmpint (current_storage_type, ==, flatpak_installation_get_storage_type (new_install)); } } @@ -177,30 +185,36 @@ g_autoptr(GError) error = NULL; g_autofree char *formatted = NULL; const char *valid; + FlatpakRefKind kind; + g_autofree char *name = NULL; + g_autofree char *arch = NULL; + g_autofree char *branch = NULL; + g_autofree char *commit = NULL; + g_autofree char *collection_id = NULL; ref = flatpak_ref_parse ("", &error); g_assert_null (ref); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED); + g_assert_error (error, FLATPAK_ERROR, FLATPAK_ERROR_INVALID_REF); g_clear_error (&error); ref = flatpak_ref_parse ("ref/or not", &error); g_assert_null (ref); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED); + g_assert_error (error, FLATPAK_ERROR, FLATPAK_ERROR_INVALID_REF); g_clear_error (&error); ref = flatpak_ref_parse ("ref/one/2/3", &error); g_assert_null (ref); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED); + g_assert_error (error, FLATPAK_ERROR, FLATPAK_ERROR_INVALID_REF); g_clear_error (&error); ref = flatpak_ref_parse ("app/a/b/c", &error); g_assert_null (ref); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED); + g_assert_error (error, FLATPAK_ERROR, FLATPAK_ERROR_INVALID_REF); g_clear_error (&error); ref = flatpak_ref_parse ("app/org.flatpak.Hello/b/.", &error); g_assert_null (ref); - g_assert_error (error, G_IO_ERROR, G_IO_ERROR_FAILED); + g_assert_error (error, FLATPAK_ERROR, FLATPAK_ERROR_INVALID_REF); g_clear_error (&error); valid = "app/org.flatpak.Hello/x86_64/master"; @@ -211,12 +225,51 @@ g_assert_cmpstr (flatpak_ref_get_name (ref), ==, "org.flatpak.Hello"); g_assert_cmpstr (flatpak_ref_get_arch (ref), ==, "x86_64"); g_assert_cmpstr (flatpak_ref_get_branch (ref), ==, "master"); -#ifdef FLATPAK_ENABLE_P2P g_assert_null (flatpak_ref_get_collection_id (ref)); -#endif /* FLATPAK_ENABLE_P2P */ formatted = flatpak_ref_format_ref (ref); g_assert_cmpstr (formatted, ==, valid); + + g_clear_object (&ref); + + valid = "runtime/org.gnome.Platform/x86_64/stable"; + ref = flatpak_ref_parse (valid, &error); + g_assert_no_error (error); + g_assert (FLATPAK_IS_REF (ref)); + + g_object_get (ref, + "kind", &kind, + "name", &name, + "arch", &arch, + "branch", &branch, + "commit", &commit, + "collection-id", &collection_id, + NULL); + g_assert_cmpint (kind, ==, FLATPAK_REF_KIND_RUNTIME); + g_assert_cmpstr (name, ==, "org.gnome.Platform"); + g_assert_cmpstr (arch, ==, "x86_64"); + g_assert_cmpstr (branch, ==, "stable"); + g_assert_null (commit); + g_assert_null (collection_id); + + formatted = flatpak_ref_format_ref (ref); + g_assert_cmpstr (formatted, ==, valid); + + g_clear_object (&ref); + + ref = g_object_new (FLATPAK_TYPE_REF, + "kind", FLATPAK_REF_KIND_RUNTIME, + "name", "org.gnome.Platform", + "arch", "x86_64", + "branch", "stable", + "commit", "0123456789", + "collection-id", "org.flathub.Stable", + NULL); + + g_assert_cmpstr (flatpak_ref_get_commit (ref), ==, "0123456789"); + g_assert_cmpstr (flatpak_ref_get_collection_id (ref), ==, "org.flathub.Stable"); + + g_clear_object (&ref); } static void @@ -225,7 +278,10 @@ g_autoptr(FlatpakInstallation) inst = NULL; g_autoptr(GError) error = NULL; g_autoptr(GPtrArray) remotes = NULL; + g_autoptr(GPtrArray) remotes2 = NULL; FlatpakRemote *remote; + const FlatpakRemoteType types[] = { FLATPAK_REMOTE_TYPE_STATIC }; + const FlatpakRemoteType types2[] = { FLATPAK_REMOTE_TYPE_LAN }; inst = flatpak_installation_new_user (NULL, &error); g_assert_no_error (error); @@ -237,6 +293,30 @@ remote = g_ptr_array_index (remotes, 0); g_assert (FLATPAK_IS_REMOTE (remote)); + + remotes2 = flatpak_installation_list_remotes_by_type (inst, types, + G_N_ELEMENTS (types), + NULL, &error); + g_assert_no_error (error); + g_assert_cmpuint (remotes2->len, ==, remotes->len); + + for (guint i = 0; i < remotes->len; ++i) + { + FlatpakRemote *remote1 = g_ptr_array_index (remotes, i); + FlatpakRemote *remote2 = g_ptr_array_index (remotes2, i); + g_assert_cmpstr (flatpak_remote_get_name (remote1), ==, + flatpak_remote_get_name (remote2)); + g_assert_cmpstr (flatpak_remote_get_url (remote1), ==, + flatpak_remote_get_url (remote2)); + } + + g_ptr_array_unref (remotes2); + remotes2 = flatpak_installation_list_remotes_by_type (inst, + types2, + G_N_ELEMENTS (types2), + NULL, &error); + g_assert_no_error (error); + g_assert_cmpuint (remotes2->len, ==, 0); } static void @@ -262,9 +342,7 @@ g_assert_true (flatpak_remote_get_gpg_verify (remote)); g_assert_cmpint (flatpak_remote_get_prio (remote), ==, 1); -#ifdef FLATPAK_ENABLE_P2P g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, repo_collection_id); -#endif /* FLATPAK_ENABLE_P2P */ } static void @@ -273,6 +351,10 @@ g_autoptr(FlatpakInstallation) inst = NULL; g_autoptr(GError) error = NULL; g_autoptr(FlatpakRemote) remote = NULL; + g_autoptr(GFile) inst_file = NULL; + g_autoptr(GFile) repo_file = NULL; + g_autoptr(OstreeRepo) repo = NULL; + gboolean gpg_verify_summary; gboolean res; inst = flatpak_installation_new_user (NULL, &error); @@ -281,14 +363,40 @@ remote = flatpak_installation_get_remote_by_name (inst, repo_name, NULL, &error); g_assert_no_error (error); -#ifdef FLATPAK_ENABLE_P2P - g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, NULL); - flatpak_remote_set_collection_id (remote, "org.example.CollectionID"); - g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, "org.example.CollectionID"); - /* Don’t leave the collection ID set since the repos aren’t configured with one. */ + g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, repo_collection_id); + + /* Flatpak doesn't provide access to gpg-verify-summary, so use ostree */ + res = flatpak_installation_modify_remote (inst, remote, NULL, &error); + g_assert_no_error (error); + g_assert_true (res); + inst_file = flatpak_installation_get_path (inst); + repo_file = g_file_get_child (inst_file, "repo"); + repo = ostree_repo_new (repo_file); + res = ostree_repo_open (repo, NULL, &error); + g_assert_no_error (error); + g_assert_true (res); + res = ostree_repo_get_remote_boolean_option (repo, repo_name, "gpg-verify-summary", TRUE, &gpg_verify_summary, &error); + g_assert_no_error (error); + g_assert_true (res); + g_assert_false (gpg_verify_summary); + + /* Temporarily unset the collection ID */ flatpak_remote_set_collection_id (remote, NULL); g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, NULL); -#endif /* FLATPAK_ENABLE_P2P */ + + res = flatpak_installation_modify_remote (inst, remote, NULL, &error); + g_assert_no_error (error); + g_assert_true (res); + res = ostree_repo_reload_config (repo, NULL, &error); + g_assert_no_error (error); + g_assert_true (res); + res = ostree_repo_get_remote_boolean_option (repo, repo_name, "gpg-verify-summary", FALSE, &gpg_verify_summary, &error); + g_assert_no_error (error); + g_assert_true (res); + g_assert_true (gpg_verify_summary); + + flatpak_remote_set_collection_id (remote, repo_collection_id); + g_assert_cmpstr (flatpak_remote_get_collection_id (remote), ==, repo_collection_id); g_assert_cmpstr (flatpak_remote_get_title (remote), ==, NULL); flatpak_remote_set_title (remote, "Test Repo"); @@ -299,8 +407,8 @@ g_assert_cmpint (flatpak_remote_get_prio (remote), ==, 15); res = flatpak_installation_modify_remote (inst, remote, NULL, &error); - g_assert_true (res); g_assert_no_error (error); + g_assert_true (res); g_clear_object (&remote); @@ -328,23 +436,167 @@ } static void +create_multi_collection_id_repo (const char *repo_dir) +{ + g_autoptr(GError) error = NULL; + g_autofree char *arg0 = NULL; + + /* Create a repository in which each app has a different collection-id */ + arg0 = g_test_build_filename (G_TEST_DIST, "make-multi-collection-id-repo.sh", NULL); + const char *argv[] = { arg0, repo_dir, NULL }; + run_test_subprocess ((char **) argv, RUN_TEST_SUBPROCESS_DEFAULT); +} + +static void +test_list_refs_in_remotes (void) +{ + const char *repo_name = "multi-refs-repo"; + g_autofree char *repo_url = NULL; + + g_autoptr(GPtrArray) refs1 = NULL; + g_autoptr(GPtrArray) refs2 = NULL; + g_autoptr(FlatpakInstallation) inst = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(FlatpakRemote) remote = NULL; + g_autofree char *repo_dir = g_build_filename (testdir, repo_name, NULL); + g_autofree char *repo_uri = NULL; + g_autoptr(GHashTable) collection_ids = g_hash_table_new_full (g_str_hash, + g_str_equal, + NULL, NULL); + g_autoptr(GHashTable) ref_specs = g_hash_table_new_full (g_str_hash, + g_str_equal, + g_free, + NULL); + + create_multi_collection_id_repo (repo_dir); + + repo_url = g_strdup_printf ("file://%s", repo_dir); + + const char *argv[] = { "flatpak", "remote-add", "--user", "--no-gpg-verify", + repo_name, repo_url, NULL }; + + /* Add the repo we created above, which holds one collection ID per ref */ + run_test_subprocess ((char **) argv, RUN_TEST_SUBPROCESS_DEFAULT); + + inst = flatpak_installation_new_user (NULL, &error); + g_assert_no_error (error); + + /* Ensure the remote can be successfully found */ + remote = flatpak_installation_get_remote_by_name (inst, repo_name, NULL, &error); + g_assert_no_error (error); + g_assert_nonnull (remote); + + /* List the refs in the remote we've just added */ + refs1 = flatpak_installation_list_remote_refs_sync (inst, repo_name, NULL, &error); + + g_assert_no_error (error); + g_assert_nonnull (refs1); + g_assert (refs1->len > 1); + + /* Ensure that the number of different collection IDs is the same as the + * number of apps */ + for (guint i = 0; i < refs1->len; ++i) + { + FlatpakRef *ref = g_ptr_array_index (refs1, i); + g_hash_table_add (collection_ids, (gchar *) flatpak_ref_get_collection_id (ref)); + g_hash_table_add (ref_specs, flatpak_ref_format_ref (ref)); + } + + g_assert_cmpuint (g_hash_table_size (collection_ids), ==, refs1->len); + + /* Ensure that listing the refs by using a remote's URI will get us the + * same results as using the name */ + repo_uri = flatpak_remote_get_url (remote); + refs2 = flatpak_installation_list_remote_refs_sync (inst, repo_uri, NULL, &error); + + g_assert_no_error (error); + g_assert_nonnull (refs2); + g_assert_cmpuint (refs2->len, ==, refs1->len); + + for (guint i = 0; i < refs2->len; ++i) + { + FlatpakRef *ref = g_ptr_array_index (refs2, i); + g_autofree char *ref_spec = flatpak_ref_format_ref (ref); + g_assert_nonnull (g_hash_table_lookup (ref_specs, ref_spec)); + } +} + +static void +test_list_remote_refs (void) +{ + g_autoptr(FlatpakInstallation) inst = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(GPtrArray) refs = NULL; + int i; + + inst = flatpak_installation_new_user (NULL, &error); + g_assert_no_error (error); + + refs = flatpak_installation_list_remote_refs_sync (inst, repo_name, NULL, &error); + g_assert_no_error (error); + g_assert_nonnull (refs); + g_assert_cmpint (refs->len, ==, 2); + + + for (i = 0; i < refs->len; i++) + { + FlatpakRemoteRef *remote_ref = g_ptr_array_index (refs, i); + FlatpakRef *ref = FLATPAK_REF (remote_ref); + GBytes *metadata; + + g_assert (ref != NULL); + + if (strcmp ("org.test.Hello", flatpak_ref_get_name (ref)) == 0) + { + g_assert_cmpint (flatpak_ref_get_kind (ref), ==, FLATPAK_REF_KIND_APP); + } + else + { + g_assert_cmpstr (flatpak_ref_get_name (ref), ==, "org.test.Platform"); + g_assert_cmpint (flatpak_ref_get_kind (ref), ==, FLATPAK_REF_KIND_RUNTIME); + } + + g_assert_cmpstr (flatpak_ref_get_branch (ref), ==, "master"); + g_assert_cmpstr (flatpak_ref_get_commit (ref), !=, NULL); + g_assert_cmpstr (flatpak_ref_get_arch (ref), ==, flatpak_get_default_arch ()); + + g_assert_cmpstr (flatpak_remote_ref_get_remote_name (remote_ref), ==, repo_name); + g_assert_cmpstr (flatpak_remote_ref_get_eol (remote_ref), ==, NULL); + g_assert_cmpstr (flatpak_remote_ref_get_eol_rebase (remote_ref), ==, NULL); + + g_assert_cmpuint (flatpak_remote_ref_get_installed_size (remote_ref), >, 0); + g_assert_cmpuint (flatpak_remote_ref_get_download_size (remote_ref), >, 0); + + metadata = flatpak_remote_ref_get_metadata (remote_ref); + g_assert (metadata != NULL); + + if (strcmp ("org.test.Hello", flatpak_ref_get_name (ref)) == 0) + g_assert (g_str_has_prefix ((char *) g_bytes_get_data (metadata, NULL), "[Application]")); + else + g_assert (g_str_has_prefix ((char *) g_bytes_get_data (metadata, NULL), "[Runtime]")); + } +} + +static void progress_cb (const char *status, - guint progress, - gboolean estimating, - gpointer user_data) + guint progress, + gboolean estimating, + gpointer user_data) { int *count = user_data; + *count += 1; } static void -changed_cb (GFileMonitor *monitor, - GFile *file, - GFile *other_file, +changed_cb (GFileMonitor *monitor, + GFile *file, + GFile *other_file, GFileMonitorEvent event_type, - gpointer user_data) + gpointer user_data) { int *count = user_data; + *count += 1; } @@ -352,6 +604,7 @@ timeout_cb (gpointer data) { gboolean *timeout_reached = data; + *timeout_reached = TRUE; return G_SOURCE_CONTINUE; } @@ -377,8 +630,8 @@ if (bwrap != NULL) { gint exit_code = 0; - char *argv[] = { (char *)bwrap, "--unshare-ipc", "--unshare-net", - "--unshare-pid", "--ro-bind", "/", "/", "/bin/true", NULL }; + char *argv[] = { (char *) bwrap, "--unshare-ipc", "--unshare-net", + "--unshare-pid", "--ro-bind", "/", "/", "/bin/true", NULL }; g_autofree char *argv_str = g_strjoinv (" ", argv); g_test_message ("Spawning %s", argv_str); g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL, &exit_code, &error); @@ -433,9 +686,7 @@ g_assert_cmpstr (flatpak_ref_get_arch (FLATPAK_REF (ref)), ==, flatpak_get_default_arch ()); g_assert_cmpstr (flatpak_ref_get_branch (FLATPAK_REF (ref)), ==, "master"); g_assert_cmpint (flatpak_ref_get_kind (FLATPAK_REF (ref)), ==, FLATPAK_REF_KIND_RUNTIME); -#ifdef FLATPAK_ENABLE_P2P g_assert_null (flatpak_ref_get_collection_id (FLATPAK_REF (ref))); -#endif /* FLATPAK_ENABLE_P2P */ g_assert_cmpuint (flatpak_installed_ref_get_installed_size (ref), >, 0); @@ -483,9 +734,7 @@ g_assert_cmpstr (flatpak_ref_get_arch (FLATPAK_REF (ref)), ==, flatpak_get_default_arch ()); g_assert_cmpstr (flatpak_ref_get_branch (FLATPAK_REF (ref)), ==, "master"); g_assert_cmpint (flatpak_ref_get_kind (FLATPAK_REF (ref)), ==, FLATPAK_REF_KIND_APP); -#ifdef FLATPAK_ENABLE_P2P g_assert_null (flatpak_ref_get_collection_id (FLATPAK_REF (ref))); -#endif /* FLATPAK_ENABLE_P2P */ g_assert_cmpuint (flatpak_installed_ref_get_installed_size (ref), >, 0); g_assert_true (flatpak_installed_ref_get_is_current (ref)); @@ -563,18 +812,86 @@ g_ptr_array_unref (refs); } -typedef enum +static void update_test_app (void); +static void update_repo (void); + +static void +test_list_updates (void) { - RUN_TEST_SUBPROCESS_DEFAULT = 0, - RUN_TEST_SUBPROCESS_IGNORE_FAILURE = (1 << 0), - RUN_TEST_SUBPROCESS_NO_CAPTURE = (1 << 1), -} RunTestSubprocessFlags; + g_autoptr(FlatpakInstallation) inst = NULL; + g_autoptr(GError) error = NULL; + g_autoptr(GPtrArray) refs = NULL; + g_autoptr(FlatpakInstalledRef) ref = NULL; + g_autoptr(FlatpakInstalledRef) runtime_ref = NULL; + FlatpakInstalledRef *update_ref = NULL; + gboolean res; + + inst = flatpak_installation_new_user (NULL, &error); + g_assert_no_error (error); + + /* Install a runtime and app */ + runtime_ref = flatpak_installation_install (inst, + repo_name, + FLATPAK_REF_KIND_RUNTIME, + "org.test.Platform", + NULL, NULL, NULL, NULL, NULL, + &error); + g_assert_no_error (error); + g_assert (FLATPAK_IS_INSTALLED_REF (runtime_ref)); + + ref = flatpak_installation_install (inst, + repo_name, + FLATPAK_REF_KIND_APP, + "org.test.Hello", + NULL, NULL, NULL, NULL, NULL, + &error); + g_assert_no_error (error); + g_assert (FLATPAK_IS_INSTALLED_REF (ref)); + + /* Update the test app and list the update */ + update_test_app (); + update_repo (); + + /* Drop all in-memory summary caches so we can find the new update */ + flatpak_installation_drop_caches (inst, NULL, &error); + g_assert_no_error (error); + + refs = flatpak_installation_list_installed_refs_for_update (inst, NULL, &error); + g_assert_no_error (error); + g_assert_nonnull (refs); + g_assert_cmpint (refs->len, ==, 1); + update_ref = g_ptr_array_index (refs, 0); + g_assert_cmpstr (flatpak_ref_get_name (FLATPAK_REF (update_ref)), ==, "org.test.Hello"); + g_assert_cmpint (flatpak_ref_get_kind (FLATPAK_REF (update_ref)), ==, FLATPAK_REF_KIND_APP); + + /* Uninstall the runtime and app */ + res = flatpak_installation_uninstall (inst, + flatpak_ref_get_kind (FLATPAK_REF (ref)), + flatpak_ref_get_name (FLATPAK_REF (ref)), + flatpak_ref_get_arch (FLATPAK_REF (ref)), + flatpak_ref_get_branch (FLATPAK_REF (ref)), + NULL, NULL, NULL, + &error); + g_assert_no_error (error); + g_assert_true (res); + + res = flatpak_installation_uninstall (inst, + flatpak_ref_get_kind (FLATPAK_REF (runtime_ref)), + flatpak_ref_get_name (FLATPAK_REF (runtime_ref)), + flatpak_ref_get_arch (FLATPAK_REF (runtime_ref)), + flatpak_ref_get_branch (FLATPAK_REF (runtime_ref)), + NULL, NULL, NULL, + &error); + g_assert_no_error (error); + g_assert_true (res); +} static void -run_test_subprocess (char **argv, +run_test_subprocess (char **argv, RunTestSubprocessFlags flags) { int status; + g_autoptr(GError) error = NULL; g_autofree char *argv_str = g_strjoinv (" ", argv); g_autofree char *output = NULL; @@ -583,7 +900,7 @@ g_test_message ("Spawning %s", argv_str); if (flags & RUN_TEST_SUBPROCESS_NO_CAPTURE) - g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, NULL, NULL, NULL, NULL, &status, &error); + g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL, NULL, NULL, NULL, NULL, &status, &error); else g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &output, &errors, &status, &error); @@ -629,6 +946,8 @@ arg0 = g_test_build_filename (G_TEST_DIST, "make-test-runtime.sh", NULL); argv[0] = arg0; + argv[3] = repo_collection_id; + run_test_subprocess (argv, RUN_TEST_SUBPROCESS_DEFAULT); } @@ -636,10 +955,25 @@ make_test_app (void) { g_autofree char *arg0 = NULL; - char *argv[] = { NULL, "test", "", NULL }; + char *argv[] = { NULL, "test", "", "", NULL }; + + arg0 = g_test_build_filename (G_TEST_DIST, "make-test-app.sh", NULL); + argv[0] = arg0; + argv[3] = repo_collection_id; + + run_test_subprocess (argv, RUN_TEST_SUBPROCESS_DEFAULT); +} + +static void +update_test_app (void) +{ + g_autofree char *arg0 = NULL; + char *argv[] = { NULL, "test", "", "", "UPDATED", NULL }; arg0 = g_test_build_filename (G_TEST_DIST, "make-test-app.sh", NULL); argv[0] = arg0; + argv[3] = repo_collection_id; + run_test_subprocess (argv, RUN_TEST_SUBPROCESS_DEFAULT); } @@ -647,6 +981,7 @@ update_repo (void) { char *argv[] = { "flatpak", "build-update-repo", "--gpg-homedir=", "--gpg-sign=", "repos/test", NULL }; + g_auto(GStrv) gpgargs = NULL; gpgargs = g_strsplit (gpg_args, " ", 0); @@ -659,7 +994,7 @@ launch_httpd (void) { g_autofree char *path = g_test_build_filename (G_TEST_DIST, "test-webserver.sh", NULL); - char *argv[] = {path , "repos", NULL }; + char *argv[] = {path, "repos", NULL }; /* The web server puts itself in the background, so we can't wait * for EOF on its stdout, stderr */ @@ -670,11 +1005,11 @@ add_remote (void) { g_autoptr(GError) error = NULL; - char *argv[] = { "flatpak", "remote-add", "--user", "--gpg-import=", "name", "url", NULL }; - g_autofree char *argv_str = NULL; + char *argv[] = { "flatpak", "remote-add", "--user", "--gpg-import=", "--collection-id=", "name", "url", NULL }; g_autofree char *gpgimport = NULL; g_autofree char *port = NULL; g_autofree char *pid = NULL; + g_autofree char *collection_id_arg = NULL; launch_httpd (); @@ -692,10 +1027,12 @@ gpgimport = g_strdup_printf ("--gpg-import=%s/pubring.gpg", gpg_homedir); repo_url = g_strdup_printf ("http://127.0.0.1:%s/test", port); + collection_id_arg = g_strdup_printf ("--collection-id=%s", repo_collection_id); argv[3] = gpgimport; - argv[4] = (char *)repo_name; - argv[5] = repo_url; + argv[4] = collection_id_arg; + argv[5] = (char *) repo_name; + argv[6] = repo_url; run_test_subprocess (argv, RUN_TEST_SUBPROCESS_DEFAULT); } @@ -708,18 +1045,19 @@ g_autofree char *conffile_path = NULL; g_autofree char *contents_string = NULL; g_autofree char *path = NULL; + g_autoptr(GPtrArray) contents_array = NULL; g_autoptr(GError) error = NULL; path = g_strconcat (testdir, "/system-", id, NULL); - g_mkdir_with_parents (path, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (path, S_IRWXU | S_IRWXG | S_IRWXO); - contents_array = g_ptr_array_new_with_free_func ((GDestroyNotify)g_free); + contents_array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free); g_ptr_array_add (contents_array, - g_strdup_printf ("[Installation \"%s\"]\n" - "Path=%s", - id, path)); + g_strdup_printf ("[Installation \"%s\"]\n" + "Path=%s", + id, path)); if (display_name != NULL) g_ptr_array_add (contents_array, g_strdup_printf ("DisplayName=%s", display_name)); @@ -731,7 +1069,7 @@ g_ptr_array_add (contents_array, g_strdup_printf ("Priority=%s", priority)); g_ptr_array_add (contents_array, NULL); - contents_string = g_strjoinv ("\n", (char**)contents_array->pdata); + contents_string = g_strjoinv ("\n", (char **) contents_array->pdata); conffile_path = g_strconcat (flatpak_installationsdir, "/", id, ".conf", NULL); g_file_set_contents (conffile_path, contents_string, -1, &error); @@ -742,7 +1080,7 @@ setup_multiple_installations (void) { flatpak_installationsdir = g_strconcat (flatpak_configdir, "/installations.d", NULL); - g_mkdir_with_parents (flatpak_installationsdir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (flatpak_installationsdir, S_IRWXU | S_IRWXG | S_IRWXO); add_extra_installation ("extra-installation-1", "Extra system installation 1", "mmc", "10"); add_extra_installation ("extra-installation-2", "Extra system installation 2", "sdcard", "25"); @@ -752,6 +1090,8 @@ static void setup_repo (void) { + repo_collection_id = "com.example.Test"; + make_test_runtime (); make_test_app (); update_repo (); @@ -763,6 +1103,7 @@ { gchar *buffer = NULL; gsize length; + g_autoptr(GError) error = NULL; g_test_message ("copying %s to %s", src, dest); @@ -800,59 +1141,59 @@ g_autofree char *datadir = NULL; g_autofree char *homedir = NULL; - testdir = g_strdup ("/var/tmp/flatpak-test-XXXXXX"); + testdir = g_strdup ("/tmp/flatpak-test-XXXXXX"); g_mkdtemp (testdir); g_test_message ("testdir: %s", testdir); homedir = g_strconcat (testdir, "/home", NULL); - g_mkdir_with_parents (homedir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (homedir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("HOME", homedir, TRUE); - g_test_message ("setting HOME=%s", datadir); + g_test_message ("setting HOME=%s", homedir); cachedir = g_strconcat (testdir, "/home/cache", NULL); - g_mkdir_with_parents (cachedir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (cachedir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("XDG_CACHE_HOME", cachedir, TRUE); g_test_message ("setting XDG_CACHE_HOME=%s", cachedir); configdir = g_strconcat (testdir, "/home/config", NULL); - g_mkdir_with_parents (configdir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (configdir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("XDG_CONFIG_HOME", configdir, TRUE); g_test_message ("setting XDG_CONFIG_HOME=%s", configdir); datadir = g_strconcat (testdir, "/home/share", NULL); - g_mkdir_with_parents (datadir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (datadir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("XDG_DATA_HOME", datadir, TRUE); g_test_message ("setting XDG_DATA_HOME=%s", datadir); flatpak_runtimedir = g_strconcat (testdir, "/runtime", NULL); - g_mkdir_with_parents (flatpak_runtimedir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (flatpak_runtimedir, S_IRWXU | S_IRWXG | S_IRWXO); g_test_message ("setting XDG_RUNTIME_DIR=%s", flatpak_runtimedir); flatpak_systemdir = g_strconcat (testdir, "/system", NULL); - g_mkdir_with_parents (flatpak_systemdir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (flatpak_systemdir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("FLATPAK_SYSTEM_DIR", flatpak_systemdir, TRUE); g_test_message ("setting FLATPAK_SYSTEM_DIR=%s", flatpak_systemdir); flatpak_systemcachedir = g_strconcat (testdir, "/system-cache", NULL); - g_mkdir_with_parents (flatpak_systemcachedir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (flatpak_systemcachedir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("FLATPAK_SYSTEM_CACHE_DIR", flatpak_systemcachedir, TRUE); g_test_message ("setting FLATPAK_SYSTEM_CACHE_DIR=%s", flatpak_systemcachedir); flatpak_configdir = g_strconcat (testdir, "/config", NULL); - g_mkdir_with_parents (flatpak_configdir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (flatpak_configdir, S_IRWXU | S_IRWXG | S_IRWXO); g_setenv ("FLATPAK_CONFIG_DIR", flatpak_configdir, TRUE); g_test_message ("setting FLATPAK_CONFIG_DIR=%s", flatpak_configdir); gpg_homedir = g_strconcat (testdir, "/gpghome", NULL); - g_mkdir_with_parents (gpg_homedir, S_IRWXU|S_IRWXG|S_IRWXO); + g_mkdir_with_parents (gpg_homedir, S_IRWXU | S_IRWXG | S_IRWXO); gpg_args = g_strdup_printf ("--gpg-homedir=%s --gpg-sign=%s", gpg_homedir, gpg_id); g_setenv ("GPGARGS", gpg_args, TRUE); g_test_message ("setting GPGARGS=%s", gpg_args); copy_gpg (); - setup_multiple_installations(); + setup_multiple_installations (); setup_repo (); } @@ -891,8 +1232,11 @@ g_test_add_func ("/library/list-remotes", test_list_remotes); g_test_add_func ("/library/remote-by-name", test_remote_by_name); g_test_add_func ("/library/remote", test_remote); + g_test_add_func ("/library/list-remote-refs", test_list_remote_refs); g_test_add_func ("/library/list-refs", test_list_refs); g_test_add_func ("/library/install-launch-uninstall", test_install_launch_uninstall); + g_test_add_func ("/library/list-refs-in-remote", test_list_refs_in_remotes); + g_test_add_func ("/library/list-updates", test_list_updates); global_setup (); diff -Nru flatpak-0.11.3/tests/test-oci-registry.sh flatpak-1.0.7/tests/test-oci-registry.sh --- flatpak-0.11.3/tests/test-oci-registry.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/test-oci-registry.sh 2019-02-11 12:42:20.000000000 +0000 @@ -0,0 +1,221 @@ +#!/bin/bash +# +# Copyright (C) 2018 Red Hat, Inc. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -euo pipefail + +. $(dirname $0)/libtest.sh + +skip_without_bwrap + +echo "1..13" + +# Start the fake registry server + +$(dirname $0)/test-webserver.sh "" "python $test_srcdir/oci-registry-server.py 0" +FLATPAK_HTTP_PID=$(cat httpd-pid) +mv httpd-port httpd-port-main +port=$(cat httpd-port-main) +client="python $test_srcdir/oci-registry-client.py 127.0.0.1:$port" + +setup_repo_no_add oci + +# Add OCI bundles to it + +${FLATPAK} build-bundle --runtime --oci $FL_GPGARGS repos/oci oci/platform-image org.test.Platform +$client add platform latest $(pwd)/oci/platform-image + +${FLATPAK} build-bundle --oci $FL_GPGARGS repos/oci oci/app-image org.test.Hello +$client add hello latest $(pwd)/oci/app-image + +# Add an OCI remote + +flatpak remote-add ${U} oci-registry "oci+http://127.0.0.1:${port}" + +# Check that the images we expect are listed + +images=$(flatpak remote-ls ${U} oci-registry | sort | tr '\n' ' ' | sed 's/ $//') +assert_streq "$images" "org.test.Hello org.test.Platform" +echo "ok list remote" + +# Pull appstream data + +flatpak update ${U} --appstream oci-registry + +# Check that the appstream and icons exist + +if [ x${USE_SYSTEMDIR-} == xyes ] ; then + appstream=$SYSTEMDIR/appstream/oci-registry/$ARCH/appstream.xml.gz + icondir=$SYSTEMDIR/appstream/oci-registry/$ARCH/icons +else + appstream=$USERDIR/appstream/oci-registry/$ARCH/appstream.xml.gz + icondir=$USERDIR/appstream/oci-registry/$ARCH/icons +fi + +gunzip -c $appstream > appstream-uncompressed +assert_file_has_content appstream-uncompressed 'org.test.Hello.desktop' +assert_has_file $icondir/64x64/org.test.Hello.png + +echo "ok appstream" + +# Test that 'flatpak search' works +flatpak search org.test.Hello > search-results +assert_file_has_content search-results "Print a greeting" + +echo "ok search" + +# Replace with the app image with detached icons, check that the icons work + +old_icon_hash=(md5sum $icondir/64x64/org.test.Hello.png) +rm $icondir/64x64/org.test.Hello.png +$client delete hello latest +$client add --detach-icons hello latest $(pwd)/oci/app-image +flatpak update ${U} --appstream oci-registry +assert_has_file $icondir/64x64/org.test.Hello.png +new_icon_hash=(md5sum $icondir/64x64/org.test.Hello.png) +assert_streq $old_icon_hash $new_icon_hash + +echo "ok detached icons" + +# Try installing from the remote + +${FLATPAK} ${U} install -y oci-registry org.test.Platform +echo "ok install" + +# Remove the app from the registry, check that things were removed properly + +$client delete hello latest + +images=$(flatpak remote-ls ${U} oci-registry | sort | tr '\n' ' ' | sed 's/ $//') +assert_streq "$images" "org.test.Platform" + +flatpak update ${U} --appstream oci-registry + +assert_not_file_has_content $appstream 'org.test.Hello.desktop' +assert_not_has_file $icondir/64x64/org.test.Hello.png +assert_not_has_file $icondir/64x64 + +echo "ok appstream change" + +# Change the remote to a non-OCI remote, check that we cleaned up + +if [ x${USE_SYSTEMDIR-} == xyes ] ; then + base=$SYSTEMDIR +else + base=$USERDIR +fi + +assert_has_file $base/oci/oci-registry.index.gz +assert_has_file $base/oci/oci-registry.summary +assert_has_dir $base/appstream/oci-registry +flatpak remote-modify ${U} --url=http://127.0.0.1:${port} oci-registry +assert_not_has_file $base/oci/oci-registry.index.gz +assert_not_has_file $base/oci/oci-registry.summary +assert_not_has_dir $base/appstream/oci-registry + +echo "ok change remote to non-OCI" + +# Change it back and refetch + +flatpak remote-modify ${U} --url=oci+http://127.0.0.1:${port} oci-registry +flatpak update ${U} --appstream oci-registry + +# Delete the remote, check that everything was removed + +assert_has_file $base/oci/oci-registry.index.gz +assert_has_file $base/oci/oci-registry.summary +assert_has_dir $base/appstream/oci-registry +flatpak ${U} -y uninstall org.test.Platform +flatpak ${U} remote-delete oci-registry +assert_not_has_file $base/oci/oci-registry.index.gz +assert_not_has_file $base/oci/oci-registry.summary +assert_not_has_dir $base/appstream/oci-registry + +echo "ok delete remote" + +# Try installing the platform via a flatpakref file. + +cat << EOF > org.test.Platform.flatpakref +[Flatpak Ref] +Title=Test Platform +Name=org.test.Platform +Branch=master +Url=oci+http://127.0.0.1:${port} +IsRuntime=true +EOF + +${FLATPAK} ${U} install -y --from ./org.test.Platform.flatpakref + +flatpak remotes > remotes-list +assert_file_has_content remotes-list '^org.test.Platform-origin' + +assert_has_file $base/oci/org.test.Platform-origin.index.gz + +echo "ok install via flatpakref" + +# Uninstall, check that the origin remote was pruned, and files were +# cleaned up properly + +flatpak ${U} -y uninstall org.test.Platform + +flatpak remotes > remotes-list +assert_not_file_has_content remotes '^org.test.Platform-origin' + +assert_not_has_file $base/oci/org.test.Platform-origin.index.gz + +echo "ok prune origin remote" + +# Install from a (non-OCI) bundle, check that the repo-url is respected + +${FLATPAK} build-bundle --runtime --repo-url "oci+http://127.0.0.1:${port}" $FL_GPGARGS repos/oci org.test.Platform.flatpak org.test.Platform + +${FLATPAK} ${U} install -y --bundle org.test.Platform.flatpak + +flatpak remotes -d > remotes-list +assert_file_has_content remotes-list "^org.test.Platform-origin.*[ ]oci+http://127.0.0.1:${port}" + +assert_has_file $base/oci/org.test.Platform-origin.index.gz + +echo "ok install via bundle" + +# Install an app from a bundle + +${FLATPAK} build-bundle --repo-url "oci+http://127.0.0.1:${port}" $FL_GPGARGS repos/oci org.test.Hello.flatpak org.test.Hello + +${FLATPAK} ${U} install -y --bundle org.test.Hello.flatpak + +flatpak remotes -d > remotes-list +assert_file_has_content remotes-list "^org.test.Hello-origin.*[ ]oci+http://127.0.0.1:${port}" + +assert_has_file $base/oci/org.test.Hello-origin.index.gz + +echo "ok app install via bundle" + +# Install an updated app bundle with a different origin + +make_updated_app oci +${FLATPAK} build-bundle --repo-url "http://127.0.0.1:${port}" $FL_GPGARGS repos/oci org.test.Hello.flatpak org.test.Hello + +${FLATPAK} ${U} install -y --bundle org.test.Hello.flatpak + +flatpak remotes -d > remotes-list +assert_file_has_content remotes-list "^org.test.Hello-origin.*[ ]http://127.0.0.1:${port}" + +assert_not_has_file $base/oci/org.test.Hello-origin.index.gz + +echo "ok change remote origin via bundle" diff -Nru flatpak-0.11.3/tests/test-oci.sh flatpak-1.0.7/tests/test-oci.sh --- flatpak-0.11.3/tests/test-oci.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-oci.sh 2018-08-09 13:38:21.000000000 +0000 @@ -21,34 +21,36 @@ . $(dirname $0)/libtest.sh -export FLATPAK_ENABLE_EXPERIMENTAL_OCI=1 - skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs echo "1..2" -setup_repo - -${FLATPAK} ${U} install test-repo org.test.Platform master +setup_repo_no_add oci mkdir -p oci -${FLATPAK} build-bundle --oci $FL_GPGARGS repos/test oci/registry org.test.Hello +${FLATPAK} build-bundle --oci $FL_GPGARGS repos/oci oci/image org.test.Hello -assert_has_file oci/registry/oci-layout -assert_has_dir oci/registry/blobs/sha256 -assert_has_file oci/registry/index.json +assert_has_file oci/image/oci-layout +assert_has_dir oci/image/blobs/sha256 +assert_has_file oci/image/index.json -for i in oci/registry/blobs/sha256/*; do +for i in oci/image/blobs/sha256/*; do echo $(basename $i) $i >> sums done sha256sum -c sums +digest=$(grep sha256: oci/image/index.json | sed s'@.*sha256:\([a-fA-F0-9]\+\).*@\1@') +manifest=oci/image/blobs/sha256/$digest + +assert_has_file $manifest +assert_file_has_content $manifest "org.freedesktop.appstream.appdata.*Print a greeting" +assert_file_has_content $manifest "org.freedesktop.appstream.icon-64" + echo "ok export oci" ostree --repo=repo2 init --mode=archive-z2 -$FLATPAK build-import-bundle --oci repo2 oci/registry +$FLATPAK build-import-bundle --oci repo2 oci/image ostree checkout -U --repo=repo2 app/org.test.Hello/$ARCH/master checked-out diff -Nru flatpak-0.11.3/tests/test-repo-collections-server-only.sh flatpak-1.0.7/tests/test-repo-collections-server-only.sh --- flatpak-0.11.3/tests/test-repo-collections-server-only.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-repo-collections-server-only.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -#!/bin/bash -# -# Copyright © 2017 Endless Mobile, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_COLLECTIONS_IN_SERVER=yes -export USE_COLLECTIONS_IN_CLIENT=no - -. $(dirname $0)/test-repo.sh diff -Nru flatpak-0.11.3/tests/test-repo-collections.sh flatpak-1.0.7/tests/test-repo-collections.sh --- flatpak-0.11.3/tests/test-repo-collections.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-repo-collections.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -#!/bin/bash -# -# Copyright © 2017 Endless Mobile, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_COLLECTIONS_IN_SERVER=yes -export USE_COLLECTIONS_IN_CLIENT=yes - -. $(dirname $0)/test-repo.sh diff -Nru flatpak-0.11.3/tests/test-repo.sh flatpak-1.0.7/tests/test-repo.sh --- flatpak-0.11.3/tests/test-repo.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-repo.sh 2019-02-11 12:42:20.000000000 +0000 @@ -22,17 +22,25 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs -if [ x${USE_COLLECTIONS_IN_CLIENT-} == xyes ] || [ x${USE_COLLECTIONS_IN_SERVER-} == xyes ] ; then - skip_without_p2p -fi - -echo "1..12" +echo "1..22" #Regular repo setup_repo +# Ensure we have appdata +if ! ostree show --repo=repos/test appstream/${ARCH} > /dev/null; then + assert_not_reached "No appstream branch" +fi +if ! ostree show --repo=repos/test appstream2/${ARCH} > /dev/null; then + assert_not_reached "No appstream2 branch" +fi +ostree cat --repo=repos/test appstream/${ARCH} /appstream.xml.gz | gunzip -d > appdata.xml +assert_file_has_content appdata.xml "org.test.Hello.desktop" + +ostree cat --repo=repos/test appstream2/${ARCH} /appstream.xml > appdata2.xml +assert_file_has_content appdata2.xml "org.test.Hello.desktop" + # Unsigned repo (not supported with collections; client-side use of collections requires GPG) if [ x${USE_COLLECTIONS_IN_CLIENT-} == xyes ] ; then if GPGPUBKEY=" " GPGARGS=" " setup_repo test-no-gpg org.test.Collection.NoGpg; then @@ -47,6 +55,8 @@ GPGPUBKEY="" GPGARGS="" setup_repo test-no-gpg fi +flatpak remote-add ${U} --no-gpg-verify local-test-no-gpg-repo `pwd`/repos/test-no-gpg + #alternative gpg key repo GPGPUBKEY="${FL_GPG_HOMEDIR2}/pubring.gpg" GPGARGS="${FL_GPGARGS2}" setup_repo test-gpg2 org.test.Collection.Gpg2 @@ -64,29 +74,65 @@ assert_not_reached "Should fail metadata-update due to wrong gpg key" fi +# Remove new appstream branch so we can test deploying the old one +rm -rf repos/test/refs/heads/appstream2 +ostree summary -u --repo=repos/test ${FL_GPGARGS} + +flatpak ${U} --appstream update test-repo + +assert_has_file $FL_DIR/repo/refs/remotes/test-repo/appstream/$ARCH +assert_not_has_file $FL_DIR/repo/refs/remotes/test-repo/appstream2/$ARCH + +assert_has_file $FL_DIR/appstream/test-repo/$ARCH/.timestamp +assert_has_symlink $FL_DIR/appstream/test-repo/$ARCH/active +assert_not_has_file $FL_DIR/appstream/test-repo/$ARCH/active/appstream.xml +assert_has_file $FL_DIR/appstream/test-repo/$ARCH/active/appstream.xml.gz + +echo "ok update compat appstream" + +# Then regenerate new appstream branch and verify that we update to it +update_repo + +flatpak ${U} --appstream update test-repo + +assert_has_file $FL_DIR/repo/refs/remotes/test-repo/appstream2/$ARCH + +assert_has_file $FL_DIR/appstream/test-repo/$ARCH/.timestamp +assert_has_symlink $FL_DIR/appstream/test-repo/$ARCH/active +assert_has_file $FL_DIR/appstream/test-repo/$ARCH/active/appstream.xml +assert_has_file $FL_DIR/appstream/test-repo/$ARCH/active/appstream.xml.gz + +echo "ok update appstream" + if [ x${USE_COLLECTIONS_IN_CLIENT-} != xyes ] ; then install_repo test-no-gpg echo "ok install without gpg key" - ${FLATPAK} ${U} uninstall org.test.Platform org.test.Hello + ${FLATPAK} ${U} uninstall -y org.test.Platform org.test.Hello else echo "ok install without gpg key # skip not supported for collections" fi +install_repo local-test-no-gpg +${FLATPAK} ${U} uninstall -y org.test.Platform org.test.Hello +${FLATPAK} ${U} update --appstream local-test-no-gpg-repo + +echo "ok local without gpg key" + install_repo test-gpg2 echo "ok with alternative gpg key" -if ${FLATPAK} ${U} install test-repo org.test.Platform 2> install-error-log; then +if ${FLATPAK} ${U} install -y 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 +${FLATPAK} ${U} install -y --reinstall test-repo org.test.Platform echo "ok re-install" -${FLATPAK} ${U} uninstall org.test.Platform org.test.Hello +${FLATPAK} ${U} uninstall -y org.test.Platform org.test.Hello -if ${FLATPAK} ${U} install test-missing-gpg-repo org.test.Platform 2> install-error-log; then +if ${FLATPAK} ${U} install -y test-missing-gpg-repo org.test.Platform 2> install-error-log; then assert_not_reached "Should not be able to install with missing gpg key" fi assert_file_has_content install-error-log "GPG signatures found, but none are in trusted keyring" @@ -123,11 +169,67 @@ echo "ok update metadata" +if [ x${USE_COLLECTIONS_IN_SERVER-} == xyes ] ; then + COPY_COLLECTION_ID=org.test.Collection.test + copy_collection_args=--collection-id=${COLLECTION_ID} +else + COPY_COLLECTION_ID= + copy_collection_args= +fi + +ostree init --repo=repos/test-copy --mode=archive-z2 ${copy_collection_args} +${FLATPAK} build-commit-from --end-of-life=Reason1 --src-repo=repos/test repos/test-copy app/org.test.Hello/$ARCH/master +update_repo test-copy ${COPY_COLLECTION_ID} + +# Ensure we have no eol app in appdata +if ! ostree show --repo=repos/test-copy appstream/${ARCH} > /dev/null; then + assert_not_reached "No appstream branch" +fi +ostree cat --repo=repos/test-copy appstream/${ARCH} /appstream.xml.gz | gunzip -d > appdata.xml +assert_not_file_has_content appdata.xml "org.test.Hello.desktop" + +${FLATPAK} repo --branches repos/test-copy > branches-log +assert_file_has_content branches-log "^app/org.test.Hello/.*eol=Reason1" + +echo "ok eol build-commit-from" + +${FLATPAK} ${U} install -y test-repo org.test.Hello + +EXPORT_ARGS="--end-of-life=Reason2" make_updated_app + +# Ensure we have no eol app in appdata +if ! ostree show --repo=repos/test appstream/${ARCH} > /dev/null; then + assert_not_reached "No appstream branch" +fi +ostree cat --repo=repos/test appstream/${ARCH} /appstream.xml.gz | gunzip -d > appdata.xml +assert_not_file_has_content appdata.xml "org.test.Hello.desktop" + +${FLATPAK} repo --branches repos/test > branches-log +assert_file_has_content branches-log "^app/org.test.Hello/.*eol=Reason2" + +${FLATPAK} ${U} remote-ls -d test-repo > remote-ls-log +assert_file_has_content remote-ls-log "^app/org.test.Hello/.*eol=Reason2" + +${FLATPAK} ${U} update -y org.test.Hello 2> update-log +assert_file_has_content update-log "app/org.test.Hello/.*Reason2" + +${FLATPAK} ${U} info org.test.Hello > info-log +assert_file_has_content info-log "end-of-life: Reason2" + +${FLATPAK} ${U} list -d > list-log +assert_file_has_content list-log "^org.test.Hello/.*eol=Reason2" + +${FLATPAK} ${U} uninstall -y org.test.Hello org.test.Platform + +echo "ok eol build-export" + +${FLATPAK} ${U} install -y test-repo org.test.Platform + port=$(cat httpd-port-main) UPDATE_REPO_ARGS="--redirect-url=http://127.0.0.1:${port}/test-gpg3 --gpg-import=${FL_GPG_HOMEDIR2}/pubring.gpg" update_repo GPGPUBKEY="${FL_GPG_HOMEDIR2}/pubring.gpg" GPGARGS="${FL_GPGARGS2}" setup_repo_no_add test-gpg3 org.test.Collection.test -${FLATPAK} ${U} update org.test.Platform +${FLATPAK} ${U} update -y org.test.Platform # Ensure we have the new uri ${FLATPAK} ${U} remotes -d | grep ^test-repo > repo-info assert_file_has_content repo-info "/test-gpg3" @@ -136,13 +238,72 @@ GPGARGS="${FL_GPGARGS2}" make_updated_app test-gpg3 org.test.Collection.test update_repo test-gpg3 org.test.Collection.test -${FLATPAK} ${U} install test-repo org.test.Hello +${FLATPAK} ${U} install -y 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" +if ${FLATPAK} ${INVERT_U} uninstall -y org.test.Platform org.test.Hello; then + assert_not_reached "Should not be able to uninstall ${INVERT_U} when installed ${U}" +fi + +# Test that unspecified --user/--system finds the right one, so no ${U} +${FLATPAK} uninstall -y org.test.Platform org.test.Hello + +${FLATPAK} ${U} list -d > list-log +assert_not_file_has_content list-log "^org.test.Hello" +assert_not_file_has_content list-log "^org.test.Platform" + +echo "ok uninstall vs installations" + +${FLATPAK} ${U} install -y test-repo org.test.Hello + +${FLATPAK} ${U} list -d > list-log +assert_file_has_content list-log "^org.test.Hello" +assert_file_has_content list-log "^org.test.Platform" + +if ${FLATPAK} ${U} uninstall -y org.test.Platform; then + assert_not_reached "Should not be able to uninstall ${U} when there is a dependency installed" +fi + +${FLATPAK} ${U} uninstall -y org.test.Hello +${FLATPAK} ${U} uninstall -y org.test.Platform + +${FLATPAK} ${U} list -d > list-log +assert_not_file_has_content list-log "^org.test.Hello" +assert_not_file_has_content list-log "^org.test.Platform" + +echo "ok uninstall dependencies" + +${FLATPAK} ${U} install -y --no-deploy test-repo org.test.Hello + +${FLATPAK} ${U} list -d > list-log +assert_not_file_has_content list-log "^org.test.Hello" +assert_not_file_has_content list-log "^org.test.Platform" + +# Disable the remote to make sure we don't do i/o +port=$(cat httpd-port-main) +${FLATPAK} ${U} remote-modify --url="http://127.0.0.1:${port}/disable-test" test-repo + +${FLATPAK} ${U} install -y --no-pull test-repo org.test.Hello + +# re-enable remote +${FLATPAK} ${U} remote-modify --url="http://127.0.0.1:${port}/test" test-repo + +${FLATPAK} ${U} list -d > list-log +assert_file_has_content list-log "^org.test.Hello" +assert_file_has_content list-log "^org.test.Platform" + +echo "ok install with --no-deploy and then --no-pull" + +${FLATPAK} uninstall -y --all + +${FLATPAK} ${U} list -d > list-log +assert_not_file_has_content list-log "^org.test.Hello" +assert_not_file_has_content list-log "^org.test.Platform" + +echo "ok uninstall --all" + # Test that remote-ls works in all of the following cases: # * system remote, and --system is used # * system remote, and --system is omitted @@ -177,6 +338,13 @@ echo "ok remote-ls" +# Test that remote-ls can take a file:// URI +ostree --repo=repos/test summary -u +${FLATPAK} remote-ls file://`pwd`/repos/test > repo-list +assert_file_has_content repo-list "org.test.Hello" + +echo "ok remote-ls URI" + # Test that remote-modify works in all of the following cases: # * system remote, and --system is used # * system remote, and --system is omitted diff -Nru flatpak-0.11.3/tests/test-repo-system.sh flatpak-1.0.7/tests/test-repo-system.sh --- flatpak-0.11.3/tests/test-repo-system.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-repo-system.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011 Colin Walters -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_SYSTEMDIR=yes - -. $(dirname $0)/test-repo.sh diff -Nru flatpak-0.11.3/tests/test-run-deltas.sh flatpak-1.0.7/tests/test-run-deltas.sh --- flatpak-0.11.3/tests/test-run-deltas.sh 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/tests/test-run-deltas.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011 Colin Walters -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_DELTAS=yes - -. $(dirname $0)/test-run.sh diff -Nru flatpak-0.11.3/tests/test-run.sh flatpak-1.0.7/tests/test-run.sh --- flatpak-0.11.3/tests/test-run.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-run.sh 2019-02-11 12:42:20.000000000 +0000 @@ -22,7 +22,6 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs echo "1..12" @@ -186,7 +185,7 @@ # TODO: For weird reasons this breaks in the system case. Needs debugging if [ x${USE_SYSTEMDIR-} != xyes ] ; then - ${FLATPAK} ${U} update -v org.test.Hello master + ${FLATPAK} ${U} update -y -v org.test.Hello master ALSO_OLD_COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Hello` assert_streq "$OLD_COMMIT" "$ALSO_OLD_COMMIT" fi @@ -195,7 +194,7 @@ make_updated_app -${FLATPAK} ${U} update org.test.Hello +${FLATPAK} ${U} update -y org.test.Hello NEW_COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Hello` @@ -209,7 +208,7 @@ ostree --repo=repos/test reset app/org.test.Hello/$ARCH/master "$OLD_COMMIT" update_repo -if ${FLATPAK} ${U} update org.test.Hello; then +if ${FLATPAK} ${U} update -y org.test.Hello; then assert_not_reached "Should not be able to update to older commit" fi @@ -236,7 +235,7 @@ ${FLATPAK} build-export ${FL_GPGARGS} repos/test ${DIR} update_repo -${FLATPAK} ${U} install test-repo org.test.Split --subpath=/a --subpath=/b --subpath=/nosuchdir master +${FLATPAK} ${U} install -y test-repo org.test.Split --subpath=/a --subpath=/b --subpath=/nosuchdir master COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Split` if [ x${USE_SYSTEMDIR-} != xyes ] ; then @@ -262,7 +261,7 @@ ${FLATPAK} build-export ${FL_GPGARGS} repos/test ${DIR} update_repo -${FLATPAK} ${U} update --subpath=/a --subpath=/b --subpath=/e --subpath=/nosuchdir org.test.Split +${FLATPAK} ${U} update -y --subpath=/a --subpath=/b --subpath=/e --subpath=/nosuchdir org.test.Split COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Split` if [ x${USE_SYSTEMDIR-} != xyes ] ; then @@ -283,7 +282,7 @@ update_repo # Test reusing the old subpath list -${FLATPAK} ${U} update org.test.Split +${FLATPAK} ${U} update -y org.test.Split COMMIT=`${FLATPAK} ${U} info --show-commit org.test.Split` if [ x${USE_SYSTEMDIR-} != xyes ] ; then @@ -319,23 +318,23 @@ update_repo -${FLATPAK} ${U} install test-repo org.test.OldVersion master -${FLATPAK} ${U} install test-repo org.test.CurrentVersion master -(! ${FLATPAK} ${U} install test-repo org.test.NewVersion master) +${FLATPAK} ${U} install -y test-repo org.test.OldVersion master +${FLATPAK} ${U} install -y test-repo org.test.CurrentVersion master +(! ${FLATPAK} ${U} install -y test-repo org.test.NewVersion master) DIR=`mktemp -d` ${FLATPAK} build-init ${DIR} org.test.OldVersion org.test.Platform org.test.Platform ${FLATPAK} build-finish --require-version=99.0.0 --command=hello.sh ${DIR} ${FLATPAK} build-export ${FL_GPGARGS} repos/test ${DIR} -(! ${FLATPAK} ${U} update org.test.OldVersion) +(! ${FLATPAK} ${U} update -y org.test.OldVersion) DIR=`mktemp -d` ${FLATPAK} build-init ${DIR} org.test.OldVersion org.test.Platform org.test.Platform ${FLATPAK} build-finish --require-version=0.1.1 --command=hello.sh ${DIR} ${FLATPAK} build-export ${FL_GPGARGS} repos/test ${DIR} -${FLATPAK} ${U} update org.test.OldVersion +${FLATPAK} ${U} update -y org.test.OldVersion echo "ok version checks" @@ -344,10 +343,11 @@ mkdir -p app/files/a-dir chmod a+rwx app/files/a-dir flatpak build-finish --command=hello.sh app -ostree --repo=repos/test commit ${FL_GPGARGS} --branch=app/org.test.Writable/$ARCH/master app +# Note: not --canonical-permissions +ostree --repo=repos/test commit --owner-uid=0 --owner-gid=0 --no-xattrs ${FL_GPGARGS} --branch=app/org.test.Writable/$ARCH/master app update_repo -${FLATPAK} ${U} install test-repo org.test.Writable +${FLATPAK} ${U} install -y test-repo org.test.Writable assert_file_has_mode $FL_DIR/app/org.test.Writable/$ARCH/master/active/files/a-dir 775 @@ -359,10 +359,11 @@ touch app/files/exe chmod u+s app/files/exe flatpak build-finish --command=hello.sh app -ostree --repo=repos/test commit ${FL_GPGARGS} --branch=app/org.test.Setuid/$ARCH/master app +# Note: not --canonical-permissions +ostree --repo=repos/test commit --owner-uid=0 --owner-gid=0 --no-xattrs ${FL_GPGARGS} --branch=app/org.test.Setuid/$ARCH/master app update_repo -if ${FLATPAK} ${U} install test-repo org.test.Setuid &> err2.txt; then +if ${FLATPAK} ${U} install -y test-repo org.test.Setuid &> err2.txt; then assert_not_reached "Should not be able to install with setuid file" fi assert_file_has_content err2.txt [Ii]nvalid diff -Nru flatpak-0.11.3/tests/test-run-system-deltas.sh flatpak-1.0.7/tests/test-run-system-deltas.sh --- flatpak-0.11.3/tests/test-run-system-deltas.sh 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/tests/test-run-system-deltas.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011 Colin Walters -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_SYSTEMDIR=yes -export USE_DELTAS=yes - -. $(dirname $0)/test-run.sh diff -Nru flatpak-0.11.3/tests/test-run-system.sh flatpak-1.0.7/tests/test-run-system.sh --- flatpak-0.11.3/tests/test-run-system.sh 2016-10-28 08:41:14.000000000 +0000 +++ flatpak-1.0.7/tests/test-run-system.sh 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -#!/bin/bash -# -# Copyright (C) 2011 Colin Walters -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -export USE_SYSTEMDIR=yes - -. $(dirname $0)/test-run.sh diff -Nru flatpak-0.11.3/tests/test-unsigned-summaries.sh flatpak-1.0.7/tests/test-unsigned-summaries.sh --- flatpak-0.11.3/tests/test-unsigned-summaries.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-unsigned-summaries.sh 2018-11-16 10:32:33.000000000 +0000 @@ -25,8 +25,6 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs -skip_without_p2p echo "1..7" @@ -60,10 +58,12 @@ assert_file_has_content refs "^app/org.test.App/$ARCH/master$" assert_file_has_content refs '^ostree-metadata$' assert_file_has_content refs "^appstream/${ARCH}$" +assert_file_has_content refs "^appstream2/${ARCH}$" ostree --repo=repos/test refs --collections > refs-collections assert_file_has_content refs-collections "^(org.test.Collection, app/org.test.App/$ARCH/master)$" assert_file_has_content refs-collections '^(org.test.Collection, ostree-metadata)$' assert_file_has_content refs-collections "^(org.test.Collection, appstream/${ARCH})$" +assert_file_has_content refs-collections "^(org.test.Collection, appstream2/${ARCH})$" assert_has_file repos/test/summary.sig ostree --repo=repos/test summary --view > summary assert_file_has_content summary '^Collection ID (ostree.summary.collection-id): org.test.Collection$' @@ -76,8 +76,8 @@ echo "ok 2 create app with collections" # Try installing the app. -${FLATPAK} ${U} install test-repo org.test.App master -${FLATPAK} ${U} uninstall org.test.App +${FLATPAK} ${U} install -y test-repo org.test.App master +${FLATPAK} ${U} uninstall -y org.test.App echo "ok 3 install app with collections" @@ -88,8 +88,8 @@ assert_file_has_content summary '^Collection ID (ostree.summary.collection-id): org.test.Collection$' assert_not_file_has_content summary '^xa.cache: ' -${FLATPAK} ${U} install test-repo org.test.App master -${FLATPAK} ${U} uninstall org.test.App +${FLATPAK} ${U} install -y test-repo org.test.App master +${FLATPAK} ${U} uninstall -y org.test.App echo "ok 4 install app with collections from unsigned summary" @@ -104,11 +104,11 @@ IsRuntime=False GPGKey=${FL_GPG_BASE64} #RuntimeRepo=http://127.0.0.1:$(cat httpd-port-main)/test -CollectionID=org.test.Collection +DeployCollectionID=org.test.Collection EOF -${FLATPAK} ${U} install --from ./org.test.App.flatpakref -${FLATPAK} ${U} uninstall org.test.App +${FLATPAK} ${U} install -y --from ./org.test.App.flatpakref +${FLATPAK} ${U} uninstall -y org.test.App echo "ok 5 install app with collections from flatpakref" @@ -129,7 +129,7 @@ # 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 +${FLATPAK} ${U} install -y test-repo org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^xa.title=New title$' echo "ok 7 pull updated repo metadata" diff -Nru flatpak-0.11.3/tests/test-update-remote-configuration.sh flatpak-1.0.7/tests/test-update-remote-configuration.sh --- flatpak-0.11.3/tests/test-update-remote-configuration.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-update-remote-configuration.sh 2019-02-11 12:42:20.000000000 +0000 @@ -25,8 +25,6 @@ . $(dirname $0)/libtest.sh skip_without_bwrap -[ x${USE_SYSTEMDIR-} != xyes ] || skip_without_user_xattrs -skip_without_p2p echo "1..3" @@ -42,7 +40,7 @@ ${FLATPAK} build-export ${FL_GPGARGS} --update-appstream repos/test ${DIR} master update_repo -${FLATPAK} ${U} install test-repo org.test.App master +${FLATPAK} ${U} install -y test-repo org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=true$' assert_not_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=false$' @@ -57,7 +55,7 @@ ${FLATPAK} build-export ${FL_GPGARGS} --update-appstream repos/test --collection-id org.test.Collection ${DIR} master UPDATE_REPO_ARGS="--collection-id=org.test.Collection" update_repo -${FLATPAK} ${U} update org.test.App master +${FLATPAK} ${U} update -y org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=true$' assert_not_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=false$' @@ -70,7 +68,7 @@ # Now mark the collection ID as to be deployed. The client configuration should # be updated. UPDATE_REPO_ARGS="--collection-id=org.test.Collection --deploy-collection-id" update_repo -${FLATPAK} ${U} update org.test.App master +${FLATPAK} ${U} update -y org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=false$' assert_not_file_has_content ${FL_DIR}/repo/config '^gpg-verify-summary=true$' @@ -88,10 +86,10 @@ #for ref in app/org.test.App/x86_64/master app/org.test.Hello/x86_64/master appstream/x86_64 ostree-metadata runtime/org.test.Platform/x86_64/master; do # ostree --repo=repos/test refs --collections --create=org.test.Collection:$ref $ref #done -ostree --repo=repos/test summary --update --add-metadata="xa.collection-id='net.malicious.NewCollection'" +ostree --repo=repos/test summary --update --add-metadata="ostree.deploy-collection-id='net.malicious.NewCollection'" ${FLATPAK} ${U} update org.test.App master assert_file_has_content ${FL_DIR}/repo/config '^collection-id=org.test.Collection$' assert_not_file_has_content ${FL_DIR}/repo/config '^collection-id=net.malicious.NewCollection$' -echo "ok 3 update repo config to with different collection ID" +echo "ok 3 update repo config with different collection ID" diff -Nru flatpak-0.11.3/tests/test-webserver.sh flatpak-1.0.7/tests/test-webserver.sh --- flatpak-0.11.3/tests/test-webserver.sh 2018-02-01 08:33:24.000000000 +0000 +++ flatpak-1.0.7/tests/test-webserver.sh 2018-09-26 08:39:05.000000000 +0000 @@ -3,15 +3,22 @@ set -euo pipefail dir=$1 +cmd=${2:-python -m SimpleHTTPServer 0} test_tmpdir=$(pwd) -cd ${dir} -env PYTHONUNBUFFERED=1 setsid python -m SimpleHTTPServer 0 >${test_tmpdir}/httpd-output & +[ "$dir" != "" ] && cd ${dir} +echo "Running web server: PYTHONUNBUFFERED=1 setsid $cmd" >&2 +touch ${test_tmpdir}/httpd-output +env PYTHONUNBUFFERED=1 setsid $cmd >${test_tmpdir}/httpd-output & child_pid=$! +echo "Web server pid: $child_pid" >&2 -for x in $(seq 50); do +for x in $(seq 300); do + echo "Waiting for web server ($x/300)..." >&2 # Snapshot the output cp ${test_tmpdir}/httpd-output{,.tmp} + sed -ne 's/^/# httpd-output.tmp: /' < ${test_tmpdir}/httpd-output.tmp >&2 + echo >&2 # If it's non-empty, see whether it matches our regexp if test -s ${test_tmpdir}/httpd-output.tmp; then sed -e 's,Serving HTTP on 0.0.0.0 port \([0-9]*\) \.\.\.,\1,' < ${test_tmpdir}/httpd-output.tmp > ${test_tmpdir}/httpd-port @@ -25,3 +32,4 @@ port=$(cat ${test_tmpdir}/httpd-port) echo "http://127.0.0.1:${port}" > ${test_tmpdir}/httpd-address echo "$child_pid" > ${test_tmpdir}/httpd-pid +echo "Started web server '$cmd': process $child_pid on port $port" >&2 diff -Nru flatpak-0.11.3/tests/test-wrapper.sh flatpak-1.0.7/tests/test-wrapper.sh --- flatpak-0.11.3/tests/test-wrapper.sh 1970-01-01 00:00:00.000000000 +0000 +++ flatpak-1.0.7/tests/test-wrapper.sh 2018-10-03 13:41:21.000000000 +0000 @@ -0,0 +1,32 @@ +#!/bin/bash + +for feature in $(echo $1 | sed "s/^.*@\(.*\).wrap/\1/" | tr "," "\n"); do + case $feature in + system) + export USE_SYSTEMDIR=yes + ;; + user) + export USE_SYSTEMDIR=no + ;; + deltas) + export USE_DELTAS=yes + ;; + nodeltas) + export USE_DELTAS=no + ;; + collections) + export USE_COLLECTIONS_IN_SERVER=yes + export USE_COLLECTIONS_IN_CLIENT=yes + ;; + collections-server-only) + export USE_COLLECTIONS_IN_SERVER=yes + export USE_COLLECTIONS_IN_CLIENT=no + ;; + *) + echo unsupported test feature $feature + exit 1 + esac +done + +WRAPPED=$(echo $1 | sed "s/@.*/\.sh/") +. $WRAPPED "$@"