diff --git a/.fmf/version b/.fmf/version deleted file mode 100644 index d00491f..0000000 --- a/.fmf/version +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/.gitignore b/.gitignore index a11e50e..3c70664 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -/findutils-4.*.*.tar.?z -/findutils-4.*.*.tar.*z.sig -/findutils-4.*.* +/findutils-4.*.*.tar.gz diff --git a/findutils-4.4.0-no-locate.patch b/findutils-4.4.0-no-locate.patch new file mode 100644 index 0000000..5345057 --- /dev/null +++ b/findutils-4.4.0-no-locate.patch @@ -0,0 +1,117 @@ +From dc92679e2c363f8c0d659fa428c138684455a6bd Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Wed, 11 May 2011 16:46:13 +0200 +Subject: [PATCH 1/4] findutils-4.4.0-no-locate.patch + +--- + Makefile.am | 2 +- + configure.ac | 2 -- + doc/find.texi | 24 ++++++++---------------- + 3 files changed, 9 insertions(+), 19 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index c7f8f39..0dacb93 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -9,7 +9,7 @@ DISTCLEANFILES = tool-versions.txt + + + # "tests" is the gnulib unit test dir. +-SUBDIRS = gl tests build-aux lib find xargs locate doc po m4 ++SUBDIRS = gl tests build-aux lib find xargs doc po m4 + + ACLOCAL_AMFLAGS = -I gl/m4 -I m4 + +diff --git a/configure.ac b/configure.ac +index f31dd37..431f0ce 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -253,8 +253,6 @@ find/testsuite/Makefile + gl/Makefile + gl/lib/Makefile + lib/Makefile +-locate/Makefile +-locate/testsuite/Makefile + m4/Makefile + po/Makefile.in + po/Makefile +diff --git a/doc/find.texi b/doc/find.texi +index 1f278de..c584298 100644 +--- a/doc/find.texi ++++ b/doc/find.texi +@@ -7,7 +7,6 @@ + @c %**end of header + + @include version.texi +-@include ../locate/dblocation.texi + + @iftex + @finalout +@@ -571,8 +570,7 @@ the databases are updated, and the directories for which they contain + entries. + + Here is how to select which file name databases @code{locate} +-searches. The default is system-dependent. At the time this document +-was generated, the default was @file{@value{LOCATE_DB}}. ++searches. The default is system-dependent. + + @table @code + @item --database=@var{path} +@@ -2874,13 +2872,9 @@ thrashing the network. + directories are indexed by each database file. + + The default location for the locate database depends on how findutils +-is built, but the findutils installation accompanying this manual uses +-the default location @file{@value{LOCATE_DB}}. +- +-If no database exists at @file{@value{LOCATE_DB}} but the user did not +-specify where to look (by using @samp{-d} or setting +-@code{LOCATE_PATH}), then @code{locate} will also check for a +-``secure'' database in @file{/var/lib/slocate/slocate.db}. ++is built. If user did not specify where to look (by using @samp{-d} ++or setting @code{LOCATE_PATH}), then @code{locate} will also check for ++a ``secure'' database in @file{/var/lib/slocate/slocate.db}. + + @node Database Formats + @section Database Formats +@@ -3423,8 +3417,7 @@ present. + + @item --database=@var{path} + @itemx -d @var{path} +-Instead of searching the default @code{locate} database +-@file{@value{LOCATE_DB}}, @code{locate} searches the file ++@code{locate} searches the file + name databases in @var{path}, which is a colon-separated list of + database file names. You can also use the environment variable + @code{LOCATE_PATH} to set the list of database files to search. The +@@ -3599,8 +3592,7 @@ The environment variable @code{PRUNEFS} also sets this value. Default + is @file{nfs NFS proc}. + + @item --output=@var{dbfile} +-The database file to build. The default is system-dependent, but +-when this document was formatted it was @file{@value{LOCATE_DB}}. ++The database file to build. + + @item --localuser=@var{user} + The user to search the non-network directories as, using @code{su}. +@@ -5619,7 +5611,7 @@ why @code{xargs} is confused by your operating system). + @section Error Messages From @code{locate} + + @table @samp +-@item warning: database @file{@value{LOCATE_DB}} is more than 8 days old ++@item warning: database @file{LOCATE_DB} is more than 8 days old + The @code{locate} program relies on a database which is periodically + built by the @code{updatedb} program. That hasn't happened in a long + time. To fix this problem, run @code{updatedb} manually. This can +@@ -5627,7 +5619,7 @@ often happen on systems that are generally not left on, so the + periodic ``cron'' task which normally does this doesn't get a chance + to run. + +-@item locate database @file{@value{LOCATE_DB}} is corrupt or invalid ++@item locate database @file{LOCATE_DB} is corrupt or invalid + This should not happen. Re-run @code{updatedb}. If that works, but + @code{locate} still produces this error, run @code{locate --version} + and @code{updatedb --version}. These should produce the same output. +-- +1.7.4.4 + diff --git a/findutils-4.4.2-xautofs.patch b/findutils-4.4.2-xautofs.patch index c8de53f..0f4264c 100644 --- a/findutils-4.4.2-xautofs.patch +++ b/findutils-4.4.2-xautofs.patch @@ -1,22 +1,22 @@ -From cd653102f401f91748c3f038be4d38ddacc2d7db Mon Sep 17 00:00:00 2001 +From 17e470dc1acca4824b70328d733d5f99c12d0d65 Mon Sep 17 00:00:00 2001 From: Kamil Dudka -Date: Wed, 3 Jul 2024 10:22:49 +0200 -Subject: [PATCH] findutils-4.4.2-xautofs.patch +Date: Wed, 11 May 2011 16:46:45 +0200 +Subject: [PATCH 3/4] findutils-4.4.2-xautofs.patch --- - doc/find.texi | 4 ++++ - find/defs.h | 3 +++ - find/find.1 | 3 +++ - find/ftsfind.c | 11 +++++++++-- - find/parser.c | 9 +++++++++ - find/util.c | 3 ++- - 6 files changed, 30 insertions(+), 3 deletions(-) + doc/find.texi | 4 ++++ + find/defs.h | 3 +++ + find/find.1 | 3 +++ + find/ftsfind.c | 6 ++++++ + find/parser.c | 11 ++++++++++- + find/util.c | 1 + + 6 files changed, 27 insertions(+), 1 deletions(-) diff --git a/doc/find.texi b/doc/find.texi -index f58c060..21b4bf5 100644 +index c584298..9731b71 100644 --- a/doc/find.texi +++ b/doc/find.texi -@@ -1605,6 +1605,10 @@ them. +@@ -1436,6 +1436,10 @@ them. There are two ways to avoid searching certain filesystems. One way is to tell @code{find} to only search one filesystem: @@ -28,7 +28,7 @@ index f58c060..21b4bf5 100644 @deffnx Option -mount Don't descend directories on other filesystems. These options are diff --git a/find/defs.h b/find/defs.h -index 453dc27..9424168 100644 +index 11d1d00..f95ce72 100644 --- a/find/defs.h +++ b/find/defs.h @@ -557,6 +557,9 @@ struct options @@ -42,12 +42,12 @@ index 453dc27..9424168 100644 * no longer exists by the time we get around to processing it. */ diff --git a/find/find.1 b/find/find.1 -index 319aa63..002fb16 100644 +index e851f82..a4799ff 100644 --- a/find/find.1 +++ b/find/find.1 -@@ -654,6 +654,9 @@ to stat them; this gives a significant increase in search speed. - .IP "\-version, \-\-version" - Print the \fBfind\fR version number and exit. +@@ -461,6 +461,9 @@ if standard input is a tty, and to + .B \-nowarn + otherwise. +.IP \-xautofs +Don't descend directories on autofs filesystems. @@ -56,27 +56,15 @@ index 319aa63..002fb16 100644 Don't descend directories on other filesystems. diff --git a/find/ftsfind.c b/find/ftsfind.c -index b7f69a0..aca856c 100644 +index 9fdb8ef..bd7cc37 100644 --- a/find/ftsfind.c +++ b/find/ftsfind.c -@@ -268,8 +268,8 @@ symlink_loop (const char *name) - static void - consider_visiting (FTS *p, FTSENT *ent) - { -- struct stat statbuf; -- mode_t mode; -+ struct stat statbuf = {0}; -+ mode_t mode = 0; - int ignore, isdir; - - if (options.debug_options & DebugSearch) -@@ -433,6 +433,13 @@ consider_visiting (FTS *p, FTSENT *ent) +@@ -485,6 +485,12 @@ consider_visiting (FTS *p, FTSENT *ent) } } -+ if (options.bypass_autofs -+ && 0 == get_statinfo (ent->fts_path, ent->fts_name, &statbuf) -+ && 0 == strcmp ("autofs", filesystem_type (&statbuf, ent->fts_name))) ++ if (options.bypass_autofs && ++ 0 == strcmp ("autofs", filesystem_type (&statbuf, ent->fts_name))) + { + fts_set(p, ent, FTS_SKIP); /* descend no further */ + } @@ -85,53 +73,53 @@ index b7f69a0..aca856c 100644 { /* this is the preorder visit, but user said -depth */ diff --git a/find/parser.c b/find/parser.c -index b86e685..6d74d1e 100644 +index 52a1ef6..995aec3 100644 --- a/find/parser.c +++ b/find/parser.c -@@ -150,6 +150,7 @@ static bool parse_used (const struct parser_table*, char *argv[], int * - static bool parse_user (const struct parser_table*, char *argv[], int *arg_ptr); +@@ -146,6 +146,7 @@ static bool parse_user (const struct parser_table*, char *argv[], int * + static bool parse_version (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_wholename (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_xdev (const struct parser_table*, char *argv[], int *arg_ptr); +static bool parse_xautofs (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_ignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_noignore_race (const struct parser_table*, char *argv[], int *arg_ptr); static bool parse_warn (const struct parser_table*, char *argv[], int *arg_ptr); -@@ -309,6 +310,7 @@ static struct parser_table const parse_table[] = - PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but now -path is standardized since POSIX 2008 */ +@@ -306,6 +307,7 @@ static struct parser_table const parse_table[] = + PARSE_TEST_NP ("wholename", wholename), /* GNU, replaced -path, but anyway -path will soon be in POSIX */ {ARG_TEST, "writable", parse_accesscheck, pred_writable}, /* GNU, 4.3.0+ */ PARSE_OPTION ("xdev", xdev), /* POSIX */ + PARSE_OPTION ("xautofs", xautofs), PARSE_TEST ("xtype", xtype), /* GNU */ #ifdef UNIMPLEMENTED_UNIX /* It's pretty ugly for find to know about archive formats. -@@ -2489,6 +2491,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) - return parse_noop (entry, argv, arg_ptr); +@@ -1230,7 +1232,7 @@ operators (decreasing precedence; -and is implicit where no others are given):\n + positional options (always true): -daystart -follow -regextype\n\n\ + normal options (always true, specified before other expressions):\n\ + -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf\n\ +- --version -xdev -ignore_readdir_race -noignore_readdir_race\n")); ++ --version -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); + puts (_("\ + tests (N can be +N or -N or N): -amin N -anewer FILE -atime N -cmin N\n\ + -cnewer FILE -ctime N -empty -false -fstype TYPE -gid N -group NAME\n\ +@@ -2736,6 +2738,13 @@ parse_xdev (const struct parser_table* entry, char **argv, int *arg_ptr) } -+static bool + static bool +parse_xautofs (const struct parser_table* entry, char **argv, int *arg_ptr) +{ + options.bypass_autofs = true; + return parse_noop (entry, argv, arg_ptr); +} + - static bool ++static bool parse_ignore_race (const struct parser_table* entry, char **argv, int *arg_ptr) { + options.ignore_readdir_race = true; diff --git a/find/util.c b/find/util.c -index 88dafd7..a592055 100644 +index 8577396..4d45f84 100644 --- a/find/util.c +++ b/find/util.c -@@ -181,7 +181,7 @@ Positional options (always true):\n\ - HTL (_("\n\ - Normal options (always true, specified before other expressions):\n\ - -depth -files0-from FILE -maxdepth LEVELS -mindepth LEVELS\n\ -- -mount -noleaf -xdev -ignore_readdir_race -noignore_readdir_race\n")); -+ -mount -noleaf -xautofs -xdev -ignore_readdir_race -noignore_readdir_race\n")); - HTL (_("\n\ - Tests (N can be +N or -N or N):\n\ - -amin N -anewer FILE -atime N -cmin N -cnewer FILE -context CONTEXT\n\ -@@ -1027,6 +1027,7 @@ set_option_defaults (struct options *p) +@@ -1014,6 +1014,7 @@ set_option_defaults (struct options *p) p->full_days = false; p->stay_on_filesystem = false; @@ -140,5 +128,5 @@ index 88dafd7..a592055 100644 if (p->posixly_correct) -- -2.45.2 +1.7.4.4 diff --git a/findutils-4.5.12-ppc-gnulib-tests.patch b/findutils-4.5.12-ppc-gnulib-tests.patch new file mode 100644 index 0000000..a9801ab --- /dev/null +++ b/findutils-4.5.12-ppc-gnulib-tests.patch @@ -0,0 +1,84 @@ +From de69fd334b77ec578c2232574fc76222808148b0 Mon Sep 17 00:00:00 2001 +From: Ulrich Weigand +Date: Fri, 30 May 2014 11:34:23 +0100 +Subject: [PATCH] isfinite, isinf, isnan tests: fix for little-endian PowerPC + +* tests/test-isfinite.c (test_isfinitel): Only manipulate the +first double of a PowerPC "double double" pair. +* tests/test-isinf.c (test_isinfl): Likewise. +* tests/test-isnan.c (test_long_double): Likewise. +* tests/test-isnanl.h (main): Likewise. +* tests/test-signbit.c (test_signbitl): Likewise. + +[upstream commit e962c07c0c8bb18f9a5969cbf1ddb01d0fe4f55c] + +Signed-off-by: Kamil Dudka +--- + tests/test-isfinite.c | 9 +++++++++ + tests/test-isinf.c | 9 +++++++++ + tests/test-isnanl.h | 9 +++++++++ + 3 files changed, 27 insertions(+) + +diff --git a/tests/test-isfinite.c b/tests/test-isfinite.c +index 828cd69..8e88b67 100644 +--- a/tests/test-isfinite.c ++++ b/tests/test-isfinite.c +@@ -152,6 +152,15 @@ test_isfinitel () + /* A bit pattern that is different from a Quiet NaN. With a bit of luck, + it's a Signalling NaN. */ + { ++#if defined __powerpc__ && LDBL_MANT_DIG == 106 ++ /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are ++ represented as the corresponding 64-bit IEEE values in the first double; ++ the second is ignored. Manipulate only the first double. */ ++ #undef NWORDS ++ #define NWORDS \ ++ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) ++#endif ++ + memory_long_double m; + m.value = zerol / zerol; + # if LDBL_EXPBIT0_BIT > 0 +diff --git a/tests/test-isinf.c b/tests/test-isinf.c +index 253f341..76c132e 100644 +--- a/tests/test-isinf.c ++++ b/tests/test-isinf.c +@@ -158,6 +158,15 @@ test_isinfl () + /* A bit pattern that is different from a Quiet NaN. With a bit of luck, + it's a Signalling NaN. */ + { ++#if defined __powerpc__ && LDBL_MANT_DIG == 106 ++ /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are ++ represented as the corresponding 64-bit IEEE values in the first double; ++ the second is ignored. Manipulate only the first double. */ ++ #undef NWORDS ++ #define NWORDS \ ++ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) ++#endif ++ + memory_long_double m; + m.value = zerol / zerol; + # if LDBL_EXPBIT0_BIT > 0 +diff --git a/tests/test-isnanl.h b/tests/test-isnanl.h +index 8a9e684..bf81630 100644 +--- a/tests/test-isnanl.h ++++ b/tests/test-isnanl.h +@@ -51,6 +51,15 @@ main () + /* A bit pattern that is different from a Quiet NaN. With a bit of luck, + it's a Signalling NaN. */ + { ++#if defined __powerpc__ && LDBL_MANT_DIG == 106 ++ /* This is PowerPC "double double", a pair of two doubles. Inf and Nan are ++ represented as the corresponding 64-bit IEEE values in the first double; ++ the second is ignored. Manipulate only the first double. */ ++ #undef NWORDS ++ #define NWORDS \ ++ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) ++#endif ++ + memory_long_double m; + m.value = NaNl (); + # if LDBL_EXPBIT0_BIT > 0 +-- +1.9.3 + diff --git a/findutils-4.5.13-warnings.patch b/findutils-4.5.13-warnings.patch index 3b350fc..9a062f5 100644 --- a/findutils-4.5.13-warnings.patch +++ b/findutils-4.5.13-warnings.patch @@ -1,7 +1,7 @@ From 690d4bd9f29a805999a3ce4651dac9585ccc9917 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Wed, 11 May 2011 16:46:57 +0200 -Subject: [PATCH] findutils-4.5.7-warnings.patch +Subject: [PATCH 1/2] findutils-4.5.7-warnings.patch --- xargs/xargs.c | 3 ++- @@ -11,7 +11,7 @@ diff --git a/xargs/xargs.c b/xargs/xargs.c index 5e373f2..c0a8676 100644 --- a/xargs/xargs.c +++ b/xargs/xargs.c -@@ -1346,7 +1346,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * +@@ -1253,7 +1253,8 @@ xargs_do_exec (struct buildcmd_control *ctl, void *usercontext, int argc, char * * utility if we run it, for POSIX compliance on the * handling of exit values. */ @@ -24,3 +24,30 @@ index 5e373f2..c0a8676 100644 -- 1.7.1 + +From c5654b9ca5f50daa1ca406ebd7b4546f24d00db6 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Mon, 23 Sep 2013 15:04:03 +0200 +Subject: [PATCH 2/2] parser: silence a [-Wmaybe-uninitialized] GCC warning + +... caused by a missing model of error() +--- + find/parser.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/find/parser.c b/find/parser.c +index 89d8bcf..8c399d7 100644 +--- a/find/parser.c ++++ b/find/parser.c +@@ -2776,7 +2776,7 @@ insert_type (char **argv, int *arg_ptr, + const struct parser_table *entry, + PRED_FUNC which_pred) + { +- mode_t type_cell; ++ mode_t type_cell /* to silence GCC warning */ = 0; + struct predicate *our_pred; + float rate = 0.5; + const char *typeletter; +-- +1.9.3 + diff --git a/findutils-4.5.14-fts-cycle.patch b/findutils-4.5.14-fts-cycle.patch new file mode 100644 index 0000000..2eb73cd --- /dev/null +++ b/findutils-4.5.14-fts-cycle.patch @@ -0,0 +1,44 @@ +From bf4d8abd7ae3624a13967275dcbaea19f6b6ceb5 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Wed, 11 Feb 2015 13:48:12 +0100 +Subject: [PATCH] fts: avoid crash when a cycle is added while traversing + +This could be triggered by auto-mounting a recursive bind mount. +Reported by Michael Chapman in: https://bugzilla.redhat.com/1188498 +* lib/fts.c (fts_read): Avoid removing the original hash table item +when leaving a directory that caused a cycle, and preserve the FTS_DC +flag. + +Bug: https://bugzilla.redhat.com/1188498 +Bug: http://thread.gmane.org/gmane.comp.lib.gnulib.bugs/34867 +--- + gl/lib/fts.c | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index 500e92c..f76c015 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -1091,9 +1091,16 @@ cd_dot_dot: + p->fts_errno = errno; + SET(FTS_STOP); + } +- p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP; +- if (p->fts_errno == 0) +- LEAVE_DIR (sp, p, "3"); ++ ++ /* If the directory causes a cycle, preserve the FTS_DC flag and keep ++ * the corresponding dev/ino pair in the hash table. It is going to be ++ * removed when leaving the original directory. ++ */ ++ if (p->fts_info != FTS_DC) { ++ p->fts_info = p->fts_errno ? FTS_ERR : FTS_DP; ++ if (p->fts_errno == 0) ++ LEAVE_DIR (sp, p, "3"); ++ } + return ISSET(FTS_STOP) ? NULL : p; + } + +-- +2.1.0 + diff --git a/findutils-4.5.14-python3.patch b/findutils-4.5.14-python3.patch new file mode 100644 index 0000000..a9cce55 --- /dev/null +++ b/findutils-4.5.14-python3.patch @@ -0,0 +1,33 @@ +From 16bc7d519ed81bc9427a4e28dd74b45e1595f960 Mon Sep 17 00:00:00 2001 +From: James Youngman +Date: Tue, 19 Aug 2014 08:29:49 +0100 +Subject: [PATCH] Fix bug #42903: the print statement doesn't exist in Python + 3. + +* find/testsuite/checklists.py (main): Avoid using the print +statement as it is not compatible with Python 3. We use +sys.stdout.write, since our needs here are simple. + +Upstream-commit: d56af2e2d5902c5f8a1ef99073d925c7d3b253d2 +Signed-off-by: Kamil Dudka +--- + find/testsuite/checklists.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/find/testsuite/checklists.py b/find/testsuite/checklists.py +index 2a2fd10..63c9c16 100644 +--- a/find/testsuite/checklists.py ++++ b/find/testsuite/checklists.py +@@ -77,7 +77,8 @@ def main(args): + dupes, configured = configured_file_names(args[1]) + with TemporaryWorkingDirectory(args[2]): + actual = set(find_test_files(args[3:])) +- print '%d test files configured for find, %s files on-disk' % (len(configured), len(actual)) ++ sys.stdout.write('%d test files configured for find, %s files on-disk' ++ % (len(configured), len(actual))) + problem_count = 0 + problem_count += report_problems(dupes, report_dupe) + problem_count += report_problems(configured - actual, report_missing) +-- +2.1.0 + diff --git a/findutils-4.5.14.tar.gz.sig b/findutils-4.5.14.tar.gz.sig new file mode 100644 index 0000000..2837103 Binary files /dev/null and b/findutils-4.5.14.tar.gz.sig differ diff --git a/findutils-4.5.15-leaf-opt.patch b/findutils-4.5.15-leaf-opt.patch new file mode 100644 index 0000000..46b87f1 --- /dev/null +++ b/findutils-4.5.15-leaf-opt.patch @@ -0,0 +1,231 @@ +From 1fc080b7c1eac7fa8063273aaae6b80165c17fe0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?= +Date: Sun, 20 Dec 2015 23:46:05 +0000 +Subject: [PATCH 1/5] fts: enable leaf optimization for XFS + +XFS provides usable dirent.d_type only for DT_DIR, +but the noleaf optimization still applies, as confirmed with: + + test $(($(find . -maxdepth 1 -type d | wc -l) + 1)) = $(stat -c %h .) + +Enabling this gives significant traversal speedup. +Testing with find(1) gives: + + $ time find/find-before /usr/share >/dev/null + real 0m0.410s + user 0m0.145s + sys 0m0.266s + + $ time find/find-after /usr/share >/dev/null + real 0m0.278s + user 0m0.147s + sys 0m0.131s + +* lib/fts.c (leaf_optimization_applies): Add XFS to the white list. + +Upstream-commit: d459ec6a4f97001a57d9299143ea9a5f6b1f313b +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index f76c015..fb720c0 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -663,6 +663,7 @@ fts_close (FTS *sp) + # define S_MAGIC_TMPFS 0x1021994 + # define S_MAGIC_NFS 0x6969 + # define S_MAGIC_REISERFS 0x52654973 ++# define S_MAGIC_XFS 0x58465342 + # define S_MAGIC_PROC 0x9FA0 + + /* Return false if it is easy to determine the file system type of +@@ -718,6 +719,7 @@ leaf_optimization_applies (int dir_fd) + /* List here the file system types that lack usable dirent.d_type + info, yet for which the optimization does apply. */ + case S_MAGIC_REISERFS: ++ case S_MAGIC_XFS: + return true; + + case S_MAGIC_PROC: +-- +2.5.0 + + +From 2f0dddbb01a70b2ae02797b315924de7e06c3d83 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Wed, 9 Dec 2015 07:34:56 +0100 +Subject: [PATCH 2/5] fts: ensure leaf optimization is used for NFS + +NFS provides usable dirent.d_type but not necessarily for all entries +of large directories. See +* lib/fts.c (leaf_optimization_applies): Append NFS on the white list. + +Upstream-commit: c97b8b9030de7c9a9f9f6d7dcdc3505c6b3f7f98 +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index fb720c0..d2d404f 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -716,6 +716,11 @@ leaf_optimization_applies (int dir_fd) + + switch (fs_buf.f_type) + { ++ case S_MAGIC_NFS: ++ /* NFS provides usable dirent.d_type but not necessarily for all entries ++ of large directories. See . */ ++ return true; ++ + /* List here the file system types that lack usable dirent.d_type + info, yet for which the optimization does apply. */ + case S_MAGIC_REISERFS: +-- +2.5.0 + + +From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 25 Sep 2015 16:09:39 +0200 +Subject: [PATCH 3/5] fts: introduce the FTS_NOLEAF flag + +The flag is needed to implement the -noleaf option of find. +* lib/fts.c (link_count_optimize_ok): Implement the FTS_NOLEAF flag. +* lib/fts_.h (FTS_NOLEAF): New macro, shifted conflicting constants. +--- + gl/lib/fts.c | 4 ++++ + gl/lib/fts_.h | 12 +++++++++--- + 2 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index d2d404f..808466f 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -786,6 +786,10 @@ link_count_optimize_ok (FTSENT const *p) + bool opt_ok; + struct LCO_ent *t2; + ++ if (ISSET(FTS_NOLEAF)) ++ /* leaf optimization explicitly disabled by the FTS_NOLEAF flag */ ++ return false; ++ + /* If we're not in CWDFD mode, don't bother with this optimization, + since the caller is not serious about performance. */ + if (!ISSET(FTS_CWDFD)) +diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h +index 63d4b74..f1d519b 100644 +--- a/gl/lib/fts_.h ++++ b/gl/lib/fts_.h +@@ -149,10 +149,16 @@ typedef struct { + from input path names during fts_open initialization. */ + # define FTS_VERBATIM 0x1000 + +-# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ ++ /* Disable leaf optimization (which eliminates stat() calls during traversal, ++ based on the count of nested directories stored in stat.st_nlink of each ++ directory). Note that the optimization is by default enabled only for ++ selected file systems, and only if the FTS_CWDFD flag is set. */ ++# define FTS_NOLEAF 0x2000 + +-# define FTS_NAMEONLY 0x2000 /* (private) child names only */ +-# define FTS_STOP 0x4000 /* (private) unrecoverable error */ ++# define FTS_OPTIONMASK 0x3fff /* valid user option mask */ ++ ++# define FTS_NAMEONLY 0x4000 /* (private) child names only */ ++# define FTS_STOP 0x8000 /* (private) unrecoverable error */ + int fts_options; /* fts_open options, global flags */ + + /* Map a directory's device number to a boolean. The boolean is +-- +2.5.0 + + +From c186934e6e37ddadf7511abb9b1045192757618e Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 25 Sep 2015 19:13:15 +0200 +Subject: [PATCH 4/5] ftsfind: propagate the -noleaf option to FTS + +* find/ftsfind.c (find): Propagate the -noleaf option to FTS. +--- + find/ftsfind.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/find/ftsfind.c b/find/ftsfind.c +index 5159470..e34b672 100644 +--- a/find/ftsfind.c ++++ b/find/ftsfind.c +@@ -559,6 +559,9 @@ find (char *arg) + if (options.stay_on_filesystem) + ftsoptions |= FTS_XDEV; + ++ if (options.no_leaf_check) ++ ftsoptions |= FTS_NOLEAF; ++ + p = fts_open (arglist, ftsoptions, NULL); + if (NULL == p) + { +-- +2.5.0 + + +From 2edb6204bab0acb0ef8cdde7499396afd9c66131 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?P=C3=A1draig=20Brady?= +Date: Mon, 18 Jan 2016 17:29:28 +0000 +Subject: [PATCH 5/5] fts: don't unconditionally use leaf optimization for NFS + +NFS st_nlink are not accurate on all implementations, +leading to aborts() if that assumption is made. +See +* lib/fts.c (leaf_optimization_applies): Remove NFS from +the white list, and document the issue. + +Upstream-commit: 85717b68b03bf85016c5079fbbf0c8aa2b182ba6 +Signed-off-by: Kamil Dudka +--- + gl/lib/fts.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/gl/lib/fts.c b/gl/lib/fts.c +index 55cd554..6e1eaf5 100644 +--- a/gl/lib/fts.c ++++ b/gl/lib/fts.c +@@ -718,22 +718,23 @@ leaf_optimization_applies (int dir_fd) + + switch (fs_buf.f_type) + { +- case S_MAGIC_NFS: +- /* NFS provides usable dirent.d_type but not necessarily for all entries +- of large directories. See . */ +- return true; +- + /* List here the file system types that lack usable dirent.d_type + info, yet for which the optimization does apply. */ + case S_MAGIC_REISERFS: + case S_MAGIC_XFS: + return true; + ++ /* Explicitly list here any other file system type for which the ++ optimization is not applicable, but need documentation. */ ++ case S_MAGIC_NFS: ++ /* NFS provides usable dirent.d_type but not necessarily for all entries ++ of large directories, so as per ++ NFS should return true. However st_nlink values are not accurate on ++ all implementations as per . */ ++ /* fall through */ + case S_MAGIC_PROC: +- /* Explicitly listing this or any other file system type for which +- the optimization is not applicable is not necessary, but we leave +- it here to document the risk. Per http://bugs.debian.org/143111, +- /proc may have bogus stat.st_nlink values. */ ++ /* Per /proc may have ++ bogus stat.st_nlink values. */ + /* fall through */ + default: + return false; +-- +2.5.5 + diff --git a/findutils-4.5.15-no-locate.patch b/findutils-4.5.15-no-locate.patch deleted file mode 100644 index cf39c95..0000000 --- a/findutils-4.5.15-no-locate.patch +++ /dev/null @@ -1,173 +0,0 @@ -From 3e5e311d23ac0a5bd5930ddb4094f7555b886329 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Sat, 19 Dec 2015 22:56:40 +0100 -Subject: [PATCH 1/2] Revert "Don't include dblocation.texi from original spot, - symlink it." - -This reverts commit f59d88e456553dfe0b5185caf75e4041285fd595. ---- - doc/Makefile.am | 7 +------ - 1 file changed, 1 insertion(+), 6 deletions(-) - -diff --git a/doc/Makefile.am b/doc/Makefile.am -index f6f7443..6fbf57b 100644 ---- a/doc/Makefile.am -+++ b/doc/Makefile.am -@@ -16,11 +16,9 @@ AM_CFLAGS = $(WARN_CFLAGS) - - info_TEXINFOS = find.texi find-maint.texi - find_TEXINFOS = perm.texi parse-datetime.texi regexprops.texi fdl.texi --BUILT_SOURCES = dblocation.texi --nodist_find_TEXINFOS = dblocation.texi - find_maint_TEXINFOS = fdl.texi - MOSTLYCLEANFILES = find.cps --CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz dblocation.texi \ -+CLEANFILES = find.txt find_mono.html findutils.texi_html_node.tar.gz \ - find_mono.html findutils.texi_html_node.tar.gz \ - find-info.tar.gz find.texi.tar.gz \ - find.txt tmp-doc-install find_mono.html.gz -@@ -73,9 +71,6 @@ findutils.texi_html_node.tar.gz: find.html - tar zcf $@ find.html - - --dblocation.texi: ../locate/dblocation.texi -- $(LN_S) ../locate/dblocation.texi $@ -- - find-info.tar.gz: - $(MKDIR_P) tmp-doc-install/info - $(MAKE) $(AM_MAKEFLAGS) \ --- -2.5.0 - - -From d5473caa86f689ebcadacc593f5a71781c99e829 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Wed, 11 May 2011 16:46:13 +0200 -Subject: [PATCH 2/2] findutils-4.4.0-no-locate.patch - ---- - Makefile.am | 2 +- - configure.ac | 2 -- - doc/find.texi | 24 ++++++++---------------- - tests/local.mk | 2 +- - 4 files changed, 10 insertions(+), 20 deletions(-) - -diff --git a/Makefile.am b/Makefile.am -index af82d54..6ad453b 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -35,7 +35,7 @@ DISTCLEANFILES = tool-versions.txt - - - # "gnulib-tests" is the gnulib unit test dir. --SUBDIRS = gl build-aux lib find xargs locate doc po m4 gnulib-tests -+SUBDIRS = gl build-aux lib find xargs doc po m4 gnulib-tests - - ALL_RECURSIVE_TARGETS = - -diff --git a/configure.ac b/configure.ac -index ce0e768..521e665 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -309,8 +309,6 @@ find/testsuite/Makefile - gl/Makefile - gl/lib/Makefile - lib/Makefile --locate/Makefile --locate/testsuite/Makefile - m4/Makefile - po/Makefile.in - po/Makefile -diff --git a/doc/find.texi b/doc/find.texi -index c2714dd..01367a4 100644 ---- a/doc/find.texi -+++ b/doc/find.texi -@@ -7,7 +7,6 @@ - @c @setchapternewpage odd - @c %**end of header - --@include dblocation.texi - - @iftex - @finalout -@@ -661,8 +660,7 @@ the databases are updated, and the directories for which they contain - entries. - - Here is how to select which file name databases @code{locate} --searches. The default is system-dependent. At the time this document --was generated, the default was @file{@value{LOCATE_DB}}. -+searches. The default is system-dependent. - - @table @code - @item --database=@var{path} -@@ -3112,13 +3110,9 @@ thrashing the network. - directories are indexed by each database file. - - The default location for the locate database depends on how findutils --is built, but the findutils installation accompanying this manual uses --the default location @file{@value{LOCATE_DB}}. -- --If no database exists at @file{@value{LOCATE_DB}} but the user did not --specify where to look (by using @samp{-d} or setting --@env{LOCATE_PATH}), then @code{locate} will also check for a --``secure'' database in @file{/var/lib/slocate/slocate.db}. -+is built. If user did not specify where to look (by using @samp{-d} -+or setting @code{LOCATE_PATH}), then @code{locate} will also check for -+a ``secure'' database in @file{/var/lib/slocate/slocate.db}. - - @node Database Formats - @section Database Formats -@@ -3627,8 +3621,7 @@ present. - - @item --database=@var{path} - @itemx -d @var{path} --Instead of searching the default @code{locate} database --@file{@value{LOCATE_DB}}, @code{locate} searches the file -+@code{locate} searches the file - name databases in @var{path}, which is a colon-separated list of - database file names. You can also use the environment variable - @env{LOCATE_PATH} to set the list of database files to search. The -@@ -3803,8 +3796,7 @@ The environment variable @env{PRUNEFS} also sets this value. Default - is @file{nfs NFS proc}. - - @item --output=@var{dbfile} --The database file to build. The default is system-dependent, but --when this document was formatted it was @file{@value{LOCATE_DB}}. -+The database file to build. - - @item --localuser=@var{user} - The user to search the non-network directories as, using @code{su}. -@@ -5828,7 +5820,7 @@ See the manual of the system call @code{dup2(2)}. - @section Error Messages From @code{locate} - - @table @samp --@item warning: database @file{@value{LOCATE_DB}} is more than 8 days old -+@item warning: database @file{LOCATE_DB} is more than 8 days old - The @code{locate} program relies on a database which is periodically - built by the @code{updatedb} program. That hasn't happened in a long - time. To fix this problem, run @code{updatedb} manually. This can -@@ -5836,7 +5828,7 @@ often happen on systems that are generally not left on, so the - periodic ``cron'' task which normally does this doesn't get a chance - to run. - --@item locate database @file{@value{LOCATE_DB}} is corrupt or invalid -+@item locate database @file{LOCATE_DB} is corrupt or invalid - This should not happen. Re-run @code{updatedb}. If that works, but - @code{locate} still produces this error, run @code{locate --version} - and @code{updatedb --version}. These should produce the same output. -diff --git a/tests/local.mk b/tests/local.mk -index 7e52a04..ae08a56 100644 ---- a/tests/local.mk -+++ b/tests/local.mk -@@ -15,7 +15,7 @@ - ## You should have received a copy of the GNU General Public License - ## along with this program. If not, see . - --built_programs = find xargs frcode locate updatedb -+built_programs = find xargs - - # Indirections required so that we'll still be able to know the - # complete list of our tests even if the user overrides TESTS --- -2.5.0 - diff --git a/findutils-4.6.0-leaf-opt.patch b/findutils-4.6.0-leaf-opt.patch deleted file mode 100644 index 37ae9d5..0000000 --- a/findutils-4.6.0-leaf-opt.patch +++ /dev/null @@ -1,122 +0,0 @@ -From 547e7145f335dc07144f35eaacc520475068852e Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Fri, 30 Aug 2019 10:22:22 +0200 -Subject: [PATCH 1/3] Revert "fts: cleanup after FTS_NOATIME removal" - -This reverts commit dce8759f0f0236a860a3e68b63c5e99cc6f168f9. ---- - gl/lib/fts_.h | 10 ++++++---- - 1 file changed, 6 insertions(+), 4 deletions(-) - -diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h -index fb5558f..0122262 100644 ---- a/gl/lib/fts_.h -+++ b/gl/lib/fts_.h -@@ -149,14 +149,16 @@ typedef struct { - dirent.d_type data. */ - # define FTS_DEFER_STAT 0x0400 - -+/* 0x0800 unused, was non-working FTS_NOATIME */ -+ - /* Use this flag to disable stripping of trailing slashes - from input path names during fts_open initialization. */ --# define FTS_VERBATIM 0x0800 -+# define FTS_VERBATIM 0x1000 - --# define FTS_OPTIONMASK 0x0fff /* valid user option mask */ -+# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ - --# define FTS_NAMEONLY 0x1000 /* (private) child names only */ --# define FTS_STOP 0x2000 /* (private) unrecoverable error */ -+# define FTS_NAMEONLY 0x2000 /* (private) child names only */ -+# define FTS_STOP 0x4000 /* (private) unrecoverable error */ - int fts_options; /* fts_open options, global flags */ - - /* Map a directory's device number to a boolean. The boolean is --- -2.20.1 - - -From 1328926a705fdb4728c1f255dd368de928736d39 Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Fri, 25 Sep 2015 16:09:39 +0200 -Subject: [PATCH 2/3] fts: introduce the FTS_NOLEAF flag - -The flag is needed to implement the -noleaf option of find. -* lib/fts.c (link_count_optimize_ok): Implement the FTS_NOLEAF flag. -* lib/fts_.h (FTS_NOLEAF): New macro, shifted conflicting constants. ---- - gl/lib/fts.c | 4 ++++ - gl/lib/fts_.h | 12 +++++++++--- - 2 files changed, 13 insertions(+), 3 deletions(-) - -diff --git a/gl/lib/fts.c b/gl/lib/fts.c -index d2d404f..808466f 100644 ---- a/gl/lib/fts.c -+++ b/gl/lib/fts.c -@@ -706,6 +706,10 @@ filesystem_type (FTSENT const *p, int fd) - struct dev_type *ent; - struct statfs fs_buf; - -+ if (ISSET(FTS_NOLEAF)) -+ /* leaf optimization explicitly disabled by the FTS_NOLEAF flag */ -+ return 0; -+ - /* If we're not in CWDFD mode, don't bother with this optimization, - since the caller is not serious about performance. */ - if (!ISSET (FTS_CWDFD)) -diff --git a/gl/lib/fts_.h b/gl/lib/fts_.h -index 63d4b74..f1d519b 100644 ---- a/gl/lib/fts_.h -+++ b/gl/lib/fts_.h -@@ -155,10 +155,16 @@ typedef struct { - from input path names during fts_open initialization. */ - # define FTS_VERBATIM 0x1000 - --# define FTS_OPTIONMASK 0x1fff /* valid user option mask */ -+ /* Disable leaf optimization (which eliminates stat() calls during traversal, -+ based on the count of nested directories stored in stat.st_nlink of each -+ directory). Note that the optimization is by default enabled only for -+ selected file systems, and only if the FTS_CWDFD flag is set. */ -+# define FTS_NOLEAF 0x2000 - --# define FTS_NAMEONLY 0x2000 /* (private) child names only */ --# define FTS_STOP 0x4000 /* (private) unrecoverable error */ -+# define FTS_OPTIONMASK 0x3fff /* valid user option mask */ -+ -+# define FTS_NAMEONLY 0x4000 /* (private) child names only */ -+# define FTS_STOP 0x8000 /* (private) unrecoverable error */ - int fts_options; /* fts_open options, global flags */ - - /* Map a directory's device number to a boolean. The boolean is --- -2.5.0 - - -From c186934e6e37ddadf7511abb9b1045192757618e Mon Sep 17 00:00:00 2001 -From: Kamil Dudka -Date: Fri, 25 Sep 2015 19:13:15 +0200 -Subject: [PATCH 3/3] ftsfind: propagate the -noleaf option to FTS - -* find/ftsfind.c (find): Propagate the -noleaf option to FTS. ---- - find/ftsfind.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/find/ftsfind.c b/find/ftsfind.c -index 5159470..e34b672 100644 ---- a/find/ftsfind.c -+++ b/find/ftsfind.c -@@ -509,6 +509,9 @@ find (char *arg) - if (options.stay_on_filesystem) - ftsoptions |= FTS_XDEV; - -+ if (options.no_leaf_check) -+ ftsoptions |= FTS_NOLEAF; -+ - p = fts_open (arglist, ftsoptions, NULL); - if (NULL == p) - { --- -2.5.0 - diff --git a/findutils-4.6.0-test-lock.patch b/findutils-4.6.0-test-lock.patch deleted file mode 100644 index b74c0dc..0000000 --- a/findutils-4.6.0-test-lock.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 129f23ce758620fade812baab811379ce8454048 Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Fri, 27 Jan 2017 11:44:41 +0100 -Subject: [PATCH] test-lock: disable the rwlock test - -It hangs indefinitely if the system rwlock implementation does not -prevent writer starvation (and glibc does not implement it). - -Bug: http://www.mail-archive.com/bug-gnulib@gnu.org/msg33017.html ---- - gnulib-tests/test-lock.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gnulib-tests/test-lock.c b/gnulib-tests/test-lock.c -index a992f64..fd9c014 100644 ---- a/gnulib-tests/test-lock.c -+++ b/gnulib-tests/test-lock.c -@@ -42,7 +42,7 @@ - Uncomment some of these, to verify that all tests crash if no locking - is enabled. */ - #define DO_TEST_LOCK 1 --#define DO_TEST_RWLOCK 1 -+#define DO_TEST_RWLOCK 0 - #define DO_TEST_RECURSIVE_LOCK 1 - #define DO_TEST_ONCE 1 - --- -2.7.4 - diff --git a/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch b/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch deleted file mode 100644 index f6ac52d..0000000 --- a/findutils-4.9.0-ignore_readdir_race-symlink_loop.patch +++ /dev/null @@ -1,17 +0,0 @@ -# cherry picked from https://savannah.gnu.org/bugs/?45930 -diff --git a/find/ftsfind.c b/find/ftsfind.c -index 0d96c4ca..6aeac28c 100644 ---- a/find/ftsfind.c -+++ b/find/ftsfind.c -@@ -401,6 +401,10 @@ consider_visiting (FTS *p, FTSENT *ent) - } - else - { -+ /* Ignore unlink() error for vanished files. */ -+ if (ENOENT == ent->fts_errno && options.ignore_readdir_race) -+ return; -+ - nonfatal_target_file_error (ent->fts_errno, ent->fts_path); - /* Continue despite the error, as file name without stat info - * might be better than not even processing the file name. This - diff --git a/findutils-keyring.gpg b/findutils-keyring.gpg deleted file mode 100644 index da26a0f..0000000 --- a/findutils-keyring.gpg +++ /dev/null @@ -1,620 +0,0 @@ -Release GPG keyring of findutils group. - -GPG keys of James Youngman ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1 - -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 -iJpHld5wbiXhNA18Lr5bV56Z+9IXwQ== -=Svgf ------END PGP PUBLIC KEY BLOCK----- - -GPG keys of Bob Proulx ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBFdggy0BEADFA8M0PxYhQdI9LlkkP3jfkDDsKmyofklaJouGHc3h+IjoXkdJ -A1C/UaEjaVLxb4aBm7znZrk44Je88MxidwCTeZwgJje2R397IKW3WtRtIfUz5sH3 -uEoO1AWB9U/SzbO/V7CueXO8S+UT9/kOWFAtRGceDzBEzXdnMobuBlUbKzs86QW4 -0kJEWc8I6dzdiLojabFYXWVYD+5VeiIsY0P4g7RZQ0pkurb2+py8XgsXTyuoljah -bHTp5Q7Ioyxeb25fIQ0rea9kCWbm9DNtyoFlmNj04+NPgYiHAtHnLrQSWWu87Oy9 -saVmKd+dJqvY48h15rYnm+A5llbqgZlq+dNsj6V6MPgToGBYcQtWJ2BjpGwJ7gfe -hgi1rAFNhDF/TbtlMBhumxW3YD/INVaI213u+21mMkOgRz5Q/iB9I+JtxO7SNWg0 -es0+7vTGWb6S5BAlWuMq0t8Zfx+s0qdPeeMhm4Qsgw62LoFlWeSN22/m5fWhtQOU -KhBt17q9XdI68Ixx+NqPxJefG6PVR2bobnYWpHBn5CTu8R3cfFvPHl5MDbcJVAOE -CYYaEq6ltGJ+k+Rytb9HEudBSdzDxad0udTk7FUMcnJXbgfOO+6FcgY9pwvcktqZ -uBCmkIOxUQGkmtYN5o+qO0ybkIXigZdCCmT1oIcC6n2c/RrhJhwimTZBuwARAQAB -tBtCb2IgUHJvdWx4IDxib2JAcHJvdWx4LmNvbT6JAlQEEwEIAD4CGwMFCwkIBwMF -FQoJCAsFFgIDAQACHgECF4AWIQRjsWaDhBzj3CXTxutCGvomOH+ajgUCX10iQwUJ -Cd3SlgAKCRBCGvomOH+ajp/5D/9jk3BxnXREMoYtmQLW4Ks7qAy0GencA8zmyfmS -jMuUKWnl4L8fyFDXA2aheVeIoeMVzq3+nx2nudGEfNIA4cwuh0bULl//JbdKkFZK -zQXoEIPadLdvuUaxxuhcnhSfdow9Rw380OS/1wNN9sbUuoRKIyzz4dVh++U4K/d3 -VPMt1jRVT2cV+DITUskRctWaXtC9IOBJvBhWeQJAIcMygHRnVAI8fyxXqYEuN0r2 -JoiTVz/HyAkbaaBKTJZaMpRlYMVkFFYaI8OqZDIwpy5RopyeAbGPl5w4rC0AgUqk -VFnTQim6yG5WrWTZwecUW0sLn/jp/oG6JK0BbJUa62fR4/pRUai+K00ovlJgukYO -0tJa5AySbimfPDj87dYO4cfN0uoUiCfEbf6LIWa/2grIZ1t+OEprwtzewhkrJEo0 -boP1c+PGiaskNVxoO9yFSxVzw7oP6APHfNvV0GWKFaimOLEDAch6j6qEc1Awifdr -3On7FIjVfxUSxzy3edL0dDAGsF55PhifBy9qf0M6XgymnXoCe+iGQikbiGiSo0J8 -ywFE7NvXP84kF+na+MNE5QbexKA8d+M0dBIfPcImLyx7LwN0aDgd4iMRcoyJJMqc -sbgcT28f8XL5AilJcdH0L8fkD0mI1FiP2tkWxv2LQt22r5E2Wqdgod+jVSgbfwD0 -jnBihIhGBBMRCAAGBQJXYJESAAoJENKUXDvBNlC27esAnRDOPvu2SJ2l4YvLpl6j -qzf4r4sKAJ9GFzeofvcY/mZNrSb3jGE6SqVxg4kBHAQQAQgABgUCV2CuWwAKCRBE -jjgzAFuz8zEJB/4yZ4dX5AL5Ty4DGdfn8TnB4tP/FdO9573Jz1Toj7eXclNHuiUI -IkkHY8B1FWp9iWeJcmGQcjoPCgTIDFdAVQRqHNnq+LZvzONPIB/61MvD0bb9GC2a -J8uPxe6aDnTaStL07uy7S6dNY2MxnQWi0hhX2PVm838ClOv+dvPiKfzzFyjcsoDT -Jqxtlr6WwUOyAae9HDU1vkG8KkWVaXdERPYUNIfz/Zoqc36HFjc+PtMDP2toIJ2r -7kezmaNbanHzcS9AWYICjLFL0OgSfSM6Mdh8yuqB8kGTjH+ZOhtAL6OSdiLjf6AM -VfelVv7VrKK7swOMzE1ihH72ukWcTP2n96YTiQIcBBMBCAAGBQJXYLfwAAoJEEVX -DF7IPmq8vZsQAKHdWQ2Hdwd+500HfKd7hskTx9balcULi//sAam3hJPBcffgD7cl -Rd/Dn3CQwY3PYmKYUHIWXCkNCZG2g8jAUqu2SRdN7rsxbXHw4vvGAHCWZREAFowH -iMki1vL4+moB3vvCl0sA8svFcHMvXdzENXC45G/J/ew6cSWBY+vLrijal5YagoZt -oJ5D0WNDek/V1SDgsSO2Tv6IuQmojwTCpQ6XNH7FDYbhRRAmFf+qEr/JnVkcT/6Z -DkPj1X5Ufi4U8YPd/SMe9q2KJ7az0EZTvoDgjXxmjwAENeRvbdG+Cd3wjLaFqOlJ -WvQJYabiANlspRg+uhwghZUkuGk+eUkFpObyBXVmbM7zvYFy/6BTvOEE/m9w8nEq -2MgTOXuTvlMXL8IqPcsNnREd+bBpVXgiOw1fNB7DcxLL1Qgt78SOOrgzMLg7j3jt -Q5bL4Ag9ssLKsf1VRbJvHLg/fW5kQpAWaQJrwef3VwUMpYApC2Co/07YcNED8nub -3sBNcnzQL0seJqqPxMgeBNntnfguypfuzjA59REf8XvNeWVX41h94l8nKhQ/7a00 -UZD5c9zDoo1JYWKn7fQ8At/vplBMOhLM8H9dJD+D3I/pu0gKmFw6oi/n0ki+kj/z -84+JBtwILhN2maEg2FtAjFEUUcBg2m3c4mhgcCZJMBCI8BZa5U33XmLZiQIcBBAB -CgAGBQJXZJOHAAoJEPSVSpCAqyrSw8kP/Rm8+K/e0rJvwnvqEg/FazByux8nHc+c -oecpcgjZ3bchHpUuZ06JG3vFRgToasppinYv3AHFB6mtF01/eXKW/0wli7rvb3gC -g9f8H8NfM5jJzDJjNRjR+3oWWzEVzpQLIlpeQS31dRwBLHl7TWwkuTN1/llsA6mf -+OLvNXd4ks+K9o+nFWegRSD/owFzH4tg59cgAfERxTeEgwKGJV5GNbjotXJIS10J -quH4jfSoc48Yo73t6ALgaC4yr9V1ZhrTKoBU+l6bwDg7vIfMNDeH1FenrMvFGQUO -JM5VcP1VUS2eLz13L2DIXd3hmBUD3ua537dSDua+d4p9rDpibHTHKrJbs+WdPLJi -Fm2ARmjbCjGCXB7MMRa+PI0jyjZ784TqwHjCwOP+2AcL1DvnSDU0upKub6qtqU6w -2LIcLJilIxw27+Exr1ecflUcKLq3o2hJSzTUj+8nT0wQ3ie6lmfCl26RUQZRtGI8 -QtDQFxJ6D1GULC6njabPXpd5EeeRWizgFi5p9k5WuSm+lSeWbE8tRzLmY+Qfx0mf -TLdn2TnGweYJwiwLQRshzA9fLMvch8yHxGrGZUJ58zynsPKG1Mop1wnvytzBN6cD -ptYAS6Fy+d4B8S1h4rmio2wa5+M9lk6fNwmMBqfDNuHKlcuPzo0y2wTd6Uo/0iPr -FfO5ZVpJM2S8iQIcBBABCgAGBQJX6US3AAoJEPCV97sBj+KzLN8QAKeEVz0twtuT -eUD6fJWaus3vyViBlfzePvr8TAvhEsdXUkYQ/RwmSHVVZHRfuRYeEqgbm0PWWRkd -Drw37HcZd8AXE9SseRaWi3yUPbxTjqu1FzDXnUNvjnb3e/zNqTv54yd4NJrSB+6M -mFa/NnNTKls95O8H8jgL7oPL/SKO6ZjxdZiACFhLSsRwzx2Xmu+tsal3FGsUS0Qe -gxUX6Bu1ADs3Oih2Z8iJvFUy44YJkllMl6JhrhvgWnqjo2bG2535qAgMfOlkl29D -rF4PRLAe0MVKA9RhemKj0tfzJR95CWrKLR35ZOa9Au5i766LbzEItseap//APV++ -3QuGobV16rDGXOSTGgZ+xv7L3sideZZao8JQF9fK8LtNpxGz7Wfq8Vg0HWgJdSNJ -fM33Nt8VeAXbqYdpPto5dfZrfjA8c46ulrVGTqgTx1aWpV9EdyaIMLmYG1snMLGQ -1HrAw0owkQGIiF3AtWXgKRDGuJ3ouXasLBIAWyvVg25XknHift3O7cnWLMwSGnA2 -MRvp1DOIvzFriJ5mlzl/E5MBx2sVZBEqzc7I+K5MGfpkrFjyrmHy4PzPOgYAb6Hv -VBx8SSEWUhlL/HJG5Fp/nbm+FQZunhdZ/eHn3IVSUCj8Ags+pCE4hhMa9djfmR1k -46HwVqc4hc/HGWGexfpb61/hD0zH9zZfiQIcBBABCAAGBQJX7ABZAAoJENVHlGMn -ADo/FZIP/Ak2YNa8R15HqG5QRKrtiKC0+PDbjoB0/M/IGEjHEDxGd8xmZMzicxjy -3i2oMy7v+FlahdbgIJwrnNLzp+pE0BnSBL8x/cpsW3vPmefOc8kF3StCpEBKxCYm -y8eR8zkkqDE1fDrmkoFW+OnZzrJ2zOshn2mXeSTeAFvVZHqabZ29j7z+rI+LKfM/ -nhGICBzyPr6t7E1s9tu/XUUmQrwg5UAaqaRQkwNbWYXMLmlY6bEfa0X1I/6FLMNp -kIRc6FHDTEHL2ebgcEGzRrkPd6Pvz0Zr0pMT8WdptliVxMcdVG109VRQlbe9GyAo -zsERBixySox/Kq+ztongfFrpqh7lTsZ4hYlE0RklJBKUVHjSx88r/xBGV0Ga/Q5d -pT/zXhWH8HZ1CGm3IBcli8QgZpwXCrGr97BHzi52fsPO2kefRGDiwjLAPLyoogWV -hDBVxNIp4qvCrsqyJ02X381ZimxDo7gJxhXF0U/CLhKgoiS/Ksjz3VAzsPiyf/Kf -pFJ4CYBTRcGuuqaU41+Pepvk+HLxSFW2zTrWIFruGcchh2fLMSSBqbri3pn7Q9lO -GJnbNJYIUBKFYamXyfT2G8+jnyrfX9QX2PGeWrn5dpmWn7SW7AVZfTIxlbuEHpw9 -+kBDT2ZD9PfDJn3MGdZh5QgKeja/66nvH4R2GSLXLQeDwpP23DeoiQIcBBMBAgAG -BQJX9TnzAAoJEBv4PF5U/IZAqLgP/0sTdI4GltFzFV36LXKuSHn3y/mavky+rXui -ouAhVYtXXJyQoANUmPun66GzlV9M4RWJJJfIlhrNisWKJ7Xim1q0knmO7FF4G1Fu -HuAxQIEtXxs8XStXVdHLN6wgdAEseNozywJqqXdq6A9EMvfg6oo2otNyHp9bjPy/ -J9xb8vc5Pr+C+fTTNiG1YmXzuqQO6eYVioJ4OIPOmWA+hD9Tp7LfE6/O+HfK/iRD -KEhf2tdEwf9As3V+K1p9q/9kX35cKrt498V7uOaPjhkq1eRbu9p7i3TP1Jy8lf0W -DEdiDX+FmlJD8dtPB9xpY/E9PxZWT54s7mP4x6JmLKOg3iFBN0lHPD3jl79eJMkJ -7DvLTT7nORyy9Pyre97ZWPEhs4y63DNjEtwgP1I2D9qLprwQy5vv+FUu/CnwZVBX -1ggltabJ5RafVF0fkRSNFhwq3Z4zN77rKhdpkjlGqbY4AQffqMcgtScQHvQDH2th -JYn0XkCGqjWhjFs8XXcIFUTuDg+o9Vz5N6LsZUzby4CSaUSue9/m3USB7X4f27KR -yIO/kQSa0AEZTiDoaN3NzEp9o12UXMEbxk/K9Qj2IO+tfE9ToshQ4baFprsqZV7O -6pzqUKvgUaJVkb1Qq16WkXfYqoFOJZBAn8FzyH95BcMLpNbAw0a9cXRT29zO47Bj -jFWf1cL1iQIcBBMBCgAGBQJY4qiWAAoJEE3gooj4qgph85QP/1Ane4eUF6Laz0t8 -AVGXW9PNDQ10K4F0+o6cKsjCjifUoAtcFB4KWpO3dEkujfYWOurnEXTDR3Ez0+ga -dtf/jgEsAdG38r18uyJLmGaHspcKARNCE4JXKXNEY0oqdvpBPh7jWOKP2Hy181G0 -xRTc1DQfeiwwwa+8szzOTtMNCY6HRzM345IS8vQRFDWhpN1Ugdmkmd7iVnjrVbCm -wb16kDG99BDyAVzWiJy//xPpPR0pJI0Gsl3jem3CejwdxH3MUzlTMcRIZrOpZPut -XYiE41kg3qOFktSa6gXtjIVaJw0CePaoDO7ttqGpx+D4L8lMLut8Mjlz52WZ3c1t -mBSSy/0Dy8ERy0GNOgP5LZ6nLCXvht2nc0EpWw3t//SN+nKKG3S/9CwIc+FJ433D -gkJmbOHowjvuRAHUXQehu8S09lpKiU6ajnub6Ib9x2p59u2UVIrIzjG5Q0QK/KNT -aicLoCXATIFhnkdkUQDNWrm8aODORSorQ+F/1gr/1lvvgf1rs4a4DCpN+foHd7Wi -82xZxLyeH5hBqFop5Y6t4hnG0nqmhnfj47/AvyxnPiHUojhkgMT4DqSig3WTET36 -Ln3TQc4cwttReNCDd5wHB9RyGGu9DOCRYBckZE/dY77RAykM7raviSVX6R19ElYz -G6pM+Dix93UMovpn9OSZuuHIIQrFiQIzBBIBCAAdFiEE6FpfY7MdJMHr8NgcyRDZ -IiUS48cFAljj8OUACgkQyRDZIiUS48doLg//WAsI1RtnR0J+MHccBy/3I5BdfHON -bsNnpOcMrROv8+at4McukNo6spiR1ltxlfAcFO0PPM3neFyxYTBB6ZU8g5J8CRSa -BckeQ+bdvycByh6MBbt5vgjtAGO+/Bp9xaIBlOFXjtkUvhbLTr8ybMjhhkoH4qRk -nJ1bgIwbAhQqHRmYRFI6U1zlpF089uU5ontUMcYMfH9gf48oX5tKnwXkkobmw3qE -lPXMC7YRnBMQmbbEEN2JVgPMD+NXrqXRYtK0P/Oe2lhu5onZmFba1sPNmU2EMUqK -Os4I2MOlkIRmLKnnf41BUeVu/Dec0rPDhAvfEW2CB4Ad4F7dBCQztTlncLMrtYSI -c4iR8qoYmDZ1IOswodXmTgZQJlkwa7TrJjvfScqH79/Ny21H4YWz9GNm6Jg1l1yA -Tnbk9BmCixr8eFk8dZR7Ttl9bH3ntsqu1XvF6CKFQCVgR2YS/OGDnhX7S+9wQewX -pKSQG9HU/nPnxcl0odDU3YpIApOGxbRoDqVeofnyMISgpEMCec4T5yP6BOPPClRh -DQITYMfhpJ7FjM5/kIAWLksbLX4gmZzfqKliGvrrvtd4fC26UU1ZZtq/qx72yOBb -3Oh4JmZKd6P9qJF3wBOFeFDwIc1hrjRtNTH41cMBEGh6wA4TjYsGOz4uWFYpZmLQ -q9/bgxiHvOZXqR2JAhwEEAEIAAYFAlonYkUACgkQfiz/2w+KINpvsA//fliK4oAk -AwCTx4jmZ9l35ZgpFKzd3pGeL+yP1k1O2laSnqobK80I0SnF0azNJDkAkCgz81aO -eMcDVbrJWS9vbRN3+O3HRLEXte2QWWErnmm9JoDm7MHG3gVMGfO26MVCKFbhc15Y -lRkJLYkHLC2L5HL08+5DPLPNNvycZFovjJK5l5ofUazZV/1ddiRIqFtTwTmkGWQS -iXLpfLieSBdWyWu3X4oh0Ajt+Kx3d+v+oBER8llhseCpIzgXrMhkgksfpkrtrPlg -RpwhykVmVE17G/LKVPPw7g5xLbjKhSY9Gh7X3gt1HO5vHZTtbM+34goYZGTt8z0M -i119fx6fHHjl3Vg62TFoPWwPmczJOINMuSI1F/Wfqfgg9w1oKd6j5LA20znCkCNL -fLR5vm5LVBA4gjsNdFSCiUw1FRjWIiIGKV4fEXCFgG7VfwcpW0giRjkP3BoTm/59 -ib2t8jxPyEWr/uZptOUt1ImCd7vMSBM491RC+Rn/Ixto8EFlZzeOugFUJQBgGMWL -W680ClMvIPGStn09xep4lAsrt3rlm6+WEVsxF5IdZxhEvolaifyw2vGNvHds3JXd -U9ed6/F6AMgKtEPJX0l+CKrIxk+JU4anLkCp+tzWlY/r1RSf9PTxsqEdtlB2/QYy -4RZYOQJj9LrQKBo7DcfJQDaALZB2fXC94+aJAhwEEAEIAAYFAlq79QAACgkQFwrw -4pVCld8zYw/+ODPwxvvpzd85zFSnFCKyfQ8+vn3+GhAQXBivarcpWCi12Vr17u3+ -7b0oNvsXjCsNUygfhwB/LBz5OyIG2818W5BxtV7GlbcI+15AiT/SUGBbhs9D+UC7 -P7cq+0U/cI9iRxmXVDp347N85abjtSU2eoTL6iiZN22RPrCGY+OquuI7YnJd5pdP -JG5UGB0LvdnhDjcYnLA+sSgPxYf/wzSyplgjdBLyPY02CZ/7Z2v998k8Nqu8tpOU -UUrJm+EyUa9dxdIGMupMSE4FL6ffUaA48Sd/Y+yBM4DUqXvzH93VIjwhzAqDfZV8 -ZtLR9IGIM0Xfd/fDNBOxRIk6H/rnmDpa+DvDRNsClcoN2StLSnpM0LfA4DDcpjZx -GKKUsZI7wqGzwtHanRpShzka4B4liLFSWRmGOQhkJa1eoAugeaUP/Iw/VotBfpuo -kFZD8XeC+/BQ8P14xdvgYd/8KRM0kt39O45+1aiHjBowYczf2vHaQm2v+JBMkmPG -OtIcfFp2K1i5M6T/ZJfzmxRT4Cbw5FGDexWOHYqF1juGdYxs2w+K4qAsUVcttICX -E6w7nR45TIbRH/8ug+AzZSe5z0aDGS5vSLHfj3n4BbBN++meUfNr4cus+8lCsDML -oQDicfi4mQZgGpbPPE+jgFRWCDSnk7P1Ka/NZNWEUoX+2ZjsGh3yOQaJAjkEEAEI -ACMWIQSrQcHGiv1mjKBF6/hnOgPkwduSHwUCWrw0EwWDA8JnAAAKCRBnOgPkwduS -H9nXD/9YtfO6iPE/PT88Pny//hlmDwQBU6uqUOraIduxKx7tsEPIjKqAg10o3JUR -gjswL5OTsvGkjQ0iJyF52VLkDwS0f3UzVPI6GdU/HcLl+XJbFIFid9qVA+9cyL8/ -1ftgI/2cwWe9iassEcOPzVrGisFKJTKixP4uERDQkpOFZN1hnAIfKs+gFozFo+ir -25u6aL9joGkahWBVitcYAuaI52L1PPFjP4V6Enmtt7r7GyHNZq39e7ah9omwMOjQ -QtYZ5PfyP419wgCnVCTEX2fS/VEnZbVdlLzRrEtSHacdXQNPCE+JuHmuWcqvmH3u -27aivOQk6HqvwcPfRcl7615EDKMu/iDSNGfX7Uaw6Hio7xGXlE4DUSAG6gpWFdZ5 -afZmKxK74fxXK/Ft3IEJDCSnw5mEX98HnFa4BECmnPQtOPZ6JlzkK9J2INDZrBFT -z6EQbLBFHKuNk4KhUxiXYH1N1dheMATa4I9uljwnijaNn+93ojXGfnGxtR5vF8/7 -SUgTAqT2JgYRSaPsYXBnkni3mpv7o1Pfss5OWI3NUShCzwIcaJiimp9Unu5HzwE3 -IqpF96una5MUR3kmDbF2792grnsI2aDfweIhKR9p+mcM/KzAI9P9PQUpd4kDex2z -0giGhEuBcdvlOgI2rGa7J3V+sn7YYyDNfxkmyq7ic6pAIpiIP4kCVAQTAQgAPgIb -AwULCQgHAwUVCgkICwUWAgMBAAIeAQIXgBYhBGOxZoOEHOPcJdPG60Ia+iY4f5qO -BQJc2ecEBQkHh2pXAAoJEEIa+iY4f5qOdcAQAJMNi5d0JCqr1Q9KXiakz7b5GBjK -nRdDCQzv4kfM+ACFUIvPZiY3C87xnOeg/uPc/GMa9gDNAC/nLsgyM7WLhnpjYvzR -x+nkBtVeZO9TNgxTL5DAWR9AjSHeUOJl0ztHLeKTPQkkU5i4ONtkQiHaElbushxS -2xqgviSqiM7WMhGz0oNwwL57KITNAdSBHTu379s8qrtj4rs4o1poHVDan34iTTbv -UKNBZivZSsald/1eHL40NyFkeoWNj1IguiCgg6lwG61/7LOpGYtxw2ltGugyke+5 -vQWtmGDm5zU8e0ff1iOg0bpYe8f2WxGrvTsmSqmKF5iHOdVZHPfJK+KNrDleQE6N -YCMeVz8PO/7OaqCcpOlrvWD6/3h9xYWRtiRxlG3w9yDqzE1VLd5uJNAXloU8cb16 -wbqKtsypm0uhWxjtgNeMhUHmzleUxZifEGjO/f1O/8CE8v3KGLHOHeC+bA/rDqO1 -BuCc1Ze4Y+6qHofGJAW1UFXWMVLL36UHUX3bwQGe/aeWYzMnumDhXw8GiiqU+09v -W/NSyaxGowU/wRplJ9ltFh5/mhoMdsvMujl24hhtVqx62XaSRDgApBbL1jSAXCVL -GQFbgv3oKcK8/teGt8L9VC50T2857OTEHmKWxbpjSVdMisoAW01es8Z893kKznCl -n81WEtBCVzeRPTqyiQI9BBMBCAAnBQJXYIMtAhsDBQkFo5qABQsJCAcDBRUKCQgL -BRYCAwEAAh4BAheAAAoJEEIa+iY4f5qO7D4P/iLkTPeUIbKWDtTKKDwCezY3y17q -mCXu1WexsHhzfONilYTuZ32PR4SgEz+40/HuPaFH+dZdm+bMvrIpyoYJwbrBm5j7 -4H10GxqaYHbG+Gw/YRT6cckVrI6n5u5JAh6mTcaci/RsVysfDYua52A1g4+FX34H -lo8+RKNtExh+HLV4eU0EzA3Rw4R0au9tbO/DGwQzKswxnYLRyVXq51GVco0TFWAC -+ITQoLHrLt3u1skRjFEOuxlfoWknppD4bdWb4sjozcaNCA32hODOc7p+oX9MOcF8 -WXB5kQv/WFHvZ0sh6a9cZ3RsZTUFSJEN/DO9/GYefGy83w2odhJvgmKOkta+Qxnr -wQfTvksSAY+eykeThOJ3+VJortK/FxPQ+xQqWylE2T1HCWda1Ym923v6PrG+ZmH4 -+YhCZGodSbLN4wcvRJqoxefGRfyv9wDYYeDq9rmfwOdd01i3o7poXdSEKCRC/IjE -l8BUlEk3/LrORiIWxFMHU5jIZNgdwwOrtzROGoo7i2+WH3EpygLVfdi5OrrDbUXt -iJYH2hWyN12v1nH2iPJJ4LKpz6IsbeZhd15AQj+n2H8vU8LCJ2ki74gKM4znG9UT -2e5zrzfs8LsxH9f5c7VkuxP10n+w8ARb8+sYEzMrxElSubIqbamPVVlIUqYbLEyf -fAJA15FDH5QFUk/riQGzBBABCgAdFiEEc7/Nj/faCETeAwgOqtCvQ36ckk4FAlyi -2SYACgkQqtCvQ36ckk4D5gv/UZpPvL0znniFqBKfTzA0FH2ZO9wxRijEH4Rf5dl/ -mCesGrCzdX6amOURkCOnopzScqKEhTRAnA56zioyydIZqXnQFMNC44X0WyWUDnSw -x8eL+gKIm5VTtARODsAsKJB4Ce0qTP5C34EQKXnd6gEbXBWQdbfo3QvLsenIuKyx -lqcBZ1PCL8zC8fUVM6GkXd37uoOygQDV3CnN2NRpClAHVrWK3NJ0vyp/GiP2x2vT -EJcC02BskEtu4F3UkYyUXHxVBgWw5nKmpLQNoV28VkFoL0qzIxNg7K7xYQ0UK6rR -GB96eJpfw1/evEj2GHuTOxz1tEpn5PnBDuOQPM0xYWfwuteZ07cNghhck0Q1wtkA -6uDK15IL+BkuHLEIu1VTOuGUxv5A/yS265oYLS62J5eexYVPNHrYhSi2hVcuhRPG -bPBG3SvbcNcAWKMv/RqvzwOe+hEpGmYxH3AtomzQ1qWKzNndPSWHybrVT1zlYOIT -YqAMnoh0cbc0PlGLAgkVLltxiQGcBBABCgAGBQJcyiCvAAoJEPV9PyZefnCSf0kL -/RDFOk2RDH33+M0HEGqgRXZQu/ZaCbd7MlhmI3eziDOfK7acZNOfC2Z2SAI0jxs2 -nGACRbusgCayDLAFP7ivTMGkajNCf2AYNTM9cF34WV30JcBL9DjUGhro2LyEhSJW -I1UzS6rTMVj179wkpRh5RPIWtsmF5Hh5cXpQN1cC7Ve9HAyt/s48zebLYUyEkYl9 -qhaFZSfotiNnnKDeMck+gv64wgzg7uLa/PYyfBXF/dyWlU5SjrZFh9Cgl8wQsrbv -+Jn8EeGx/xCpe37nR2nr61N0DHj/yluKnqQhrBiqv7tJiWBgoQD0PP18d4ZdjJsg -YcwJygBsmoFEIwlstnITuGHw2aDpRjptm81OSvitRk0s6un3U2Zpx5fd5tP0KnYy -Y4f2v+r4UA21rERr1uGig+8ahG1d0d7d3u3g41LBg1sAxw0t59Yk8jMNhW+Ht91R -E8vhrDlvaA/Tk/6zZvsDsL22G8l/+KIlERJtE5WT1giS0y5+PZ6y2GvwYctrnLz7 -uIkCMwQQAQoAHRYhBIRf1V3aaw/ODACEUkInKVcmiz/KBQJecqOwAAoJEEInKVcm -iz/KaloP+wco5vmBB8/HLInGuGZqRyWytVbWzGdSFJWgLCMdpNBmH9LRaAQx0/Zi -hbTL67n1mkn9a3UYCY7N8flaTmI4BzjjxDopRx7ttck/exTJ55v01m1l6iLpUMdE -JpyJgBEHCIqrnSFqCFrXwUYD1DZwN2DqLBQH7rm0sMvaDsOi6vaCQ1hkv2+pD/4V -2pRl6zWDUtK7wxFVhQs/0hW+Y0SqUQRnsySWw7qeBeL8PC85rk49meawK37yMfmA -WhmPXcrHTbs2BDISdap+ignB2MreVG7kHg12Nsr7ijvYzK5mfCVb513QvAQ5CTTf -Cji/86OFFsGWIkJAFvl9O2ncx74SGLzklzd9sWLF3APwQee4pbksrvUZ4WPUEHKM -B/1nd5brHPK2QlEg+iV6cuX5cav8W6L85eQtzEY9WyBQP6B2C4TtDqvYXSwEPykO -8SbjuCqZBjSQwRjt05NLzWq6p3I7H4kDlUPBqUdcO8c/WERt7HsrqhJ6vc074cXj -HI5T33WWSCnA2w/CoqlAflpk2zw1tuPXr1EK3+B9M9JE1b1AR60UwUr1Byk0yhH3 -cxnxunOYVct8z3tJYIL9XZAU6ujZDpcGELmYVYRmcspXj20ZMCuBssEa27ZpzeWt -VhGb9jJMrIPPaXQC1d4QRfSeEwnxXYugMwYoQLn4Qg/HiDr9dCXIuQINBFdggy0B -EACdzNbf4pM94IzRCyk/6lOzudY517Zii+hKReXDs0YqYhRwC7WVcbI4CRXJCg3Z -ZvGTCPYo5mXtx0Lb1x7GMP5tf8ytbfATENk7Q7ZHg/AnBWyBA4DxjDcMPQdKBA6d -bhmaFawfRVZWyx+wZRlVJzjX/YcJ0X5L9me54GqejgBnW39lyEHsLmONbZbsC3sA -eqpisMZgQ06jX+2ShSzVDTvkyhWWPkATRaddsGhem5lKWSOeIL3lzSwhlcidD9sa -UhBbZsnFrpBVKVK8G2DcwWeIrQg4u1cvSeP66OjVvH10khfwO3M5bZMHjW02jbfw -8wB8Ad3o9GetxGblnOG7MMwdpNY/lbcJ3IpkIAsEPptRqNG+26V8AQSADDk5iJmv -vzMy/u3uNJrxTVtcy2m2seRoeF1oAMJMt3suKYyaBBNNKqnKbQSd/K44r31vB6/K -45ecpoZo2ZFRV5eCwTuOUMynV0p2Aq8AQlkKyDwfuzdZmUyqioYXy/ZzqqkppBI6 -bsiTU4CpdS8lHWPO7oIQOzvLlWrwjtE5800NBw4AE7g9+IxgFPZdbFWaGkyAL/kC -6zWMlEROogNOiDHsWmMZrSXVAGJtVOOLlkxI/o0jBFKNK5hDqVzV5S9xRTakZVUc -Q7Bed75/bz8MnK3NFEOKMHvx32vItsd/chXK5XjU0g2psQARAQABiQI8BBgBCAAm -AhsMFiEEY7Fmg4Qc49wl08brQhr6Jjh/mo4FAl9dIoAFCQnd0tMACgkQQhr6Jjh/ -mo6BAQ/9GJ3MQnuwwMVSTmNRxXRHO0kpESWKlEEGgyUDAo3Sl4ee4dHq/2cBuP9+ -8X3Lk0EA1Ziid3nkuWy9btXoOdvQ5QA+YzlVG2cavEST0EMpcblafZPnrSyF+S3C -kU28kkG3CK2GZIsCAKTGV2gvZWwlfA8B0MaOMhLYZ7cwBG2a86QoB/6iiKyIIv7H -c/USNda3qTCSW7szOrB/6PM0ljxZN0X/j5LA13gtbmNBMVBuGJOA/kkQCe6djbeW -oggmU0fwl6Sw1+g81zgkMTQK177Hrs5kDKL1Fs1As+egDKXj2LMPceH4OcfL4pl8 -Oiz55eA+E2LBhqiQ18zFh2jnqOyGLQqGJSDXF5rGEmtRD06K/NVjCQSCCQ55KZid -uMzi7+tcKeWliYQLhq4UCXl+Tf2ju54YcspIi4TS1sV5absOd+dInuw0e2+lt/xC -Bel4mt/psVRp0mHymyrYVSnA45KQBZUvgdR0C9e+Lgz9w1xYMpUk1KgqjIzkcbjy -7KKuUgU3S8cgAhzjKwBuZf4eFB2JxxfDJ8q4RNeIOm/z3ue/In37rf88zBPqZ3OZ -VImxDMd/Nxw48hEF5AEi/i8P1xV3L8Fcz1jpczfy/pdi/6vPFME+QBAkDdX6iX+v -jIcrIKo/OUeeR81r1se/OX9j1fWonr9MDbhR0DvoYSJpXzjbLx8= -=MuTV ------END PGP PUBLIC KEY BLOCK----- - -GPG keys of Eric Blake ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.10 (GNU/Linux) -Comment: Public key at http://people.redhat.com/eblake/eblake.gpg - -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 -=FC1k ------END PGP PUBLIC KEY BLOCK----- - -GPG keys of Bernhard Voelker ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v2 - -mQENBFPirzMBCACyzYldTjQ4ufFOkByY5Nn5USb5GFoL48nWBwNHjd9KUbtRRNlQ -iPNKd6hKGvd3BGi5aoFKA4ytfRk6jbAbW3jVb3R8wYaV08mOy4KVEKxqN4bxsXlM -jNChXVR+rtKDmfI+oPTL+cPH2X6gW4W02IRbVw0uUhNm6zEedC/gNrY/mTlf1enZ -46jxZ7BTUZaG+kx38UMISIMBzSzLRtdkwgmHj4jS3p1fF2cwRqLclIfMjKGpbNFP -EXeXKWrCLcqHw78795eAR9q0YvrDkfInGdDBwfb3VM4NdulwIFzvYZMSXvSbbyPL -B5YkHU5aAWQHUse4WlfT5ccDpbzUYldRAvF9ABEBAAG0K0Jlcm5oYXJkIFZvZWxr -ZXIgPG1haWxAYmVybmhhcmQtdm9lbGtlci5kZT6JATkEEwECACMFAlPirzMCGwMH -CwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRBGUC73lpFxle5wCACCdbs0QaJ0 -vR3Sff2cKdTk41rUq3YfWngsR///IOU0C5DdkePmCnJE/lUsUy0LRTxcUDLxQR+x -QHU8ssRT0JUO9726dI3miy36UdsgmBYaOtLvQcidGmW1R7o0PYYf04+TFtyqKgng -OUBPpMgR6o4UsQxy/OD4bN1WDqOgIjL+D/qJpkKmgp6L6+hhaBCpiOFKRmmV7YyQ -3SqVlfQNiHs5ZtkRnXpIjgZARV+GllKucI17bO0CGmTJZ1tstVy0+W3DQT1lbBkT -Tc++5LONM99D3jjn23l1ocOpfolR53F7I4cb2RNfT23v1I59RH37lB9wMOqrKj0U -jYAC2YoPGQ3BuQENBFPirzMBCADXLWWpQihBldY6reca8ZKdc3T9qXEOa3akE3DW -KztIBmNJhtYOjmpLYajQTkGa7UoJTnbmZE2Rn6ZEoNnvb0gcFNAIcY95KOI+bjOR -8HEgh4cx2REXh6L6olIgyXqt/KFusE4wtVZAFxZl+30HzN6nD+1HvrjXxPJRX6Ms -IYOYyyX9/6OofwJK6QHODYGp8WL2olHDnmsXg4AT6Wlr7qKpKrQELlcFR4xkvdmg -L/Ghw/tK0yJTxMIcewCCZWLPOXRmFRbvAadZWPAgVsJ63siNyUlVnVMSzDgTJl+s -l/DMabXpqrJQx3/1Yy6mTaDs3XZT/wmBKaTLXx/LByaPxQQ7ABEBAAGJAR8EGAEC -AAkFAlPirzMCGwwACgkQRlAu95aRcZWVPwgAqZT6iTXkoP37wYb41323RzhBcJ8J -Sk4cyBDBUXX0lMrM3qhiClKG7phpxVdu817Gwc6Hsecg7FfjQAV8MHQ0ZFeEFdk3 -b2rKBqfsStc+h49/xF3Fb+ifCzR9qeQF82fMSxkg18++7hMcHCMO/hPZ/Q0xRi+l -rSr2QKDJQuLzSyVU14TxrCkevZjEhtmaVNvcJlJzCbiBXee9Fpc5jITUXPFG8E8d -xqo1n+duOyIMgozrAnzP7X5V/Ob/Ozf/aGGX9+JdinyfCX18nWcHALKMU/36Eua/ -ylalf/2c2YkBp9KCLVmGgPkUgW52EeRPgroIsiwu+rwCSV6ZUyCJ+OymCg== -=d/K6 ------END PGP PUBLIC KEY BLOCK----- diff --git a/findutils.spec b/findutils.spec index 9af5035..b1b72cf 100644 --- a/findutils.spec +++ b/findutils.spec @@ -1,35 +1,37 @@ Summary: The GNU versions of find utilities (find and xargs) Name: findutils -Version: 4.10.0 -Release: 6%{?dist} +Version: 4.5.14 +Release: 7%{?dist} Epoch: 1 -License: GPL-3.0-or-later -URL: https://www.gnu.org/software/findutils/ - -Source0: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz -Source1: https://ftp.gnu.org/gnu/%{name}/%{name}-%{version}.tar.xz.sig -# From https://savannah.gnu.org/project/release-gpgkeys.php?group=findutils&download=1 -# which is linked as project keyring on https://savannah.gnu.org/projects/findutils -Source2: findutils-keyring.gpg +License: GPLv3+ +Group: Applications/File +URL: http://www.gnu.org/software/findutils/ +Source0: ftp://alpha.gnu.org/gnu/findutils/%{name}-%{version}.tar.gz # do not build locate -Patch1: findutils-4.5.15-no-locate.patch +Patch1: findutils-4.4.0-no-locate.patch -# add -xautofs option to not descend into directories on autofs file systems -Patch2: findutils-4.4.2-xautofs.patch +# fix a crash triggered by recursive bind mount (#1188498) +Patch2: findutils-4.5.14-fts-cycle.patch + +# add a new option -xautofs to find to not descend into directories on autofs +# file systems +Patch3: findutils-4.4.2-xautofs.patch # eliminate compile-time warnings -Patch3: findutils-4.5.13-warnings.patch +Patch4: findutils-4.5.13-warnings.patch -# test-lock: disable the rwlock test -Patch4: findutils-4.6.0-test-lock.patch +# eliminate failure of gnulib tests on little-endian PowerPC (#1083145) +Patch5: findutils-4.5.12-ppc-gnulib-tests.patch -# implement the -noleaf option of find (#1252549) -Patch5: findutils-4.6.0-leaf-opt.patch +# make the test-suite ready for Python 3 +Patch6: findutils-4.5.14-python3.patch -# fix find not obeying -ignore_readdir_race in symlink_loop (#2232278) -Patch6: findutils-4.9.0-ignore_readdir_race-symlink_loop.patch +# enable leaf optimization for XFS and NFS (#1252549) +Patch8: findutils-4.5.15-leaf-opt.patch +Requires(post): /sbin/install-info +Requires(preun): /sbin/install-info Conflicts: filesystem < 3 Provides: /bin/find Provides: bundled(gnulib) @@ -37,15 +39,9 @@ Provides: bundled(gnulib) BuildRequires: automake BuildRequires: dejagnu BuildRequires: gettext-devel -BuildRequires: gcc -BuildRequires: git BuildRequires: libselinux-devel -BuildRequires: make BuildRequires: texinfo -# For gpg verification of source tarball -BuildRequires: gnupg2 - %description The findutils package contains programs which will help you locate files on your system. The find utility searches through a hierarchy @@ -58,241 +54,69 @@ You should install findutils because it includes tools that are very useful for finding things on your system. %prep -%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' -%autosetup -N -S git +%setup -q +rm -rf locate +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch8 -p1 -# drop the source code of locate -git rm -q -r locate -git commit -q -m "drop the source code of locate" - -# remove ignored files from git and mark them as ignored -tee -a .gitignore << EOF -*~ -Makefile.in -/aclocal.m4 -/autom4te.cache -/build -/configure -/doc/find.info* -/doc/stamp-vti -/doc/version.texi -EOF -git rm -q -r --cached . -git add --all . -git commit -m "remove ignored files from git" - -# apply all patches -%autopatch - -# needed because of findutils-4.5.15-no-locate.patch -autoreconf -fiv -git add --all . -git commit -q -m "after invocation of autoreconf" +# needed because of findutils-4.4.0-no-locate.patch +autoreconf -iv %build -mkdir build -cd build -%global _configure ../configure %configure -%make_build +# uncomment to turn off optimizations +#find -name Makefile | xargs sed -i 's/-O2/-O0/' + +make %{?_smp_mflags} %check -make %{?_smp_mflags} check -C build V=1 +make check %install -%make_install -C build +make install DESTDIR=$RPM_BUILD_ROOT -rm -f %{buildroot}%{_infodir}/dir +rm -f $RPM_BUILD_ROOT%{_infodir}/dir %find_lang %{name} +%post +if [ -f %{_infodir}/find.info.gz ]; then + /sbin/install-info %{_infodir}/find.info.gz %{_infodir}/dir || : +fi + +%preun +if [ $1 = 0 ]; then + if [ -f %{_infodir}/find.info.gz ]; then + /sbin/install-info --delete %{_infodir}/find.info.gz %{_infodir}/dir || : + fi +fi + %files -f %{name}.lang +%{!?_licensedir:%global license %%doc} %license COPYING %doc AUTHORS NEWS README THANKS TODO %{_bindir}/find +%{_bindir}/oldfind %{_bindir}/xargs %{_mandir}/man1/find.1* +%{_mandir}/man1/oldfind.1* %{_mandir}/man1/xargs.1* %{_infodir}/find.info* -%{_infodir}/find-maint.info.* +%{_infodir}/find-maint.info.gz %changelog -* Wed Jul 23 2025 Fedora Release Engineering - 1:4.10.0-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Jan 16 2025 Fedora Release Engineering - 1:4.10.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jul 17 2024 Fedora Release Engineering - 1:4.10.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Tue Jul 02 2024 Lukáš Zaoral - 1:4.10.0-3 -- fix autofs patch when stat was not performed (RHEL-43285) - -* Tue Jun 04 2024 Lukáš Zaoral - 1:4.10.0-2 -- enable LTO on ppc64le - -* Mon Jun 03 2024 Lukáš Zaoral - 1:4.10.0-1 -- rebase to latest upstream version (rhbz#2284216) -- add GPG tarball verification - -* Wed Jan 24 2024 Fedora Release Engineering - 1:4.9.0-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 1:4.9.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Tue Sep 12 2023 Lukáš Zaoral - 1:4.9.0-6 -- fix find not obeying -ignore_readdir_race in symlink_loop (rhbz#2232278) - -* Wed Jul 19 2023 Fedora Release Engineering - 1:4.9.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Wed Apr 12 2023 Lukáš Zaoral - 1:4.9.0-4 -- migrate to SPDX license format - -* Thu Jan 19 2023 Fedora Release Engineering - 1:4.9.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Jul 21 2022 Fedora Release Engineering - 1:4.9.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Wed Feb 02 2022 Kamil Dudka - 1:4.9.0-1 -- new upstream release - -* Mon Jan 24 2022 Kamil Dudka - 1:4.8.0-6 -- make findutils build on 32bit x86 - -* Thu Jan 20 2022 Fedora Release Engineering - 1:4.8.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Jul 21 2021 Fedora Release Engineering - 1:4.8.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Tue May 25 2021 Florian Weimer - 1:4.8.0-3 -- Rebuild with new binutils to fix ppc64le corruption (#1960730) - -* Tue Jan 26 2021 Fedora Release Engineering - 1:4.8.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Sat Jan 09 2021 Kamil Dudka - 1:4.8.0-1 -- new upstream release - -* Mon Jul 27 2020 Fedora Release Engineering - 1:4.7.0-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Fri Jul 24 2020 Kamil Dudka - 1:4.7.0-6 -- disable -flto on ppc64le to make test-float pass (#1789115) -- do not compile with -D__SUPPORT_SNAN__ (#1294016) - -* Mon Jul 13 2020 Tom Stellard - 1:4.7.0-5 -- Use make macros -- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro - -* Fri Apr 17 2020 Kamil Dudka - 1:4.7.0-4 -- simplify leaf optimization for XFS (#1823247) - -* Tue Feb 11 2020 Kamil Dudka - 1:4.7.0-3 -- make upstream test-suite work with root privileges (#1799064) - -* Tue Jan 28 2020 Fedora Release Engineering - 1:4.7.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Fri Aug 30 2019 Kamil Dudka - 1:4.7.0-1 -- new upstream release - -* Thu Jul 25 2019 Fedora Release Engineering - 1:4.6.0-24 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Wed Apr 24 2019 Björn Esser - 1:4.6.0-23 -- Remove hardcoded gzip suffix from GNU info pages - -* Thu Jan 31 2019 Fedora Release Engineering - 1:4.6.0-22 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Mon Nov 05 2018 Kamil Dudka - 1:4.6.0-21 -- fix programming mistakes detected by static analysis - -* Fri Jul 13 2018 Fedora Release Engineering - 1:4.6.0-20 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Fri Apr 20 2018 Kamil Dudka - 1:4.6.0-19 -- fix crash caused by mistakenly enabled leaf optimization (#1558249) - -* Tue Mar 06 2018 Kamil Dudka - 1:4.6.0-18 -- fix build failure with glibc-2.28 - -* Mon Feb 19 2018 Kamil Dudka - 1:4.6.0-17 -- add explicit BR for the gcc compiler - -* Mon Feb 12 2018 Kamil Dudka - 1:4.6.0-16 -- import gnulib's FTS module from upstream commit 281b825e (#1544429) - -* Wed Feb 07 2018 Fedora Release Engineering - 1:4.6.0-15 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Wed Aug 02 2017 Fedora Release Engineering - 1:4.6.0-14 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 1:4.6.0-13 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Thu Mar 02 2017 Kamil Dudka - 1:4.6.0-12 -- drop ppc64le workaround no longer needed (#1417753) - -* Fri Feb 10 2017 Fedora Release Engineering - 1:4.6.0-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Mon Jan 30 2017 Kamil Dudka - 1:4.6.0-10 -- avoid using broken memcmp() code that gcc generates on ppc64le (#1417753) - -* Fri Jan 27 2017 Kamil Dudka - 1:4.6.0-9 -- add explicit BR for git as we use it in %%prep - -* Fri Sep 16 2016 Kamil Dudka - 1:4.6.0-8 +* Fri Jun 24 2016 Kamil Dudka - 1:4.5.14-7 - disable leaf optimization for NFS (#1299169) -* Fri Jun 24 2016 Kamil Dudka - 1:4.6.0-7 -- bump release to preserve upgrade path f24 -> f25 - -* Fri Jun 17 2016 Kamil Dudka - 1:4.6.0-6 -- use %%autosetup to create a git repo in %%prep -- use out of source build -- avoid SIGSEGV in case the internal -noop option is used (#1346471) - -* Tue May 31 2016 Kamil Dudka - 1:4.6.0-5 -- make sure that find -exec + passes all arguments (upstream bug #48030) - -* Mon Apr 18 2016 Kamil Dudka - 1:4.6.0-4 -- clarify exit status handling of -exec cmd {} + in find(1) man page (#1325049) - -* Wed Feb 03 2016 Fedora Release Engineering - 1:4.6.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Wed Jan 06 2016 Kamil Dudka - 1:4.6.0-2 -- prevent test-isinf from failing with gcc-5.3.1 on ppc64le (#1294016) -- prevent mbrtowc tests from failing (#1294016) - -* Tue Dec 29 2015 Kamil Dudka - 1:4.6.0-1 -- new upstream release -- drop oldfind(1) no longer supported by upstream - -* Fri Dec 25 2015 Kamil Dudka - 1:4.5.16-1 -- new upstream release - -* Mon Dec 21 2015 Kamil Dudka - 1:4.5.15-2 +* Tue Dec 29 2015 Kamil Dudka - 1:4.5.14-6 - enable leaf optimization for XFS and NFS (#1252549) -* Sat Dec 19 2015 Kamil Dudka - 1:4.5.15-1 -- new upstream release - -* Tue Jul 07 2015 Kamil Dudka - 1:4.5.14-7 -- make the test-suite ready for Perl 5.22 (#1239501) - -* Wed Jun 17 2015 Fedora Release Engineering - 1:4.5.14-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - * Wed Mar 18 2015 Kamil Dudka - 1:4.5.14-5 - make the test-suite ready for Python 3 diff --git a/plans/ci.fmf b/plans/ci.fmf deleted file mode 100644 index c1627f9..0000000 --- a/plans/ci.fmf +++ /dev/null @@ -1,5 +0,0 @@ -summary: Basic smoke test -discover: - how: fmf -execute: - how: tmt diff --git a/sources b/sources index ac8f2fb..531d9a8 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (findutils-4.10.0.tar.xz) = b8b683d21cd26c6da4f41c56e83cadbda4780f8610a2bbd4b4e34bb1f339c3209721974b03e076d5eef0331fd876d947b398197aad37c29bbcc2e0405c641b34 -SHA512 (findutils-4.10.0.tar.xz.sig) = a835153a0671309021be187bf78afee58d9682acb40545aaa9dd187f0ebdea0cfa5583bd03f363243633ea056ddb0a7a6603987ab5e34a608426cb4265ac6d8f +a8a8176282fd28e8d1234c84d847fa66 findutils-4.5.14.tar.gz diff --git a/tests/smoke/Makefile b/tests/smoke/Makefile deleted file mode 100644 index a68f70e..0000000 --- a/tests/smoke/Makefile +++ /dev/null @@ -1,63 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /CoreOS/findutils/Sanity/smoke -# Description: Smoke test for find and xargs. -# Author: Branislav Nater -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2014 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# 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. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/CoreOS/findutils/Sanity/smoke -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - test -x runtest.sh || chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Branislav Nater " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Smoke test for find and xargs." >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 5m" >> $(METADATA) - @echo "RunFor: findutils" >> $(METADATA) - @echo "Requires: findutils" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/smoke/PURPOSE b/tests/smoke/PURPOSE deleted file mode 100644 index 87a1ce1..0000000 --- a/tests/smoke/PURPOSE +++ /dev/null @@ -1,3 +0,0 @@ -PURPOSE of /CoreOS/findutils/Sanity/smoke -Description: Smoke test for find and xargs. -Author: Branislav Nater diff --git a/tests/smoke/main.fmf b/tests/smoke/main.fmf deleted file mode 100644 index 7def608..0000000 --- a/tests/smoke/main.fmf +++ /dev/null @@ -1,12 +0,0 @@ -summary: Smoke test for find and xargs. -description: '' -contact: Branislav Nater -component: - - findutils -test: ./runtest.sh -framework: beakerlib -recommend: - - findutils -duration: 5m -extra-summary: /CoreOS/findutils/Sanity/smoke -extra-task: /CoreOS/findutils/Sanity/smoke diff --git a/tests/smoke/runtest.sh b/tests/smoke/runtest.sh deleted file mode 100755 index 4ce0502..0000000 --- a/tests/smoke/runtest.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /CoreOS/findutils/Sanity/smoke -# Description: Smoke test for find and xargs. -# Author: Branislav Nater -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2014 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# 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. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="findutils" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory" - rlRun "pushd $TmpDir" - rlRun "touch \"file with spaces\"" 0 - rlRun "mkdir dir" 0 - rlRun "touch dir/file1" 0 - rlPhaseEnd - - rlGetTestState && { - rlPhaseStartTest - rlRun "find . -name \"file*\" -type f | tee output | wc -l > wcout" 0 - cat output - rlAssertGrep 2 wcout - rlRun "find $TmpDir -mindepth 1 -type d | tee output | wc -l > wcout" 0 - cat output - rlAssertGrep 1 wcout - rlRun "find $TmpDir -name \"file*\" -print0 | xargs -0 ls -l | tee output | wc -l > wcout" 0 - cat output - rlAssertGrep 2 wcout - rlPhaseEnd - } - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rm -r $TmpDir" 0 "Removing tmp directory" - rlPhaseEnd -rlJournalEnd -rlJournalPrintText diff --git a/tests/xautofs/Makefile b/tests/xautofs/Makefile deleted file mode 100644 index d273b6f..0000000 --- a/tests/xautofs/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Makefile of /CoreOS/findutils/Sanity/options/xautofs -# Description: Check xautofs option -# Author: Petr Splichal -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2009 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# 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. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -export TEST=/CoreOS/findutils/Sanity/options/xautofs -export TESTVERSION=1.0 - -BUILT_FILES= - -FILES=$(METADATA) runtest.sh Makefile PURPOSE - -.PHONY: all install download clean - -run: $(FILES) build - ./runtest.sh - -build: $(BUILT_FILES) - chmod a+x runtest.sh - -clean: - rm -f *~ $(BUILT_FILES) - - -include /usr/share/rhts/lib/rhts-make.include - -$(METADATA): Makefile - @echo "Owner: Branislav Nater " > $(METADATA) - @echo "Name: $(TEST)" >> $(METADATA) - @echo "TestVersion: $(TESTVERSION)" >> $(METADATA) - @echo "Path: $(TEST_DIR)" >> $(METADATA) - @echo "Description: Check xautofs option" >> $(METADATA) - @echo "Type: Sanity" >> $(METADATA) - @echo "TestTime: 10m" >> $(METADATA) - @echo "RunFor: findutils" >> $(METADATA) - @echo "Requires: autofs findutils" >> $(METADATA) - @echo "Priority: Normal" >> $(METADATA) - @echo "License: GPLv2" >> $(METADATA) - @echo "Confidential: no" >> $(METADATA) - @echo "Destructive: no" >> $(METADATA) - @echo "Bug: 485672 529391" >> $(METADATA) - @echo "Releases: -RHEL3 -RHEL4" >> $(METADATA) - - rhts-lint $(METADATA) diff --git a/tests/xautofs/PURPOSE b/tests/xautofs/PURPOSE deleted file mode 100644 index e20bfd1..0000000 --- a/tests/xautofs/PURPOSE +++ /dev/null @@ -1,8 +0,0 @@ -PURPOSE of /CoreOS/findutils/Sanity/options/xautofs -Description: Check xautofs option -Author: Petr Splichal -Bug summary: [RFE] Modify find to be able to skip direct mapped autofs mounts -Bugzilla link: None - -Check that the new -xautofs option works as expected: make sure -find does not descend into directories on autofs filesystems. diff --git a/tests/xautofs/main.fmf b/tests/xautofs/main.fmf deleted file mode 100644 index 0cedf13..0000000 --- a/tests/xautofs/main.fmf +++ /dev/null @@ -1,21 +0,0 @@ -summary: Check xautofs option -description: | - Bug summary: [RFE] Modify find to be able to skip direct mapped autofs mounts - Bugzilla link: None - - Check that the new -xautofs option works as expected: make sure - find does not descend into directories on autofs filesystems. -contact: Branislav Nater -link: - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=485672 - - relates: https://bugzilla.redhat.com/show_bug.cgi?id=529391 -component: - - findutils -test: ./runtest.sh -framework: beakerlib -recommend: - - autofs - - findutils -duration: 10m -extra-summary: /CoreOS/findutils/Sanity/options/xautofs -extra-task: /CoreOS/findutils/Sanity/options/xautofs diff --git a/tests/xautofs/runtest.sh b/tests/xautofs/runtest.sh deleted file mode 100755 index 0a13995..0000000 --- a/tests/xautofs/runtest.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -# vim: dict=/usr/share/rhts-library/dictionary.vim cpt=.,w,b,u,t,i,k -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# runtest.sh of /CoreOS/findutils/Sanity/options/xautofs -# Description: Check xautofs option -# Author: Petr Splichal -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# -# Copyright (c) 2009 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing -# to use, modify, copy, or redistribute it subject to the terms -# and conditions of the GNU General Public License version 2. -# -# 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. -# -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -# Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 - -PACKAGE="findutils" - -MasterConf="/etc/auto.master" -DirectConf="/etc/auto.direct" - -MountDir="/mnt/findutils" -AutomountDir="$MountDir/etc" -RegularDir="$MountDir/regular/directory/master" - -rlJournalStart - rlPhaseStartSetup - rlAssertRpm $PACKAGE - rlAssertRpm "autofs" - rlRun "set -o pipefail" - - # create dirs & back up - rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" - rlRun "mkdir -p $RegularDir" 0 "Creating regular directory" - rlRun "rlFileBackup $MasterConf" - - # set up autofs - rlRun "echo '/- /etc/auto.direct' > $MasterConf" \ - 0 "Setting up autofs master map" - rlRun "echo '$AutomountDir localhost:/etc' > $DirectConf" \ - 0 "Setting up autofs direct map" - - # get fstype of /etc - fs="$(df --output=fstype /etc/ | tail -n1)" - - rlRun "pushd $TmpDir" - rlPhaseEnd - - rlPhaseStartTest "Without -xautofs option" - rlRun "rlServiceStart autofs" 0 "Starting autofs" - rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" - rlRun "find $MountDir -noleaf -name '*master*' | tee filelist" - rlAssertGrep "$RegularDir" "filelist" - rlAssertGrep "$MountDir$MasterConf" "filelist" - rlAssertGrep "$AutomountDir.*$fs" "/proc/mounts" - rlPhaseEnd - - rlPhaseStartTest "With -xautofs option" - rlRun "rlServiceStart autofs" 0 "Starting autofs" - rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" - rlRun "find $MountDir -xautofs -noleaf -name '*master*' | tee filelist" - rlAssertGrep "$RegularDir" "filelist" - rlAssertNotGrep "$MountDir$MasterConf" "filelist" - rlAssertNotGrep "$AutomountDir.*$fs" "/proc/mounts" - rlPhaseEnd - - rlPhaseStartCleanup - rlRun "popd" - rlRun "rlFileRestore" - rlRun "rlServiceRestore autofs" - rlRun "umount --all --types autofs" - rlRun "rm -r $TmpDir $DirectConf $MountDir" 0 "Removing tmp files" - rlPhaseEnd -rlJournalPrintText -rlJournalEnd