[Libosinfo] [PATCH db-tools 03/11] Add a new osinfo-db-path tool for reporting db locations
Fabiano Fidêncio
fidencio at redhat.com
Wed Jul 6 11:28:15 UTC 2016
On Tue, Jun 28, 2016 at 5:52 PM, Daniel P. Berrange <berrange at redhat.com> wrote:
> Applications or system administrators accessing the osinfo
> database directly (instead of via the libosinfo API) will
> need a well defined means of getting the standard database
> locations. The osinfo-db-tool is a trivial command that
> can serve this purpose. eg
>
> $ osinfo-db-path --system
> /usr/local/share/libosinfo/db
>
> $ osinfo-db-path --user
> /home/berrange/.config/libosinfo/db
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> .gitignore | 3 +
> mingw-osinfo-db-tools.spec.in | 2 +
> osinfo-db-tools.spec.in | 2 +
> po/POTFILES.in | 1 +
> tools/Makefile.am | 9 +-
> tools/osinfo-db-export.c | 2 +-
> tools/osinfo-db-import.c | 2 +-
> tools/osinfo-db-path.c | 223 ++++++++++++++++++++++++++++++++++++++++++
> 8 files changed, 240 insertions(+), 4 deletions(-)
> create mode 100644 tools/osinfo-db-path.c
>
> diff --git a/.gitignore b/.gitignore
> index bda3aea..437d9bb 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -43,6 +43,9 @@ tools/osinfo-db-import.1
> tools/osinfo-db-export
> tools/osinfo-db-export.exe
> tools/osinfo-db-export.1
> +tools/osinfo-db-path
> +tools/osinfo-db-path.exe
> +tools/osinfo-db-path.1
> po/.intltool-merge-cache
> po/Makefile.in.in
> po/POTFILES
> diff --git a/mingw-osinfo-db-tools.spec.in b/mingw-osinfo-db-tools.spec.in
> index 870b2e4..0fe1890 100644
> --- a/mingw-osinfo-db-tools.spec.in
> +++ b/mingw-osinfo-db-tools.spec.in
> @@ -76,6 +76,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_datadir}/man
> %doc AUTHORS ChangeLog COPYING.LIB NEWS README
> %{mingw32_bindir}/osinfo-db-export.exe
> %{mingw32_bindir}/osinfo-db-import.exe
> +%{mingw32_bindir}/osinfo-db-path.exe
> %{mingw32_bindir}/osinfo-db-validate.exe
> %{mingw32_datadir}/locale/*/LC_MESSAGES/osinfo-db-tools.mo
>
> @@ -83,6 +84,7 @@ rm -rf $RPM_BUILD_ROOT%{mingw64_datadir}/man
> %doc AUTHORS ChangeLog COPYING.LIB NEWS README
> %{mingw64_bindir}/osinfo-db-export.exe
> %{mingw64_bindir}/osinfo-db-import.exe
> +%{mingw64_bindir}/osinfo-db-path.exe
> %{mingw64_bindir}/osinfo-db-validate.exe
> %{mingw64_datadir}/locale/*/LC_MESSAGES/osinfo-db-tools.mo
>
> diff --git a/osinfo-db-tools.spec.in b/osinfo-db-tools.spec.in
> index d125751..155ede9 100644
> --- a/osinfo-db-tools.spec.in
> +++ b/osinfo-db-tools.spec.in
> @@ -36,9 +36,11 @@ information about operating systems for use with virtualization
> %doc AUTHORS ChangeLog COPYING.LIB NEWS README
> %{_bindir}/osinfo-db-export
> %{_bindir}/osinfo-db-import
> +%{_bindir}/osinfo-db-path
> %{_bindir}/osinfo-db-validate
> %{_mandir}/man1/osinfo-db-export.1*
> %{_mandir}/man1/osinfo-db-import.1*
> +%{_mandir}/man1/osinfo-db-path.1*
> %{_mandir}/man1/osinfo-db-validate.1*
>
> %changelog
> diff --git a/po/POTFILES.in b/po/POTFILES.in
> index 6688a2d..279b26f 100644
> --- a/po/POTFILES.in
> +++ b/po/POTFILES.in
> @@ -1,3 +1,4 @@
> tools/osinfo-db-export.c
> tools/osinfo-db-import.c
> +tools/osinfo-db-path.c
> tools/osinfo-db-validate.c
> diff --git a/tools/Makefile.am b/tools/Makefile.am
> index 37f9abb..af069a5 100644
> --- a/tools/Makefile.am
> +++ b/tools/Makefile.am
> @@ -10,9 +10,9 @@ AM_CFLAGS = $(GOBJECT_CFLAGS) \
> -I$(top_srcdir) \
> $(NULL)
>
> -bin_PROGRAMS = osinfo-db-validate osinfo-db-import osinfo-db-export
> +bin_PROGRAMS = osinfo-db-validate osinfo-db-import osinfo-db-export osinfo-db-path
>
> -man1_MANS = osinfo-db-validate.1 osinfo-db-import.1 osinfo-db-export.1
> +man1_MANS = osinfo-db-validate.1 osinfo-db-import.1 osinfo-db-export.1 osinfo-db-path.1
>
> CLEANFILES = $(man1_MANS)
>
> @@ -43,3 +43,8 @@ osinfo_db_export_LDADD = $(GOBJECT_LIBS) \
> $(GIO_LIBS) \
> $(GLIB_LIBS) \
> $(LIBARCHIVE_LIBS)
> +
> +osinfo_db_path_SOURCES = osinfo-db-path.c $(COMMON_SOURCES)
> +osinfo_db_path_LDADD = $(GOBJECT_LIBS) \
> + $(GIO_LIBS) \
> + $(GLIB_LIBS)
> diff --git a/tools/osinfo-db-export.c b/tools/osinfo-db-export.c
> index 553b797..1973a33 100644
> --- a/tools/osinfo-db-export.c
> +++ b/tools/osinfo-db-export.c
> @@ -518,7 +518,7 @@ packed into the archive.
>
> =head1 SEE ALSO
>
> -C<osinfo-db-import(1)>
> +C<osinfo-db-import(1)>, C<osinfo-db-path(1)>
>
> =head1 AUTHORS
>
> diff --git a/tools/osinfo-db-import.c b/tools/osinfo-db-import.c
> index 17d9e23..a75745b 100644
> --- a/tools/osinfo-db-import.c
> +++ b/tools/osinfo-db-import.c
> @@ -365,7 +365,7 @@ installed.
>
> =head1 SEE ALSO
>
> -C<osinfo-db-export(1)>
> +C<osinfo-db-export(1)>, C<osinfo-db-path(1)>
>
> =head1 AUTHORS
>
> diff --git a/tools/osinfo-db-path.c b/tools/osinfo-db-path.c
> new file mode 100644
> index 0000000..08cefa4
> --- /dev/null
> +++ b/tools/osinfo-db-path.c
> @@ -0,0 +1,223 @@
> +/*
> + * Copyright (C) 2016 Red Hat, Inc
> + *
> + * osinfo-db-path: report the path to the osinfo database
> + *
> + * 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 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, write to the Free Software Foundation,
> + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + *
> + * Authors:
> + * Daniel P. Berrange <berrange at redhat.com>
> + */
> +
> +#include <config.h>
> +
> +#include <locale.h>
> +#include <glib/gi18n.h>
> +#include <stdlib.h>
> +
> +#include "osinfo-db-util.h"
> +
> +const char *argv0;
> +
> +gint main(gint argc, gchar **argv)
> +{
> + GOptionContext *context;
> + GError *error = NULL;
> + gint ret = EXIT_FAILURE;
> + gboolean user = FALSE;
> + gboolean local = FALSE;
> + gboolean system = FALSE;
> + const gchar *root = "";
> + const gchar *custom = NULL;
> + int locs = 0;
> + char *path;
> + GFile *dir = NULL;
> + const GOptionEntry entries[] = {
> + { "user", 0, 0, G_OPTION_ARG_NONE, (void *)&user,
> + N_("Report the user directory"), NULL, },
> + { "local", 0, 0, G_OPTION_ARG_NONE, (void *)&local,
> + N_("Report the local directory"), NULL, },
> + { "system", 0, 0, G_OPTION_ARG_NONE, (void *)&system,
> + N_("Report the system directory"), NULL, },
> + { "dir", 0, 0, G_OPTION_ARG_STRING, (void *)&custom,
> + N_("Report the custom directory"), NULL, },
> + { "root", 0, 0, G_OPTION_ARG_STRING, &root,
> + N_("Report against root directory"), NULL, },
> + { NULL, 0, 0, 0, NULL, NULL, NULL },
> + };
> + argv0 = argv[0];
> +
> + setlocale(LC_ALL, "");
> + textdomain(GETTEXT_PACKAGE);
> + bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
> + bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
> +
> + context = g_option_context_new(_("- Report database locations "));
> +
> + g_option_context_add_main_entries(context, entries, GETTEXT_PACKAGE);
> +
> + if (!g_option_context_parse(context, &argc, &argv, &error)) {
> + g_printerr(_("%s: error while parsing commandline options: %s\n\n"),
> + argv0, error->message);
> + g_printerr("%s\n", g_option_context_get_help(context, FALSE, NULL));
> + goto error;
> + }
> +
> + if (argc > 1) {
> + g_printerr(_("%s: unexpected extra arguments\n"),
> + argv0);
> + goto error;
> + }
> +
> + if (local)
> + locs++;
> + if (system)
> + locs++;
> + if (user)
> + locs++;
> + if (custom)
> + locs++;
> + if (locs > 1) {
> + g_printerr(_("Only one of --user, --local, --system & --dir can be used"));
> + goto error;
> + }
> +
> + dir = osinfo_db_get_path(root, user, local, system, custom);
> +
> + path = g_file_get_path(dir);
> + g_print("%s\n", path);
> + g_free(path);
> +
> + ret = EXIT_SUCCESS;
> +
> + error:
> + if (dir) {
> + g_object_unref(dir);
> + }
> + g_clear_error(&error);
> + g_option_context_free(context);
> +
> + return ret;
> +}
> +
> +
> +/*
> +=pod
> +
> +=head1 NAME
> +
> +osinfo-db-path - Report database locations
> +
> +=head1 SYNOPSIS
> +
> +osinfo-db-path [OPTIONS...]
> +
> +=head1 DESCRIPTION
> +
> +The B<osinfo-db-path> tool will report the paths associated
> +with the standard osinfo database locations:
> +
> +=over 1
> +
> +=item B<system>
> +
> +This is the primary system-wide database location, intended
> +for use by operating system vendors distributing database
> +files in the native package format.
> +
> +=item B<local>
> +
> +This is the secondary system-wide database location, intended
> +for use by system administrators wishing to provide an updated
> +database for all users.
> +
> +=item B<user>
> +
> +This is the user private database location, intended for use
> +by unprivileged local users wishing to provide applications
> +they use with an updated database.
> +
> +=back
> +
> +If run by a privileged account (ie root), the B<local> database
> +location will be reported by default, otherwise the B<user> location
> +will be reported.
> +
> +=head1 OPTIONS
> +
> +=over 8
> +
> +=item B<--user>
> +
> +Override the default behaviour to force reporting of the
> +B<user> database location.
> +
> +=item B<--local>
> +
> +Override the default behaviour to force reporting of the
> +B<local> database location.
> +
> +=item B<--system>
> +
> +Override the default behaviour to force reporting of the
> +B<system> database location.
> +
> +=item B<--dir=PATH>
> +
> +Override the default behaviour to force reporting of the
> +custom directory B<PATH>.
> +
> +=item B<--root=PATH>
> +
> +Prefix the database location with the root directory given
> +by C<PATH>. This is useful when wishing to report paths
> +relative to a chroot environment or equivalent.
> +
> +=back
> +
> +=head1 EXIT STATUS
> +
> +The exit status will be 0 if the requested path was reported,
> +or 1 if the arguments were invalid.
> +
> +=head1 SEE ALSO
> +
> +C<osinfo-db-export(1)>, C<osinfo-db-import(1)>
> +
> +=head1 AUTHORS
> +
> +Daniel P. Berrange <berrange at redhat.com>
> +
> +=head1 COPYRIGHT
> +
> +Copyright (C) 2016 Red Hat, Inc.
> +
> +=head1 LICENSE
> +
> +C<osinfo-db-import> is distributed under the termsof the GNU LGPL v2+
"terms of" instead of termsof
I've seen this typo in a few other places as well:
https://paste.fedoraproject.org/388289/67804393/
> +license. This is free software; see the source for copying conditions.
> +There is NO warranty; not even for MERCHANTABILITY or FITNESS
> +FOR A PARTICULAR PURPOSE
> +
> +=cut
> +*/
> +
> +/*
> + * Local variables:
> + * indent-tabs-mode: nil
> + * c-indent-level: 4
> + * c-basic-offset: 4
> + * End:
> + */
> --
> 2.7.4
>
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
More information about the Libosinfo
mailing list