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@xxxxxxxxxx> --- 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@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo