summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rwxr-xr-xcompletion/xdg-app6
-rw-r--r--doc/Makefile.am1
-rw-r--r--doc/xdg-app-install-app.xml5
-rw-r--r--doc/xdg-app-make-app-current.xml137
-rw-r--r--xdg-app-builtins-make-current.c76
-rw-r--r--xdg-app-builtins.h1
-rw-r--r--xdg-app-main.c1
8 files changed, 224 insertions, 4 deletions
diff --git a/Makefile.am b/Makefile.am
index 2b23f7f..03aee50 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -87,6 +87,7 @@ xdg_app_SOURCES = \
xdg-app-builtins-list-remotes.c \
xdg-app-builtins-repo-contents.c \
xdg-app-builtins-install.c \
+ xdg-app-builtins-make-current.c \
xdg-app-builtins-update.c \
xdg-app-builtins-uninstall.c \
xdg-app-builtins-list.c \
diff --git a/completion/xdg-app b/completion/xdg-app
index 94e0bc8..f0eafa0 100755
--- a/completion/xdg-app
+++ b/completion/xdg-app
@@ -15,10 +15,10 @@ _xdg-app() {
local dir cmd sdk loc
local -A VERBS=(
- [ALL]='add-remote delete-remote list-remotes repo-contents install-runtime update-runtime uninstall-runtime list-runtimes install-app update-app uninstall-app list-apps run build-init build build-finish build-export repo-update'
- [MODE]='add-remote delete-remote list-remotes repo-contents install-runtime update-runtime uninstall-runtime list-runtimes install-app update-app uninstall-app list-apps'
+ [ALL]='add-remote delete-remote list-remotes repo-contents install-runtime update-runtime uninstall-runtime list-runtimes install-app update-app uninstall-app list-apps run build-init build build-finish build-export repo-update make-app-current'
+ [MODE]='add-remote delete-remote list-remotes repo-contents install-runtime update-runtime uninstall-runtime list-runtimes install-app update-app uninstall-app list-apps make-app-current'
[UNINSTALL]='uninstall-runtime uninstall-app'
- [ARCH]='build-init install-runtime install-app run uninstall-runtime uninstall-app update-runtime update-app'
+ [ARCH]='build-init install-runtime install-app run uninstall-runtime uninstall-app update-runtime update-app make-app-current'
)
local -A OPTS=(
diff --git a/doc/Makefile.am b/doc/Makefile.am
index e9eac00..c427729 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -24,6 +24,7 @@ man_MANS = \
xdg-app-list-runtimes.1 \
xdg-app-install-app.1 \
xdg-app-update-app.1 \
+ xdg-app-make-app-current.1 \
xdg-app-uninstall-app.1 \
xdg-app-list-apps.1 \
xdg-app-run.1 \
diff --git a/doc/xdg-app-install-app.xml b/doc/xdg-app-install-app.xml
index b8ee4c9..725580a 100644
--- a/doc/xdg-app-install-app.xml
+++ b/doc/xdg-app-install-app.xml
@@ -49,7 +49,10 @@
</para>
<para>
Note that xdg-app allows to have multiple branches of an application
- installed and used at the same time.
+ installed and used at the same time. However, only one 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-app-current.
</para>
<para>
Unless overridden with the --user option, this command creates a
diff --git a/doc/xdg-app-make-app-current.xml b/doc/xdg-app-make-app-current.xml
new file mode 100644
index 0000000..eeadd18
--- /dev/null
+++ b/doc/xdg-app-make-app-current.xml
@@ -0,0 +1,137 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<refentry id="xdg-app-make-app-current">
+
+ <refentryinfo>
+ <title>xdg-app make-app-current</title>
+ <productname>xdg-app</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Alexander</firstname>
+ <surname>Larsson</surname>
+ <email>alexl@redhat.com</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>xdg-app make-app-current</refentrytitle>
+ <manvolnum>1</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>xdg-app-make-app-current</refname>
+ <refpurpose>Make a specific version of an app current</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <cmdsynopsis>
+ <command>xdg-app make-app-current</command>
+ <arg choice="opt" rep="repeat">OPTION</arg>
+ <arg choice="plain">APP</arg>
+ <arg choice="plain">BRANCH</arg>
+ </cmdsynopsis>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para>
+ Makes a particular branch of an application current. Only the current branch
+ of an app has its exported files (such as desktop files and icons) made visible
+ to the host.
+ </para>
+ <para>
+ When a new branch is installed it will automatically be made current, so this
+ command is often not needed.
+ </para>
+ <para>
+ Unless overridden with the --user option, this command creates a
+ system-wide installation.
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>Options</title>
+
+ <para>The following options are understood:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-h</option></term>
+ <term><option>--help</option></term>
+
+ <listitem><para>
+ Show help options and exit.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--user</option></term>
+
+ <listitem><para>
+ Create a per-user installation.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--system</option></term>
+
+ <listitem><para>
+ Create a system-wide installation.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--arch=ARCH</option></term>
+
+ <listitem><para>
+ The architecture to install for.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>-v</option></term>
+ <term><option>--verbose</option></term>
+
+ <listitem><para>
+ Print debug information during command processing.
+ </para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--version</option></term>
+
+ <listitem><para>
+ Print version information and exit.
+ </para></listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>Examples</title>
+
+ <para>
+ <command>$ xdg-app --user make-app-current org.gnome.GEdit 3.14</command>
+ </para>
+
+ </refsect1>
+
+ <refsect1>
+ <title>See also</title>
+
+ <para>
+ <citerefentry><refentrytitle>xdg-app</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>xdg-app-install-app</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>xdg-app-list-apps</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ </para>
+
+ </refsect1>
+
+</refentry>
diff --git a/xdg-app-builtins-make-current.c b/xdg-app-builtins-make-current.c
new file mode 100644
index 0000000..b32e8e9
--- /dev/null
+++ b/xdg-app-builtins-make-current.c
@@ -0,0 +1,76 @@
+#include "config.h"
+
+#include <locale.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#include "libgsystem.h"
+
+#include "xdg-app-builtins.h"
+#include "xdg-app-utils.h"
+
+static char *opt_arch;
+
+static GOptionEntry options[] = {
+ { "arch", 0, 0, G_OPTION_ARG_STRING, &opt_arch, "Arch to make current for", "ARCH" },
+ { NULL }
+};
+
+gboolean
+xdg_app_builtin_make_current_app (int argc, char **argv, GCancellable *cancellable, GError **error)
+{
+ gboolean ret = FALSE;
+ GOptionContext *context;
+ gs_unref_object XdgAppDir *dir = NULL;
+ gs_unref_object GFile *deploy_base = NULL;
+ gs_unref_object GFile *origin = NULL;
+ const char *app;
+ const char *branch = "master";
+ gs_free char *ref = NULL;
+
+ context = g_option_context_new ("APP BRANCH - Make branch of application current");
+
+ if (!xdg_app_option_context_parse (context, options, &argc, &argv, 0, &dir, cancellable, error))
+ goto out;
+
+ if (argc < 3)
+ {
+ usage_error (context, "APP and BRANCH must be specified", error);
+ goto out;
+ }
+
+ app = argv[1];
+ branch = argv[2];
+
+ if (!xdg_app_is_valid_name (app))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "'%s' is not a valid application name", app);
+ goto out;
+ }
+
+ if (!xdg_app_is_valid_branch (branch))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "'%s' is not a valid branch name", branch);
+ goto out;
+ }
+
+ ref = xdg_app_build_app_ref (app, branch, opt_arch);
+
+ deploy_base = xdg_app_dir_get_deploy_dir (dir, ref);
+ if (!g_file_query_exists (deploy_base, cancellable))
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "App %s branch %s is not installed", app, branch);
+ goto out;
+ }
+
+ if (!xdg_app_dir_make_current_ref (dir, ref, cancellable, error))
+ goto out;
+
+ ret = TRUE;
+
+ out:
+ if (context)
+ g_option_context_free (context);
+ return ret;
+}
diff --git a/xdg-app-builtins.h b/xdg-app-builtins.h
index aa9e229..ddfb119 100644
--- a/xdg-app-builtins.h
+++ b/xdg-app-builtins.h
@@ -37,6 +37,7 @@ BUILTINPROTO(update_runtime);
BUILTINPROTO(uninstall_runtime);
BUILTINPROTO(list_runtimes);
BUILTINPROTO(install_app);
+BUILTINPROTO(make_current_app);
BUILTINPROTO(update_app);
BUILTINPROTO(uninstall_app);
BUILTINPROTO(list_apps);
diff --git a/xdg-app-main.c b/xdg-app-main.c
index edb211e..b74ed0c 100644
--- a/xdg-app-main.c
+++ b/xdg-app-main.c
@@ -29,6 +29,7 @@ static XdgAppCommand commands[] = {
{ "list-runtimes", xdg_app_builtin_list_runtimes },
{ "install-app", xdg_app_builtin_install_app },
{ "update-app", xdg_app_builtin_update_app },
+ { "make-app-current", xdg_app_builtin_make_current_app },
{ "uninstall-app", xdg_app_builtin_uninstall_app },
{ "list-apps", xdg_app_builtin_list_apps },
{ "run", xdg_app_builtin_run },