Skip to content
Permalink
Browse files

Initial version

  • Loading branch information
alexlarsson committed Dec 17, 2014
0 parents commit a640cd365bd21743165adedb00bd9fac981687b2
Showing with 1,695 additions and 0 deletions.
  1. +28 −0 .gitignore
  2. +24 −0 Makefile.am
  3. +24 −0 autogen.sh
  4. +35 −0 configure.ac
  5. +75 −0 xdg-app-builtins-add-repo.c
  6. +32 −0 xdg-app-builtins.h
  7. +1,160 −0 xdg-app-helper.c
  8. +317 −0 xdg-app-main.c
@@ -0,0 +1,28 @@
*.la
*.o
*.lo
.deps
.libs
INSTALL
Makefile
Makefile.in
aclocal.m4
autom4te.cache/
compile
config.guess
config.h
config.log
config.status
config.sub
configure
depcomp
install-sh
libtool
ltmain.sh
m4
missing
stamp-h1
config.h.in
stamp-*
xdg-app
xdg-app-helper
@@ -0,0 +1,24 @@
NULL =

AM_CPPFLAGS = \
-DXDG_APP_BASEDIR=\"$(datadir)/xdg-app\" \
$(NULL)

bin_PROGRAMS = \
xdg-app-helper \
xdg-app \
$(NULL)

xdg_app_helper_SOURCES = xdg-app-helper.c

xdg_app_SOURCES = \
xdg-app-main.c \
xdg-app-builtins.h \
xdg-app-builtins-add-repo.c \
$(NULL)
xdg_app_LDADD = $(OSTREE_LIBS)
xdg_app_CFLAGS = $(OSTREE_CFLAGS)

install-exec-hook:
chown root $(bindir)/xdg-app-helper
chmod u+s $(bindir)/xdg-app-helper
@@ -0,0 +1,24 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.

test -n "$srcdir" || srcdir=`dirname "$0"`
test -n "$srcdir" || srcdir=.

olddir=`pwd`
cd "$srcdir"

AUTORECONF=`which autoreconf`
if test -z $AUTORECONF; then
echo "*** No autoreconf found, please install it ***"
exit 1
fi

# INSTALL are required by automake, but may be deleted by clean
# up rules. to get automake to work, simply touch these here, they will be
# regenerated from their corresponding *.in files by ./configure anyway.
touch INSTALL

autoreconf --force --install --verbose || exit $?

cd "$olddir"
test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
@@ -0,0 +1,35 @@
AC_PREREQ([2.63])

AC_INIT([xdg-app],[0.0.1])

AC_PROG_CC
AM_PROG_CC_C_O
AC_DISABLE_STATIC

LT_PREREQ([2.2.6])
LT_INIT([disable-static])

AC_CONFIG_SRCDIR([xdg-app-helper.c])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([1.11 no-define no-dist-gzip dist-bzip2 tar-ustar foreign])

# Enable silent rules is available
AM_SILENT_RULES([yes])
AM_MAINTAINER_MODE([enable])

if test "x$GCC" = "xyes"; then
case " $CFLAGS " in
*[[\ \ ]]-Wall[[\ \ ]]*) ;;
*) CFLAGS="$CFLAGS -Wall" ;;
esac
fi

PKG_CHECK_MODULES(OSTREE, [glib-2.0 libgsystem gio-2.0 ostree-1])
AC_SUBST(OSTREE_CFLAGS)
AC_SUBST(OSTREE_LIBS)

AC_CONFIG_FILES([
Makefile
])
AC_OUTPUT
@@ -0,0 +1,75 @@
#include "config.h"

#include <locale.h>
#include <stdlib.h>
#include <unistd.h>

#include "libgsystem.h"

#include "xdg-app-builtins.h"

static gboolean opt_no_gpg_verify;
static gboolean opt_if_not_exists;

static GOptionEntry options[] = {
{ "no-gpg-verify", 0, 0, G_OPTION_ARG_NONE, &opt_no_gpg_verify, "Disable GPG verification", NULL },
{ "if-not-exists", 0, 0, G_OPTION_ARG_NONE, &opt_if_not_exists, "Do nothing if the provided remote exists", NULL },
{ NULL }
};

static void
usage_error (GOptionContext *context, const char *message, GError **error)
{
gs_free gchar *help = g_option_context_get_help (context, TRUE, NULL);
g_printerr ("%s", help);
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED, message);
}

gboolean
xdg_app_builtin_add_repo (int argc, char **argv, GCancellable *cancellable, GError **error)
{
GOptionContext *context;
gboolean ret = FALSE;
gs_unref_object OstreeRepo *repo = NULL;
gs_unref_object GFile *basedir = NULL;
gs_unref_variant_builder GVariantBuilder *optbuilder = NULL;
const char *remote_name;
const char *remote_url;

context = g_option_context_new ("NAME URL - Add a remote repository");

if (!xdg_app_option_context_parse (context, options, &argc, &argv, 0, &repo, &basedir, cancellable, error))
goto out;

if (argc < 3)
{
usage_error (context, "NAME and URL must be specified", error);
goto out;
}

remote_name = argv[1];
remote_url = argv[2];

optbuilder = g_variant_builder_new (G_VARIANT_TYPE ("a{sv}"));

if (opt_no_gpg_verify)
g_variant_builder_add (optbuilder, "{s@v}",
"gpg-verify",
g_variant_new_variant (g_variant_new_boolean (FALSE)));


if (!ostree_repo_remote_change (repo, NULL,
opt_if_not_exists ? OSTREE_REPO_REMOTE_CHANGE_ADD_IF_NOT_EXISTS :
OSTREE_REPO_REMOTE_CHANGE_ADD,
remote_name, remote_url,
g_variant_builder_end (optbuilder),
cancellable, error))
goto out;

ret = TRUE;

out:
if (context)
g_option_context_free (context);
return ret;
}
@@ -0,0 +1,32 @@
#ifndef __XDG_APP_BUILTINS_H__
#define __XDG_APP_BUILTINS_H__

#include <ostree.h>
#include <gio/gio.h>

G_BEGIN_DECLS

typedef enum {
XDG_APP_BUILTIN_FLAG_NO_USER = 1 << 0,
XDG_APP_BUILTIN_FLAG_NO_REPO = 1 << 1,
} XdgAppBuiltinFlags;

gboolean xdg_app_option_context_parse (GOptionContext *context,
const GOptionEntry *main_entries,
int *argc,
char ***argv,
XdgAppBuiltinFlags flags,
OstreeRepo **repo,
GFile **basedir,
GCancellable *cancellable,
GError **error);

#define BUILTINPROTO(name) gboolean xdg_app_builtin_ ## name (int argc, char **argv, GCancellable *cancellable, GError **error)

BUILTINPROTO(add_repo);

#undef BUILTINPROTO

G_END_DECLS

#endif /* __XDG_APP_BUILTINS_H__ */

0 comments on commit a640cd3

Please sign in to comment.
You can’t perform that action at this time.