[Libosinfo] [PATCH db-tools] osinfo-db-export: add ability to include a license file
Fabiano Fidêncio
fidencio at redhat.com
Thu Oct 20 12:08:37 UTC 2016
On Wed, Oct 19, 2016 at 11:11 AM, Daniel P. Berrange
<berrange at redhat.com> wrote:
> Add a "--license FILE-NAME" option to osinfo-db-export
> which will add that reference FILE-NAME to the generated
> archive as a file called "LICENSE" in the top level.
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> tools/osinfo-db-export.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 77 insertions(+), 1 deletion(-)
>
> diff --git a/tools/osinfo-db-export.c b/tools/osinfo-db-export.c
> index a2aef2f..8b2d5fb 100644
> --- a/tools/osinfo-db-export.c
> +++ b/tools/osinfo-db-export.c
> @@ -336,10 +336,72 @@ static int osinfo_db_export_create_version(const gchar *prefix,
> return ret;
> }
>
> +static int osinfo_db_export_create_license(const gchar *prefix,
> + const gchar *license,
> + const gchar *target,
> + struct archive *arc,
> + gboolean verbose)
> +{
> + int ret = -1;
> + struct archive_entry *entry = NULL;
> + gchar *entpath = NULL;
> + GFile *file = NULL;
> + GFileInfo *info = NULL;
> + GError *err = NULL;
> +
> + file = g_file_new_for_path(license);
> +
> + info = g_file_query_info(file,
> + G_FILE_ATTRIBUTE_STANDARD_NAME
> + ","
> + G_FILE_ATTRIBUTE_STANDARD_SIZE,
> + G_FILE_QUERY_INFO_NONE,
> + NULL,
> + &err);
> + if (!info) {
> + g_printerr("%s: cannot get file info %s: %s\n",
> + argv0, license, err->message);
> + goto cleanup;
> + }
> +
> + entpath = g_strdup_printf("%s/LICENSE", prefix);
> + entry = archive_entry_new();
> + archive_entry_set_pathname(entry, entpath);
> +
> + archive_entry_set_atime(entry, entryts, 0);
> + archive_entry_set_ctime(entry, entryts, 0);
> + archive_entry_set_mtime(entry, entryts, 0);
> + archive_entry_set_birthtime(entry, entryts, 0);
> +
> + if (verbose) {
> + g_print("%s: r %s\n", argv0, entpath);
> + }
> + archive_entry_set_filetype(entry, AE_IFREG);
> + archive_entry_set_perm(entry, 0644);
> + archive_entry_set_size(entry, g_file_info_get_size(info));
> +
> + if (archive_write_header(arc, entry) != ARCHIVE_OK) {
> + g_printerr("%s: cannot write archive header %s: %s\n",
> + argv0, target, archive_error_string(arc));
> + goto cleanup;
> + }
> +
> + if (osinfo_db_export_create_reg(file, license, target, arc) < 0)
> + goto cleanup;
> +
> + ret = 0;
> + cleanup:
> + archive_entry_free(entry);
> + if (err)
> + g_error_free(err);
> + return ret;
> +}
> +
> static int osinfo_db_export_create(const gchar *prefix,
> const gchar *version,
> GFile *source,
> const gchar *target,
> + const gchar *license,
> gboolean verbose)
> {
> struct archive *arc;
> @@ -369,6 +431,11 @@ static int osinfo_db_export_create(const gchar *prefix,
> goto cleanup;
> }
>
> + if (license != NULL &&
> + osinfo_db_export_create_license(prefix, license, target, arc, verbose) < 0) {
> + goto cleanup;
> + }
> +
> if (archive_write_close(arc) != ARCHIVE_OK) {
> g_printerr("%s: cannot finish writing archive %s: %s\n",
> argv0, target, archive_error_string(arc));
> @@ -415,6 +482,7 @@ gint main(gint argc, gchar **argv)
> const gchar *version = NULL;
> gchar *autoversion = NULL;
> gchar *prefix = NULL;
> + const gchar *license = NULL;
> int locs = 0;
> GFile *dir = NULL;
> const GOptionEntry entries[] = {
> @@ -432,6 +500,8 @@ gint main(gint argc, gchar **argv)
> N_("Set version number of archive"), NULL, },
> { "root", 0, 0, G_OPTION_ARG_STRING, &root,
> N_("Installation root directory"), NULL, },
> + { "license", 0, 0, G_OPTION_ARG_STRING, &license,
> + N_("License file"), NULL, },
> { NULL, 0, 0, 0, NULL, NULL, NULL },
> };
> argv0 = argv[0];
> @@ -483,7 +553,8 @@ gint main(gint argc, gchar **argv)
> archive = g_strdup_printf("%s.tar.xz", prefix);
> }
> dir = osinfo_db_get_path(root, user, local, system, custom);
> - if (osinfo_db_export_create(prefix, version, dir, archive, verbose) < 0)
> + if (osinfo_db_export_create(prefix, version, dir, archive,
> + license, verbose) < 0)
> goto error;
>
> ret = EXIT_SUCCESS;
> @@ -584,6 +655,11 @@ Set the version string for the files in the archive to
> B<VERSION>. If this argument is not given, the version
> will be set to the current date in the format B<YYYYMMDD>.
>
> +=item B<--license=LICENSE-FILE>
> +
> +Add C<LICENSE-FILE> to the generated archive as an entry
> +named "LICENSE".
> +
> =item B<-v>, B<--verbose>
>
> Display verbose progress information when archiving files
> --
> 2.7.4
>
> _______________________________________________
> Libosinfo mailing list
> Libosinfo at redhat.com
> https://www.redhat.com/mailman/listinfo/libosinfo
ACK!
More information about the Libosinfo
mailing list