diff --git a/SOURCES/269.patch b/SOURCES/269.patch new file mode 100644 index 0000000..4a08b86 --- /dev/null +++ b/SOURCES/269.patch @@ -0,0 +1,127 @@ +From b4d103c6dec2aa0f8461e1ca78ad23d692e68d36 Mon Sep 17 00:00:00 2001 +From: Matthew Almond +Date: Thu, 20 May 2021 13:35:13 -0700 +Subject: [PATCH] Add option --skip-filelists + +This is a site-local optimization. Some packages and repos include an +enormous number of files. This is extremely expensive if said repo is +also fast changing. + +Impact of skipping filelists: breaking ability to resolve file/path +based dependencies, `-f` (file ownership) and `-l` (list) options in +repoquery. +--- + doc/createrepo_c.8 | 3 +++ + src/cmd_parser.c | 2 ++ + src/cmd_parser.h | 1 + + src/createrepo_c.c | 1 + + src/dumper_thread.c | 5 +++++ + src/dumper_thread.h | 1 + + src/parsehdr.c | 3 ++- + src/parsehdr.h | 1 + + 8 files changed, 16 insertions(+), 1 deletion(-) + +diff --git a/doc/createrepo_c.8 b/doc/createrepo_c.8 +index e9b3fc2..10702f4 100644 +--- a/doc/createrepo_c.8 ++++ b/doc/createrepo_c.8 +@@ -213,5 +213,8 @@ Exit with retval 2 if there were any errors during processing + .SS \-\-ignore\-lock + .sp + Expert (risky) option: Ignore an existing .repodata/. (Remove the existing .repodata/ and create an empty new one to serve as a lock for other createrepo instances. For the repodata generation, a different temporary dir with the name in format .repodata.time.microseconds.pid/ will be used). NOTE: Use this option on your own risk! If two createrepos run simultaneously, then the state of the generated metadata is not guaranteed \- it can be inconsistent and wrong. ++.SS \-\-skip\-filelists ++.sp ++Expert (risky) option: Skip filelist generation. + .\" Generated by docutils manpage writer. + . +diff --git a/src/cmd_parser.c b/src/cmd_parser.c +index bbefa08..0ecf7f9 100644 +--- a/src/cmd_parser.c ++++ b/src/cmd_parser.c +@@ -224,6 +224,8 @@ static GOptionEntry expert_entries[] = + "own risk! If two createrepos run simultaneously, then the state of the " + "generated metadata is not guaranteed - it can be inconsistent and wrong.", + NULL }, ++ { "skip-filelists", 0, 0, G_OPTION_ARG_NONE, &(_cmd_options.skip_filelists), ++ "Expert (risky) option: Skip filelist generation.", NULL}, + { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL }, + }; + +diff --git a/src/cmd_parser.h b/src/cmd_parser.h +index 32bcf99..5eff9d9 100644 +--- a/src/cmd_parser.h ++++ b/src/cmd_parser.h +@@ -57,6 +57,7 @@ struct CmdOptions { + char *general_compress_type;/*!< which compression type to use (even for + primary, filelists and other xml) */ + gboolean skip_symlinks; /*!< ignore symlinks of packages */ ++ gboolean skip_filelists; /*!< Skip creating filelists */ + gint changelog_limit; /*!< number of changelog messages in + other.(xml|sqlite) */ + gboolean unique_md_filenames; /*!< include the file checksums in +diff --git a/src/createrepo_c.c b/src/createrepo_c.c +index f4f4544..9dd288e 100644 +--- a/src/createrepo_c.c ++++ b/src/createrepo_c.c +@@ -1253,6 +1253,7 @@ main(int argc, char **argv) + user_data.checksum_type = cmd_options->checksum_type; + user_data.checksum_cachedir = cmd_options->checksum_cachedir; + user_data.skip_symlinks = cmd_options->skip_symlinks; ++ user_data.skip_filelists = cmd_options->skip_filelists; + user_data.repodir_name_len = strlen(in_dir); + user_data.task_count = task_count; + user_data.package_count = 0; +diff --git a/src/dumper_thread.c b/src/dumper_thread.c +index 119f3bd..f7c4e35 100644 +--- a/src/dumper_thread.c ++++ b/src/dumper_thread.c +@@ -431,6 +431,11 @@ cr_dumper_thread(gpointer data, gpointer user_data) + if (udata->checksum_cachedir) + hdrrflags = CR_HDRR_LOADHDRID | CR_HDRR_LOADSIGNATURES; + ++ ++ // Load filelists, unless --skip-filelists is passed. ++ if (udata->skip_filelists) ++ hdrrflags |= CR_HDRR_SKIPFILES; ++ + // Get stat info about file + if (udata->old_metadata && !(udata->skip_stat)) { + if (stat(task->full_path, &stat_buf) == -1) { +diff --git a/src/dumper_thread.h b/src/dumper_thread.h +index 60f984d..654991f 100644 +--- a/src/dumper_thread.h ++++ b/src/dumper_thread.h +@@ -66,6 +66,7 @@ struct UserData { + cr_ChecksumType checksum_type; // Constant representing selected checksum + const char *checksum_cachedir; // Dir with cached checksums + gboolean skip_symlinks; // Skip symlinks ++ gboolean skip_filelists; // Skip filelists + long task_count; // Total number of task to process + long package_count; // Total number of packages processed + +diff --git a/src/parsehdr.c b/src/parsehdr.c +index 2775bf3..97bb01e 100644 +--- a/src/parsehdr.c ++++ b/src/parsehdr.c +@@ -253,7 +253,8 @@ cr_package_from_header(Header hdr, + assert(x == dir_count); + } + +- if (headerGet(hdr, RPMTAG_FILENAMES, full_filenames, flags) && ++ if (!(hdrrflags & CR_HDRR_SKIPFILES) && ++ headerGet(hdr, RPMTAG_FILENAMES, full_filenames, flags) && + headerGet(hdr, RPMTAG_DIRINDEXES, indexes, flags) && + headerGet(hdr, RPMTAG_BASENAMES, filenames, flags) && + headerGet(hdr, RPMTAG_FILEFLAGS, fileflags, flags) && +diff --git a/src/parsehdr.h b/src/parsehdr.h +index 032acca..e7a4a4a 100644 +--- a/src/parsehdr.h ++++ b/src/parsehdr.h +@@ -39,6 +39,7 @@ typedef enum { + CR_HDRR_NONE = (1 << 0), + CR_HDRR_LOADHDRID = (1 << 1), /*!< Load hdrid */ + CR_HDRR_LOADSIGNATURES = (1 << 2), /*!< Load siggpg and siggpg */ ++ CR_HDRR_SKIPFILES = (1 << 3), /*!< Skip filelists */ + } cr_HeaderReadingFlags; + + /** Read data from header and return filled cr_Package structure. diff --git a/SPECS/createrepo_c.spec b/SPECS/createrepo_c.spec index 4819f89..eee28ff 100644 --- a/SPECS/createrepo_c.spec +++ b/SPECS/createrepo_c.spec @@ -37,11 +37,13 @@ Summary: Creates a common metadata repository Name: createrepo_c Version: 0.16.2 -Release: 2%{?dist} +Release: 2.1%{?dist} License: GPLv2+ URL: https://github.com/rpm-software-management/createrepo_c Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz Patch0: 0001-Never-leave-behind-repodata-lock-on-exit-RhBug-1906831.patch +Patch1: https://github.com/rpm-software-management/createrepo_c/pull/269.patch +Provides: createrepo_c(pr269) BuildRequires: cmake BuildRequires: gcc @@ -262,6 +264,9 @@ ln -sr %{buildroot}%{_bindir}/modifyrepo_c %{buildroot}%{_bindir}/modifyrepo %endif %changelog +* Mon May 24 2021 Matthew Almond - 0.16.2-2.1 +- PR269 for --skip-filelists + * Fri Jan 29 2021 Nicola Sella - 0.16.2-2 - Never leave behind .repodata lock on exit (RhBug:1906831)