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 147b952..0da4306 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,3 @@ diffutils-2.8.1.tar.gz /diffutils-3.6.tar.xz /diffutils-3.7.tar.xz /diffutils-3.8.tar.xz -/diffutils-3.9.tar.xz -/diffutils-3.10.tar.xz -/diffutils-3.11.tar.xz -/diffutils-3.12.tar.xz diff --git a/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch b/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch deleted file mode 100644 index bd3edc0..0000000 --- a/0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch +++ /dev/null @@ -1,85 +0,0 @@ -From 45a4762bf3241e7fb6a2e01d382791ae44236841 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Wed, 23 Apr 2025 11:34:20 -0700 -Subject: [PATCH] sdiff: pacify gcc -flto -Wmaybe-uninitialized - -* src/sdiff.c (edit): Portmanteauize two locals into one, which -arguably makes the code clearer, and anyway pacifies gcc -flto --Wmaybe-uninitialized with gcc (GCC) 15.0.1 20250329 (Red Hat -15.0.1-0) x86-64 (Bug#78019). ---- - src/sdiff.c | 19 +++++++++++-------- - 1 file changed, 11 insertions(+), 8 deletions(-) - -diff --git a/src/sdiff.c b/src/sdiff.c -index 5b1b162..15b8dce 100644 ---- a/src/sdiff.c -+++ b/src/sdiff.c -@@ -857,8 +857,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - { - for (;;) - { -- int cmd0; -- int cmd1; -+ int cmd; - bool gotcmd = false; - - while (! gotcmd) -@@ -867,8 +866,8 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - perror_fatal (_("write failed")); - ck_fflush (stdout); - -- cmd0 = skip_white (); -- switch (cmd0) -+ cmd = skip_white (); -+ switch (cmd) - { - case '1': case '2': case 'l': case 'r': - case 's': case 'v': case 'q': -@@ -882,12 +881,15 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - break; - - case 'e': -- cmd1 = skip_white (); -+ int cmd1 = skip_white (); - switch (cmd1) - { - case '1': case '2': case 'b': case 'd': case 'l': case 'r': - if (skip_white () == '\n') -- gotcmd = true; -+ { -+ gotcmd = true; -+ cmd |= cmd1 << UCHAR_WIDTH; -+ } - else - { - give_help (); -@@ -908,7 +910,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - if (feof (stdin)) - { - gotcmd = true; -- cmd0 = 'q'; -+ cmd = 'q'; - break; - } - FALLTHROUGH; -@@ -921,7 +923,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - } - } - -- switch (cmd0) -+ switch (cmd & UCHAR_MAX) - { - case '1': case 'l': - lf_copy (left, llen, outfile); -@@ -954,6 +956,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - if (! tmp) - perror_fatal (squote (0, tmpname)); - -+ int cmd1 = cmd >> UCHAR_WIDTH; - switch (cmd1) - { - case 'd': --- -2.48.1 - diff --git a/0001-sdiff-port-back-to-C17.patch b/0001-sdiff-port-back-to-C17.patch deleted file mode 100644 index c7fc16a..0000000 --- a/0001-sdiff-port-back-to-C17.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 686357a40ca038edc902276cb3b33f4757d8cfb2 Mon Sep 17 00:00:00 2001 -From: Paul Eggert -Date: Sat, 26 Apr 2025 12:54:06 -0700 -Subject: [PATCH] sdiff: port back to C17- - -* src/sdiff.c (edit): Do not use a label just before a statement. -Problem reported by Bruno Haible (Bug#78032). ---- - src/sdiff.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/sdiff.c b/src/sdiff.c -index 15b8dce..cc961c3 100644 ---- a/src/sdiff.c -+++ b/src/sdiff.c -@@ -880,7 +880,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - } - break; - -- case 'e': -+ case 'e':; - int cmd1 = skip_white (); - switch (cmd1) - { --- -2.48.1 - diff --git a/diffutils-3.12-cross-compiler-build-fail.patch b/diffutils-3.12-cross-compiler-build-fail.patch deleted file mode 100644 index c2cba1c..0000000 --- a/diffutils-3.12-cross-compiler-build-fail.patch +++ /dev/null @@ -1,30 +0,0 @@ -From d9083a4cc638cf9c7dfc3cc534a7c6b4debf50ab Mon Sep 17 00:00:00 2001 -From: Bruno Haible -Date: Thu, 10 Apr 2025 16:42:14 +0200 -Subject: strcasecmp: Support cross-compilation. - -Reported by Rudi Heitbaum in -. - -diff --git a/m4/strcasecmp.m4 b/m4/strcasecmp.m4 -index e40ee5d..eb4345d 100644 ---- a/m4/strcasecmp.m4 -+++ b/m4/strcasecmp.m4 -@@ -1,5 +1,5 @@ - # strcasecmp.m4 --# serial 2 -+# serial 3 - dnl Copyright (C) 2002-2025 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -57,7 +57,7 @@ int main () - gl_cv_func_strcasecmp_works=no - fi - ], -- []) -+ [:]) - ]) - ]) - --- -cgit v1.1 diff --git a/diffutils-3.12-sdiff-continue-break.patch b/diffutils-3.12-sdiff-continue-break.patch deleted file mode 100644 index 59fac2a..0000000 --- a/diffutils-3.12-sdiff-continue-break.patch +++ /dev/null @@ -1,65 +0,0 @@ -commit 80053ab7b57c1f0825deb4a22018dacfa62d7272 -Author: Paul Eggert -Date: Wed Apr 23 11:17:53 2025 -0700 - - sdiff: continue → break - - * src/sdiff.c (edit): Don’t use ‘continue’ when a simple - break from the switch will do. - -diff --git a/src/sdiff.c b/src/sdiff.c -index 7734a82..5b1b162 100644 ---- a/src/sdiff.c -+++ b/src/sdiff.c -@@ -872,13 +872,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - { - case '1': case '2': case 'l': case 'r': - case 's': case 'v': case 'q': -- if (skip_white () != '\n') -+ if (skip_white () == '\n') -+ gotcmd = true; -+ else - { - give_help (); - flush_line (); -- continue; - } -- gotcmd = true; - break; - - case 'e': -@@ -886,13 +886,13 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - switch (cmd1) - { - case '1': case '2': case 'b': case 'd': case 'l': case 'r': -- if (skip_white () != '\n') -+ if (skip_white () == '\n') -+ gotcmd = true; -+ else - { - give_help (); - flush_line (); -- continue; - } -- gotcmd = true; - break; - case '\n': - gotcmd = true; -@@ -900,7 +900,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - default: - give_help (); - flush_line (); -- continue; -+ break; - } - break; - -@@ -917,7 +917,7 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen, - FALLTHROUGH; - case '\n': - give_help (); -- continue; -+ break; - } - } - diff --git a/diffutils-3.12.tar.xz.sig b/diffutils-3.12.tar.xz.sig deleted file mode 100644 index 9816207..0000000 --- a/diffutils-3.12.tar.xz.sig +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN PGP SIGNATURE----- - -iQIzBAABCgAdFiEEFV0/xQDINEhtHupnf9n8ywAL7u4FAmf14TEACgkQf9n8ywAL -7u5tEg//YI75CvWhml5WPNESJWoNVcb+ak8K5g29sHXE5RW9ZuzvEjHAy2IGpkmG -QbSC2GA3s1BhjIvrm567Xvnz5Rdn4lultZygznL/+oD4PMoantux4dF6P4KcO7jG -KNPWBF0+/gue9KeJIx4tIGXjQ7g/aAxN/U7UukD5NELrF/4KAsFSWC0PA++taGyd -R+kZNl3IX3rci0m4vMXCZX+h1td39NinLuYueOqniZhN84+kjfKfLe+EOPmpdSNr -md25Ez5vcZ7p1meHHFIRhW1xnyF4FEC5H1ePv56wMlKShtflS2/hjmQadlo+9CQn -fnotq12Yi2BEDwn/wlB9t0J4wgGVbvJM5Ie8ggK74ys77JsXbAtaTeJvCYKI/3bF -D2Xt2gI2+Xdfm7zr9xXg4ygf/AqJ0Dc1Cx0hNpgV4BRgMUjKnyp1VgE7bDZn6R4w -W2YRXMsKJQp8NpAk5+XI5El3EYoMcPuI6OQs+b+e98wcGgeeOafWjWrUliIUDln6 -iTXtOBFebV0JtdSWdzNPrxT0+WbmdYSfP7qrqIgMrPHbp5cN7XjVPu6nky07N2RE -f4Q2Ny8KyCul8AskCNimYzGU0rsN1qQtDRSx2CR5ABYztwc/WY2KgXL9aGZ+eIfa -YRIpzush1GB5Bu50huAT2VCCqrk6VCg7v1vLfr3V/eszEUVhPZg= -=vkFD ------END PGP SIGNATURE----- diff --git a/diffutils-3.8.tar.xz.sig b/diffutils-3.8.tar.xz.sig new file mode 100644 index 0000000..a7b6567 --- /dev/null +++ b/diffutils-3.8.tar.xz.sig @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +iQIzBAABCgAdFiEEFV0/xQDINEhtHupnf9n8ywAL7u4FAmEHUX8ACgkQf9n8ywAL +7u4sHBAAqVMdOZrt6KAkAmtxPbTN93pZydq1TsIfDp1/1BWygy6LbVxyMY7SAB+k +WyhskuwlF+DhLwATUgfuqJTfXsEagw+JMlQpPAZAiyaNmOLOEGni7wLvx2qkQWz6 +3SbYSQUQUig9k6Ccnv0QyFpadKOkueyDJ6m5FWhXW9GbNaYT/dNSGQ4v67JjLvcY +e3wZKuRH01HdtNrQghLa/wdt7toCVe6hXA/D91up6zRZ3nDO9c6Zp09b2O/ssyrp +r20bQuK1xlXQGwvJAIi7wmyY+OkMxTXXP9g7OsXU/sYaxQBoPMSbfrC2B6vx8dqQ +DmEoSWuh9n/2/aF4OzDa3gaYdRdlRZyeM/DioCSUbrhOU1xXOC4Lh0dHmxSZwUQ8 +PlKphakQOk0wmf8FfAk+45oI/74clT8ixE2SUxmwSrgbCy7Cxn6G3L0fhE0x7k/m +PC9ogg6PMsM+ITyhj2xLRvEEB2/M5nKpzZJ5DG3uRzF+JwpXwp444LfDRplC3Cum +i159wBY2jpa3ip28xcP0pplwNEKhJM0n+u/KjB2xqx2cgnFqNk9J9VoW0mH+MWAj +CSCUIRdjjxxegHbxNsZ7B6Vh0RiAqSD5LPyPNzWGr1WYCM8gKimrtlQnoZG9JoTi +zU3LtUW10w2gw3madJzDNAwMNTnmWgZw6Tm8w9etmXWsJjTaD8g= +=XQl1 +-----END PGP SIGNATURE----- diff --git a/diffutils-cmp-s-empty.patch b/diffutils-cmp-s-empty.patch new file mode 100644 index 0000000..7fc3a18 --- /dev/null +++ b/diffutils-cmp-s-empty.patch @@ -0,0 +1,20 @@ +diff -up diffutils-3.6/src/cmp.c.cmp-s-empty diffutils-3.6/src/cmp.c +--- diffutils-3.6/src/cmp.c.cmp-s-empty 2017-05-18 18:39:59.000000000 +0100 ++++ diffutils-3.6/src/cmp.c 2017-05-22 10:53:28.477147864 +0100 +@@ -330,12 +330,15 @@ main (int argc, char **argv) + + /* If only a return code is needed, + and if both input descriptors are associated with plain files, ++ and if both files are larger than 0 bytes (procfs files are always 0), + conclude that the files differ if they have different sizes + and if more bytes will be compared than are in the smaller file. */ + + if (comparison_type == type_status + && S_ISREG (stat_buf[0].st_mode) +- && S_ISREG (stat_buf[1].st_mode)) ++ && S_ISREG (stat_buf[1].st_mode) ++ && stat_buf[0].st_size > 0 ++ && stat_buf[1].st_size > 0) + { + off_t s0 = stat_buf[0].st_size - file_position (0); + off_t s1 = stat_buf[1].st_size - file_position (1); diff --git a/diffutils-i18n.patch b/diffutils-i18n.patch new file mode 100644 index 0000000..476e7b5 --- /dev/null +++ b/diffutils-i18n.patch @@ -0,0 +1,778 @@ +diff -up diffutils-3.8/src/diff.c.i18n diffutils-3.8/src/diff.c +--- diffutils-3.8/src/diff.c.i18n 2021-06-12 06:50:55.000000000 +0100 ++++ diffutils-3.8/src/diff.c 2021-08-02 09:55:20.671517943 +0100 +@@ -77,6 +77,8 @@ static void try_help (char const *, char + static void check_stdout (void); + static void usage (void); + ++bool (*lines_differ) (char const *, size_t, char const *, size_t); ++ + /* If comparing directories, compare their common subdirectories + recursively. */ + static bool recursive; +@@ -300,6 +302,13 @@ main (int argc, char **argv) + presume_output_tty = false; + xstdopen (); + ++#ifdef HANDLE_MULTIBYTE ++ if (MB_CUR_MAX > 1) ++ lines_differ = lines_differ_multibyte; ++ else ++#endif ++ lines_differ = lines_differ_singlebyte; ++ + /* Decode the options. */ + + while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != -1) +diff -up diffutils-3.8/src/diff.h.i18n diffutils-3.8/src/diff.h +--- diffutils-3.8/src/diff.h.i18n 2021-01-02 01:37:49.000000000 +0000 ++++ diffutils-3.8/src/diff.h 2021-08-02 09:54:36.922101185 +0100 +@@ -23,6 +23,17 @@ + #include + #include + ++/* For platforms which support the ISO C ammendment 1 functionality we ++ support user-defined character classes. */ ++#if defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H ++/* Solaris 2.5 has a bug: must be included before . */ ++# include ++# include ++# if defined (HAVE_MBRTOWC) ++# define HANDLE_MULTIBYTE 1 ++# endif ++#endif ++ + /* What kind of changes a hunk contains. */ + enum changes + { +@@ -381,7 +392,11 @@ extern void print_sdiff_script (struct c + extern char const change_letter[4]; + extern char const pr_program[]; + extern char *concat (char const *, char const *, char const *); +-extern bool lines_differ (char const *, char const *) _GL_ATTRIBUTE_PURE; ++extern bool (*lines_differ) (char const *, size_t, char const *, size_t) _GL_ATTRIBUTE_PURE; ++extern bool lines_differ_singlebyte (char const *, size_t, char const *, size_t) _GL_ATTRIBUTE_PURE; ++#ifdef HANDLE_MULTIBYTE ++extern bool lines_differ_multibyte (char const *, size_t, char const *, size_t) _GL_ATTRIBUTE_PURE; ++#endif + extern lin translate_line_number (struct file_data const *, lin); + extern struct change *find_change (struct change *); + extern struct change *find_reverse_change (struct change *); +diff -up diffutils-3.8/src/io.c.i18n diffutils-3.8/src/io.c +--- diffutils-3.8/src/io.c.i18n 2021-01-02 01:37:49.000000000 +0000 ++++ diffutils-3.8/src/io.c 2021-08-02 09:58:03.672211301 +0100 +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + /* Rotate an unsigned value to the left. */ + #define ROL(v, n) ((v) << (n) | (v) >> (sizeof (v) * CHAR_BIT - (n))) +@@ -215,6 +216,28 @@ slurp (struct file_data *current) + + /* Split the file into lines, simultaneously computing the equivalence + class for each line. */ ++#ifdef HANDLE_MULTIBYTE ++# define MBC2WC(P, END, MBLENGTH, WC, STATE, CONVFAIL) \ ++do \ ++ { \ ++ mbstate_t state_bak = STATE; \ ++ \ ++ CONVFAIL = 0; \ ++ MBLENGTH = mbrtowc (&WC, P, END - (char const *)P, &STATE); \ ++ \ ++ switch (MBLENGTH) \ ++ { \ ++ case (size_t)-2: \ ++ case (size_t)-1: \ ++ STATE = state_bak; \ ++ ++CONVFAIL; \ ++ /* Fall through. */ \ ++ case 0: \ ++ MBLENGTH = 1; \ ++ } \ ++ } \ ++ while (0) ++#endif + + static void + find_and_hash_each_line (struct file_data *current) +@@ -241,12 +264,300 @@ find_and_hash_each_line (struct file_dat + bool same_length_diff_contents_compare_anyway = + diff_length_compare_anyway | ig_case; + ++#ifdef HANDLE_MULTIBYTE ++ wchar_t wc; ++ size_t mblength; ++ mbstate_t state; ++ int convfail; ++ ++ memset (&state, '\0', sizeof (mbstate_t)); ++#endif ++ + while (p < suffix_begin) + { + char const *ip = p; + hash_value h = 0; + unsigned char c; + ++#ifdef HANDLE_MULTIBYTE ++ if (MB_CUR_MAX > 1) ++ { ++ wchar_t lo_wc; ++ char mbc[MB_LEN_MAX]; ++ mbstate_t state_wc; ++ ++ /* Hash this line until we find a newline. */ ++ switch (ig_white_space) ++ { ++ case IGNORE_ALL_SPACE: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (convfail) ++ mbc[0] = *p++; ++ else if (!iswspace (wc)) ++ { ++ bool flag = 0; ++ ++ if (ig_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ ++ p += mblength; ++ memset (&state_wc, '\0', sizeof(mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t)-1 && ++ mblength != (size_t)-2); ++ ++ mblength = (mblength < 1) ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ else ++ { ++ p += mblength; ++ continue; ++ } ++ ++ for (i = 0; i < mblength; i++) ++ h = HASH (h, mbc[i]); ++ } ++ break; ++ ++ case IGNORE_SPACE_CHANGE: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (!convfail && iswspace (wc)) ++ { ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ goto hashing_done; ++ } ++ ++ p += mblength; ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ if (convfail || !iswspace (wc)) ++ break; ++ } ++ h = HASH (h, ' '); ++ } ++ ++ /* WC is now the first non-space. */ ++ if (convfail) ++ mbc[0] = *p++; ++ else ++ { ++ bool flag = 0; ++ ++ if (ignore_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ ++ p += mblength; ++ memset (&state_wc, '\0', sizeof(mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t)-1 && ++ mblength != (size_t)-2); ++ ++ mblength = (mblength < 1) ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ ++ for (i = 0; i < mblength; i++) ++ h = HASH (h, mbc[i]); ++ } ++ break; ++ ++ case IGNORE_TAB_EXPANSION: ++ case IGNORE_TAB_EXPANSION_AND_TRAILING_SPACE: ++ case IGNORE_TRAILING_SPACE: ++ { ++ size_t column = 0; ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (!convfail ++ && ig_white_space & IGNORE_TRAILING_SPACE ++ && iswspace (wc)) ++ { ++ char const *p1 = p; ++ while (1) ++ { ++ if (*p1 == '\n') ++ { ++ p = p1 + 1; ++ goto hashing_done; ++ } ++ ++ p1 += mblength; ++ MBC2WC (p1, suffix_begin, mblength, wc, state, convfail); ++ if (convfail || !iswspace (wc)) ++ break; ++ } ++ } ++ ++ size_t repetitions = 1; ++ bool no_convert = 0; ++ ++ if (ig_white_space & IGNORE_TAB_EXPANSION) ++ { ++ if (convfail) ++ column++; ++ else ++ switch (wc) ++ { ++ case L'\b': ++ column -= 0 < column; ++ break; ++ ++ case L'\t': ++ mbc[0] = ' '; ++ mblength = 1; ++ no_convert = 1; ++ p++; ++ assert(mblength == 1); ++ repetitions = tabsize - column % tabsize; ++ column = (column + repetitions < column ++ ? 0 ++ : column + repetitions); ++ break; ++ ++ case L'\r': ++ column = 0; ++ break; ++ ++ default: ++ column += wcwidth (wc); ++ break; ++ } ++ } ++ ++ if (ig_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ no_convert = 1; ++ p += mblength; ++ memset (&state_wc, '\0', sizeof(mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t)-1 && ++ mblength != (size_t)-2); ++ ++ mblength = (mblength < 1) ? 1 : mblength; ++ } ++ } ++ ++ if (!no_convert) ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ ++ do ++ { ++ for (i = 0; i < mblength; i++) ++ h = HASH (h, mbc[i]); ++ } ++ while (--repetitions != 0); ++ } ++ } ++ break; ++ ++ default: ++ while (1) ++ { ++ if (*p == '\n') ++ { ++ ++p; ++ break; ++ } ++ ++ MBC2WC (p, suffix_begin, mblength, wc, state, convfail); ++ ++ if (convfail) ++ mbc[0] = *p++; ++ else ++ { ++ int flag = 0; ++ ++ if (ig_case) ++ { ++ lo_wc = towlower (wc); ++ if (lo_wc != wc) ++ { ++ flag = 1; ++ p += mblength; ++ memset (&state_wc, '\0', sizeof(mbstate_t)); ++ mblength = wcrtomb (mbc, lo_wc, &state_wc); ++ ++ assert (mblength != (size_t)-1 && ++ mblength != (size_t)-2); ++ ++ mblength = (mblength < 1) ? 1 : mblength; ++ } ++ } ++ ++ if (!flag) ++ { ++ for (i = 0; i < mblength; i++) ++ mbc[i] = *p++; ++ } ++ } ++ ++ for (i = 0; i < mblength; i++) ++ h = HASH (h, mbc[i]); ++ } ++ } ++ } ++ else ++#endif ++ + /* Hash this line until we find a newline. */ + switch (ig_white_space) + { +@@ -397,7 +708,7 @@ find_and_hash_each_line (struct file_dat + else if (!diff_length_compare_anyway) + continue; + +- if (! lines_differ (eqline, ip)) ++ if (! lines_differ (eqline, eqs[i].length + 1, ip, length + 1)) + break; + } + +diff -up diffutils-3.8/src/util.c.i18n diffutils-3.8/src/util.c +--- diffutils-3.8/src/util.c.i18n 2021-01-02 01:37:49.000000000 +0000 ++++ diffutils-3.8/src/util.c 2021-08-02 09:54:36.922101185 +0100 +@@ -985,7 +985,8 @@ finish_output (void) + Return nonzero if the lines differ. */ + + bool +-lines_differ (char const *s1, char const *s2) ++lines_differ_singlebyte (char const *s1, size_t s1len, ++ char const *s2, size_t s2len) + { + register char const *t1 = s1; + register char const *t2 = s2; +@@ -1141,6 +1142,354 @@ lines_differ (char const *s1, char const + + return true; + } ++ ++#ifdef HANDLE_MULTIBYTE ++# define MBC2WC(T, END, MBLENGTH, WC, STATE, CONVFAIL) \ ++do \ ++ { \ ++ mbstate_t bak = STATE; \ ++ \ ++ CONVFAIL = 0; \ ++ MBLENGTH = mbrtowc (&WC, T, END - T, &STATE); \ ++ \ ++ switch (MBLENGTH) \ ++ { \ ++ case (size_t)-2: \ ++ case (size_t)-1: \ ++ STATE = bak; \ ++ ++CONVFAIL; \ ++ /* Fall through. */ \ ++ case 0: \ ++ MBLENGTH = 1; \ ++ } \ ++ } \ ++ while (0) ++ ++bool ++lines_differ_multibyte (char const *s1, size_t s1len, ++ char const *s2, size_t s2len) ++{ ++ char const *end1, *end2; ++ char c1, c2; ++ wchar_t wc1, wc2, wc1_bak, wc2_bak; ++ size_t mblen1, mblen2; ++ mbstate_t state1, state2, state1_bak, state2_bak; ++ int convfail1, convfail2, convfail1_bak, convfail2_bak; ++ ++ char const *t1 = s1; ++ char const *t2 = s2; ++ char const *t1_bak, *t2_bak; ++ size_t column = 0; ++ ++ if (ignore_white_space == IGNORE_NO_WHITE_SPACE && !ignore_case) ++ { ++ while (*t1 != '\n') ++ if (*t1++ != *t2++) ++ return 1; ++ return 0; ++ } ++ ++ end1 = t1 + s1len; ++ end2 = t2 + s2len; ++ ++ memset (&state1, '\0', sizeof (mbstate_t)); ++ memset (&state2, '\0', sizeof (mbstate_t)); ++ ++ while (1) ++ { ++ c1 = *t1; ++ c2 = *t2; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ ++ /* Test for exact char equality first, since it's a common case. */ ++ if (convfail1 ^ convfail2) ++ break; ++ else if (convfail1 && convfail2 && c1 != c2) ++ break; ++ else if (!convfail1 && !convfail2 && wc1 != wc2) ++ { ++ switch (ignore_white_space) ++ { ++ case IGNORE_ALL_SPACE: ++ /* For -w, just skip past any white space. */ ++ while (1) ++ { ++ if (convfail1) ++ break; ++ else if (wc1 == L'\n' || !iswspace (wc1)) ++ break; ++ ++ t1 += mblen1; ++ c1 = *t1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ ++ while (1) ++ { ++ if (convfail2) ++ break; ++ else if (wc2 == L'\n' || !iswspace (wc2)) ++ break; ++ ++ t2 += mblen2; ++ c2 = *t2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ t1 += mblen1; ++ t2 += mblen2; ++ break; ++ ++ case IGNORE_SPACE_CHANGE: ++ /* For -b, advance past any sequence of white space in ++ line 1 and consider it just one space, or nothing at ++ all if it is at the end of the line. */ ++ if (wc1 != L'\n' && iswspace (wc1)) ++ { ++ size_t mblen_bak; ++ mbstate_t state_bak; ++ ++ do ++ { ++ t1 += mblen1; ++ mblen_bak = mblen1; ++ state_bak = state1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ while (!convfail1 && (wc1 != L'\n' && iswspace (wc1))); ++ ++ state1 = state_bak; ++ mblen1 = mblen_bak; ++ t1 -= mblen1; ++ convfail1 = 0; ++ wc1 = L' '; ++ } ++ ++ /* Likewise for line 2. */ ++ if (wc2 != L'\n' && iswspace (wc2)) ++ { ++ size_t mblen_bak; ++ mbstate_t state_bak; ++ ++ do ++ { ++ t2 += mblen2; ++ mblen_bak = mblen2; ++ state_bak = state2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ while (!convfail2 && (wc2 != L'\n' && iswspace (wc2))); ++ ++ state2 = state_bak; ++ mblen2 = mblen_bak; ++ t2 -= mblen2; ++ convfail2 = 0; ++ wc2 = L' '; ++ } ++ ++ if (wc1 != wc2) ++ { ++ /* If we went too far when doing the simple test for ++ equality, go back to the first non-whitespace ++ character in both sides and try again. */ ++ if (wc2 == L' ' && wc1 != L'\n' && ++ t1 > s1 && ++ !convfail1_bak && iswspace (wc1_bak)) ++ { ++ t1 = t1_bak; ++ wc1 = wc1_bak; ++ state1 = state1_bak; ++ convfail1 = convfail1_bak; ++ continue; ++ } ++ if (wc1 == L' ' && wc2 != L'\n' ++ && t2 > s2 ++ && !convfail2_bak && iswspace (wc2_bak)) ++ { ++ t2 = t2_bak; ++ wc2 = wc2_bak; ++ state2 = state2_bak; ++ convfail2 = convfail2_bak; ++ continue; ++ } ++ } ++ ++ t1_bak = t1; t2_bak = t2; ++ wc1_bak = wc1; wc2_bak = wc2; ++ state1_bak = state1; state2_bak = state2; ++ convfail1_bak = convfail1; convfail2_bak = convfail2; ++ ++ if (wc1 == L'\n') ++ wc1 = L' '; ++ else ++ t1 += mblen1; ++ ++ if (wc2 == L'\n') ++ wc2 = L' '; ++ else ++ t2 += mblen2; ++ ++ break; ++ ++ case IGNORE_TRAILING_SPACE: ++ case IGNORE_TAB_EXPANSION_AND_TRAILING_SPACE: ++ if (iswspace (wc1) && iswspace (wc2)) ++ { ++ char const *p; ++ wchar_t wc; ++ size_t mblength; ++ int convfail; ++ mbstate_t state; ++ bool just_whitespace_left = 1; ++ if (wc1 != L'\n') ++ { ++ mblength = mblen1; ++ p = t1; ++ memset (&state, '\0', sizeof(mbstate_t)); ++ while (p < end1) ++ { ++ if (*p == '\n') ++ break; ++ ++ p += mblength; ++ MBC2WC (p, end1, mblength, wc, state, convfail); ++ if (convfail || !iswspace (wc)) ++ { ++ just_whitespace_left = 0; ++ break; ++ } ++ } ++ } ++ if (just_whitespace_left && wc2 != L'\n') ++ { ++ mblength = mblen2; ++ p = t2; ++ memset (&state, '\0', sizeof(mbstate_t)); ++ while (p < end2) ++ { ++ if (*p == '\n') ++ break; ++ ++ p += mblength; ++ MBC2WC (p, end2, mblength, wc, state, convfail); ++ if (convfail || !iswspace (wc)) ++ { ++ just_whitespace_left = 0; ++ break; ++ } ++ } ++ } ++ ++ if (just_whitespace_left) ++ /* Both lines have nothing but whitespace left. */ ++ return false; ++ } ++ ++ if (ignore_white_space == IGNORE_TRAILING_SPACE) ++ break; ++ /* Fall through. */ ++ case IGNORE_TAB_EXPANSION: ++ if ((wc1 == L' ' && wc2 == L'\t') ++ || (wc1 == L'\t' && wc2 == L' ')) ++ { ++ size_t column2 = column; ++ ++ while (1) ++ { ++ if (convfail1) ++ { ++ ++t1; ++ break; ++ } ++ else if (wc1 == L' ') ++ column++; ++ else if (wc1 == L'\t') ++ column += tabsize - column % tabsize; ++ else ++ { ++ t1 += mblen1; ++ break; ++ } ++ ++ t1 += mblen1; ++ c1 = *t1; ++ MBC2WC (t1, end1, mblen1, wc1, state1, convfail1); ++ } ++ ++ while (1) ++ { ++ if (convfail2) ++ { ++ ++t2; ++ break; ++ } ++ else if (wc2 == L' ') ++ column2++; ++ else if (wc2 == L'\t') ++ column2 += tabsize - column2 % tabsize; ++ else ++ { ++ t2 += mblen2; ++ break; ++ } ++ ++ t2 += mblen2; ++ c2 = *t2; ++ MBC2WC (t2, end2, mblen2, wc2, state2, convfail2); ++ } ++ ++ if (column != column2) ++ return 1; ++ } ++ else ++ { ++ t1 += mblen1; ++ t2 += mblen2; ++ } ++ break; ++ ++ case IGNORE_NO_WHITE_SPACE: ++ t1 += mblen1; ++ t2 += mblen2; ++ break; ++ } ++ ++ /* Lowercase all letters if -i is specified. */ ++ if (ignore_case) ++ { ++ if (!convfail1) ++ wc1 = towlower (wc1); ++ if (!convfail2) ++ wc2 = towlower (wc2); ++ } ++ ++ if (convfail1 ^ convfail2) ++ break; ++ else if (convfail1 && convfail2 && c1 != c2) ++ break; ++ else if (!convfail1 && !convfail2 && wc1 != wc2) ++ break; ++ } ++ else ++ { ++ t1_bak = t1; t2_bak = t2; ++ wc1_bak = wc1; wc2_bak = wc2; ++ state1_bak = state1; state2_bak = state2; ++ convfail1_bak = convfail1; convfail2_bak = convfail2; ++ ++ t1 += mblen1; t2 += mblen2; ++ } ++ ++ if (!convfail1 && wc1 == L'\n') ++ return 0; ++ ++ column += convfail1 ? 1 : ++ (wc1 == L'\t') ? tabsize - column % tabsize : wcwidth (wc1); ++ } ++ ++ return 1; ++} ++#endif + + /* Find the consecutive changes at the start of the script START. + Return the last link before the first gap. */ diff --git a/diffutils.spec b/diffutils.spec index 3c90eaf..937b048 100644 --- a/diffutils.spec +++ b/diffutils.spec @@ -1,19 +1,12 @@ Summary: GNU collection of diff utilities Name: diffutils -Version: 3.12 +Version: 3.8 Release: 3%{?dist} URL: https://www.gnu.org/software/diffutils/diffutils.html Source: https://ftp.gnu.org/gnu/diffutils/diffutils-%{version}.tar.xz -# upstream fixes -# cross compile build of 3.12 diffutils fails -Patch: diffutils-3.12-cross-compiler-build-fail.patch -# sdiff: continue → break -Patch: diffutils-3.12-sdiff-continue-break.patch -# sdiff: pacify gcc -flto -Wmaybe-uninitialized -Patch: 0001-sdiff-pacify-gcc-flto-Wmaybe-uninitialized.patch -# sdiff: port back to C17 -Patch: 0001-sdiff-port-back-to-C17.patch -License: GPL-3.0-or-later +Patch1: diffutils-cmp-s-empty.patch +Patch2: diffutils-i18n.patch +License: GPLv3+ Provides: bundled(gnulib) BuildRequires: gcc BuildRequires: help2man @@ -34,7 +27,11 @@ to merge two files interactively. Install diffutils if you need to compare text files. %prep -%autosetup -p1 +%setup -q +# For 'cmp -s', compare file sizes only if both non-zero (bug #563618). +%patch1 -p1 -b .cmp-s-empty + +%patch2 -p1 -b .i18n # Run autoreconf for aarch64 support (bug #925256). autoreconf @@ -62,68 +59,6 @@ make check %{_infodir}/diffutils.info* %changelog -* Wed Jul 23 2025 Fedora Release Engineering - 3.12-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Mon May 05 2025 Than Ngo - 3.12-2 -- Upstream patches - * cross compile build of 3.12 diffutils fails - * sdiff: continue → break - * sdiff: pacify gcc -flto -Wmaybe-uninitialized - * sdiff: port back to C17 - -* Fri Apr 11 2025 Than Ngo - 3.12-1 -- Fixed rhbz#2358545, Update to 3.12 - -* Thu Mar 27 2025 Than Ngo - 3.11-3 -- diff does not show a unified diff when one of the file is empty - -* Thu Mar 27 2025 Than Ngo - 3.11-2 -- Backported upstream patch, Fixed allocation typo leading to crash - -* Thu Mar 27 2025 Than Ngo - 3.11-1 -- Fixed rhbz#2343469, Update to 3.11 - -* Thu Jan 16 2025 Fedora Release Engineering - 3.10-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Tue Jul 30 2024 Than Ngo - 3.10-8 -- refresh patch for 'cmp -s' - -* Tue Jul 23 2024 Than Ngo - 3.10-7 -- fix a regression, 'cmp -s' returns 1 even if files are identical - -* Wed Jul 17 2024 Fedora Release Engineering - 3.10-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 3.10-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 3.10-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jul 19 2023 Fedora Release Engineering - 3.10-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Wed Jul 05 2023 Than Ngo - 3.10-2 -- Fix output of "diff -l -y" for non-ASCII input files - -* Thu Jun 29 2023 Than Ngo - 3.10-1 -- Fix bz#2208831, update to 3.10 -- Fix bz#2196671, diff -D no longer fails to output #ifndef lines introduced in 3.9 - -* Tue Mar 28 2023 Than Ngo - 3.9-4 -- Fix deprecated patch rpm marco - -* Tue Feb 21 2023 Than Ngo - 3.9-3 -- migrated to SPDX license - -* Thu Jan 19 2023 Fedora Release Engineering - 3.9-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Mon Jan 16 2023 Tim Waugh - 3.9-1 -- 3.9 (bug #2161117). - * Thu Jul 21 2022 Fedora Release Engineering - 3.8-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild 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 405b3de..f708696 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (diffutils-3.12.tar.xz) = 10b17cf1dcdfa9ca0e5db91d62c4a079ebe9fd7eafa3aaebd4eb7e6206e4d753f348496622aa281e1bd7f7fcde65ce4a886dcc4acbb59332ef980f224197b4e4 +SHA512 (diffutils-3.8.tar.xz) = 279441270987e70d5ecfaf84b6285a4866929c43ec877e50f154a788858d548a8a316f2fc26ad62f7348c8d289cb29a09d06dfadce1806e3d8b4ea88c8b1aa7c diff --git a/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf b/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf deleted file mode 100644 index d7910cc..0000000 --- a/tests/cmp-s-returns-1-even-if-files-are-identical/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for cmp -s returns 1 even if files are identical -description: "Bug summary: cmp -s returns 1 even if files are identical\n\nDescription:\n\ - 'cmp -s' can return 1 even if files are identical, for example, if comparing\n\ - a file from /proc with a copy of that file in /tmp, since all files in\n/proc - have a size of 0 bytes.\n" -contact: Jeffrey Bastian -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils -duration: 5m -extra-summary: - /CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical -extra-task: - /CoreOS/diffutils/Regression/cmp-s-returns-1-even-if-files-are-identical diff --git a/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh b/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh old mode 100755 new mode 100644 index 72ded09..4e16f2b --- a/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh +++ b/tests/cmp-s-returns-1-even-if-files-are-identical/runtest.sh @@ -26,7 +26,8 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include rhts environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 +. /usr/bin/rhts-environment.sh +. /usr/share/rhts-library/rhtslib.sh PACKAGE="diffutils" #set -x diff --git a/tests/diff-Z-hangs/main.fmf b/tests/diff-Z-hangs/main.fmf deleted file mode 100644 index b978f00..0000000 --- a/tests/diff-Z-hangs/main.fmf +++ /dev/null @@ -1,13 +0,0 @@ -summary: Test for diffutils to check if comparing two files using diff -Z with - mixed line endings doesn't hang -description: "Bug summary: diff -Z hangs\n" -contact: Filip Holec -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils -duration: 5m -extra-summary: /CoreOS/diffutils/Regression/diff-Z-hangs -extra-task: /CoreOS/diffutils/Regression/diff-Z-hangs diff --git a/tests/diff-Z-hangs/runtest.sh b/tests/diff-Z-hangs/runtest.sh old mode 100755 new mode 100644 index 79b396a..ef14e65 --- a/tests/diff-Z-hangs/runtest.sh +++ b/tests/diff-Z-hangs/runtest.sh @@ -27,6 +27,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment +. /usr/bin/rhts-environment.sh . /usr/share/beakerlib/beakerlib.sh PACKAGE="diffutils" diff --git a/tests/diff-hang-long-files/main.fmf b/tests/diff-hang-long-files/main.fmf deleted file mode 100644 index e41e226..0000000 --- a/tests/diff-hang-long-files/main.fmf +++ /dev/null @@ -1,20 +0,0 @@ -summary: Diff appears to hang in long file -description: "Test Name: diff-hang-long-files\nAuthor: Michal Fabry \n\ - Location: /CoreOS/diffutils/Regression/diff-hang-long-files\n\nShort Description: - Diff appears to hang in long file\n\n\nLong Description:\n\nRunning the \"diff - -bBw\" command on a very large input file (eg 250 MB), in a multi-byte locale - (ie UTF-8), took a very long time to complete, if at all. In a reported case, - a diff ran for multiple days and did not complete. In certain situations, this - could cause 100% CPU usage.\n" -contact: Michal Fabry -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils - - words - - time -duration: 5m -extra-summary: /CoreOS/diffutils/Regression/diff-hang-long-files -extra-task: /CoreOS/diffutils/Regression/diff-hang-long-files diff --git a/tests/diff-hang-long-files/runtest.sh b/tests/diff-hang-long-files/runtest.sh old mode 100755 new mode 100644 index 1457dfe..18d3606 --- a/tests/diff-hang-long-files/runtest.sh +++ b/tests/diff-hang-long-files/runtest.sh @@ -15,6 +15,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Include Beaker environment +. /usr/bin/rhts-environment.sh || exit 1 . /usr/share/beakerlib/beakerlib.sh || exit 1 @@ -75,4 +76,3 @@ rlPhaseEnd #rlCreateLogFromJournal | tee $OUTPUTFILE rlJournalPrintText -rlJournalEnd diff --git a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf deleted file mode 100644 index 06210fd..0000000 --- a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/main.fmf +++ /dev/null @@ -1,17 +0,0 @@ -summary: Test for diffutils to ensure U3000 ideographic space is treated as - space when used -b or -w options -description: "Bug summary: diff -w/-b doesn't treat U3000 (IDEOGRAPHIC SPACE) as space\n\ - \nTest for diffutils to ensure U3000 ideographic space is treated as space when - used -b or -w options\n" -contact: Filip Holec -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils -duration: 5m -extra-summary: - /CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space -extra-task: - /CoreOS/diffutils/Regression/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space diff --git a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh old mode 100755 new mode 100644 index d84af01..46a760d --- a/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh +++ b/tests/diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space/runtest.sh @@ -27,6 +27,7 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment +. /usr/bin/rhts-environment.sh . /usr/share/beakerlib/beakerlib.sh PACKAGE="diffutils" diff --git a/tests/sdiff-does-not-recognize-E-option/main.fmf b/tests/sdiff-does-not-recognize-E-option/main.fmf deleted file mode 100644 index 6fe5268..0000000 --- a/tests/sdiff-does-not-recognize-E-option/main.fmf +++ /dev/null @@ -1,14 +0,0 @@ -summary: Test for sdiff does not recognize -E option -description: "Bug summary: sdiff does not recognize -E option\n\nThe test runs sdiff - -E on two files differing just in use of tab/8 spaces. sdiff shall not fail and - shall return that the files are identical.\n" -contact: Martin Kyral -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils -duration: 10m -extra-summary: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option -extra-task: /CoreOS/diffutils/Regression/sdiff-does-not-recognize-E-option diff --git a/tests/sdiff-does-not-recognize-E-option/runtest.sh b/tests/sdiff-does-not-recognize-E-option/runtest.sh old mode 100755 new mode 100644 index be034f2..d60f29b --- a/tests/sdiff-does-not-recognize-E-option/runtest.sh +++ b/tests/sdiff-does-not-recognize-E-option/runtest.sh @@ -27,7 +27,8 @@ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Include Beaker environment -. /usr/share/beakerlib/beakerlib.sh || exit 1 +. /usr/bin/rhts-environment.sh +. /usr/lib/beakerlib/beakerlib.sh PACKAGE="diffutils" diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..7f41590 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,18 @@ +--- +# Tests that run in classic context +- hosts: localhost + roles: + - role: standard-test-beakerlib + tags: + - classic + - container + - atomic + tests: + - cmp-s-returns-1-even-if-files-are-identical + - diff-hang-long-files + - diff-w-b-doesn-t-treat-U3000-IDEOGRAPHIC-SPACE-as-space + - diff-Z-hangs + - sdiff-does-not-recognize-E-option + - whitespace + required_packages: + - findutils # beakerlib needs find command diff --git a/tests/whitespace/main.fmf b/tests/whitespace/main.fmf deleted file mode 100644 index 955e588..0000000 --- a/tests/whitespace/main.fmf +++ /dev/null @@ -1,15 +0,0 @@ -summary: diff -b should ignore whitespace -description: "Create 2 files, f1, f2 with contents \"abc\" and \"abc \" (without quotes),\n\ - i.e. the same line with a space on the end.\n\nDiff ignoring whitespace:\n\ndiff - -b f1 f2\n\nshould produce no diff output, but does on F8. Works fine on FC6.\n\ - \nversion: diffutils-2.8.1-17.fc8\n" -contact: Bill Peck -component: - - diffutils -test: ./runtest.sh -framework: beakerlib -recommend: - - diffutils -duration: 5m -extra-summary: /CoreOS/diffutils/whitespace -extra-task: /CoreOS/diffutils/whitespace diff --git a/tests/whitespace/runtest.sh b/tests/whitespace/runtest.sh old mode 100755 new mode 100644 index 9f28bf1..50348e9 --- a/tests/whitespace/runtest.sh +++ b/tests/whitespace/runtest.sh @@ -15,7 +15,8 @@ # # Author: Bill Peck -. /usr/share/beakerlib/beakerlib.sh || exit 1 +. /usr/bin/rhts-environment.sh +. /usr/share/rhts-library/rhtslib.sh PACKAGE="diffutils"