[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