Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package snapraid for openSUSE:Factory checked in at 2026-04-07 16:33:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/snapraid (Old) and /work/SRC/openSUSE:Factory/.snapraid.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "snapraid" Tue Apr 7 16:33:53 2026 rev:5 rq:1344871 version:14.1 Changes: -------- --- /work/SRC/openSUSE:Factory/snapraid/snapraid.changes 2026-03-31 15:24:37.534159987 +0200 +++ /work/SRC/openSUSE:Factory/.snapraid.new.21863/snapraid.changes 2026-04-07 16:50:00.315261007 +0200 @@ -1,0 +2,12 @@ +Tue Apr 7 06:57:57 UTC 2026 - Paolo Stivanin <[email protected]> + +- Update to 14.1: + * Fixed include/exclude specification for directories. This is a regression + bug in version 14.0. It is highly recommended to update. + If you are using version 14.0 with include/exclude directives, simply run + a new sync with this version to automatically resolve any potential issues. + * Fixed a build issue in Alpine distribution. + * Fixed abort condition if the Windows volume name cannot be converted to + UTF-8. + +------------------------------------------------------------------- Old: ---- snapraid-14.0.tar.gz New: ---- snapraid-14.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ snapraid.spec ++++++ --- /var/tmp/diff_new_pack.XBjYAV/_old 2026-04-07 16:50:00.807281376 +0200 +++ /var/tmp/diff_new_pack.XBjYAV/_new 2026-04-07 16:50:00.811281541 +0200 @@ -17,7 +17,7 @@ Name: snapraid -Version: 14.0 +Version: 14.1 Release: 0 Summary: Disk array backup for many large rarely-changed files License: GPL-3.0-or-later ++++++ snapraid-14.0.tar.gz -> snapraid-14.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/.version new/snapraid-14.1/.version --- old/snapraid-14.0/.version 2026-03-30 10:09:54.000000000 +0200 +++ new/snapraid-14.1/.version 2026-04-01 00:45:36.000000000 +0200 @@ -1 +1 @@ -14.0 \ No newline at end of file +14.1 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/HISTORY new/snapraid-14.1/HISTORY --- old/snapraid-14.0/HISTORY 2026-03-30 08:31:15.000000000 +0200 +++ new/snapraid-14.1/HISTORY 2026-04-01 00:43:05.000000000 +0200 @@ -1,6 +1,12 @@ SnapRAID HISTORY ================ +14.1 2026/03 +============ + * Fix include/exclude specification of directories. + * Fix a build issue in Alpine distribution. + * Fix abort condition if the Windows volume name cannot be converted to UTF-8. + 14.0 2026/03 ============ * More log tags for all commands in preparation for the upcoming SnapRAID diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/cmdline/elem.c new/snapraid-14.1/cmdline/elem.c --- old/snapraid-14.0/cmdline/elem.c 2026-03-18 11:54:57.000000000 +0100 +++ new/snapraid-14.1/cmdline/elem.c 2026-04-01 00:32:07.000000000 +0200 @@ -186,27 +186,35 @@ path += strlen(filter->root); } - /* match dirs with dirs and files with files */ - if (filter->is_dir && !is_dir) - return 0; + /* if the filter is for files, it doesn't applies to directories */ if (!filter->is_dir && is_dir) return 0; + /* + * If the filter is for directories, it should be applied to all files inside + * that directory. + * + * This is done allowing a partial matching as far it ends at a directory separator + */ + int match_sub = 0; + if (filter->is_dir && !is_dir) + match_sub = 1; + int ret = 0; if (filter->is_abs) { /* skip initial slash, as always missing in the path */ - if (wnmatch(filter->pattern + 1, path) == 0) + if (wnmatch_sub(filter->pattern + 1, path, match_sub) == 0) ret = filter->direction; } else { /* the path is relative, first try to match from the root */ - if (wnmatch(filter->pattern, path) == 0) { + if (wnmatch_sub(filter->pattern, path, match_sub) == 0) { ret = filter->direction; } else { /* then try to match after all the / presents */ char* slash = strchr(path, '/'); while (slash) { - if (wnmatch(filter->pattern, slash + 1) == 0) { + if (wnmatch_sub(filter->pattern, slash + 1, match_sub) == 0) { ret = filter->direction; break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/cmdline/mingw.c new/snapraid-14.1/cmdline/mingw.c --- old/snapraid-14.0/cmdline/mingw.c 2026-03-20 14:44:14.000000000 +0100 +++ new/snapraid-14.1/cmdline/mingw.c 2026-03-31 22:58:09.000000000 +0200 @@ -278,21 +278,37 @@ /** * Convert a generic string from UTF16 to UTF8. */ -static char* u16tou8ex(char* conv_buf, const wchar_t* src, size_t number_of_wchar, size_t* result_length_without_terminator) +static char* u16tou8ex_may_fail(char* conv_buf, const wchar_t* src, size_t number_of_wchar, size_t* result_length_without_terminator) { int ret; ret = WideCharToMultiByte(CP_UTF8, 0, src, number_of_wchar, conv_buf, CONV_MAX, 0, 0); - if (ret <= 0) { - log_fatal(EINTERNAL, "Error converting from UTF-16 to UTF-8\n"); - exit(EXIT_FAILURE); - } + if (ret <= 0) + return 0; *result_length_without_terminator = ret; return conv_buf; } +static char* u16tou8ex(char* conv_buf, const wchar_t* src, size_t number_of_wchar, size_t* result_length_without_terminator) +{ + char* ret = u16tou8ex_may_fail(conv_buf, src, number_of_wchar, result_length_without_terminator); + + if (!ret) { + log_fatal(EINTERNAL, "Error converting from UTF-16 to UTF-8 pointer %p with len %u\n", src, (unsigned)number_of_wchar); + if (src != 0) { + for (size_t i = 0; i < number_of_wchar; ++i) { + log_fatal(EINTERNAL, "%4u: %04x\n", (unsigned)i, src[i]); + } + } + + os_abort(); + } + + return ret; +} + static char* u16tou8(char* conv_buf, const wchar_t* src) { size_t len; @@ -1976,15 +1992,16 @@ if (GetVolumeInformationW(volume_root, vol_name, MAX_PATH, 0, 0, 0, fs_name, MAX_PATH)) { char u8[CONV_MAX]; size_t len; + char* ret; - u16tou8ex(u8, fs_name, wcslen(fs_name), &len); - if (len + 1 <= fstype_size) { + ret = u16tou8ex_may_fail(u8, fs_name, wcslen(fs_name), &len); + if (ret != 0 && len + 1 <= fstype_size) { memcpy(fstype, u8, len); fstype[len] = 0; } - u16tou8ex(u8, vol_name, wcslen(vol_name), &len); - if (len + 1 <= fslabel_size) { + ret = u16tou8ex_may_fail(u8, vol_name, wcslen(vol_name), &len); + if (ret != 0 && len + 1 <= fslabel_size) { memcpy(fslabel, u8, len); fslabel[len] = 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/cmdline/support.c new/snapraid-14.1/cmdline/support.c --- old/snapraid-14.0/cmdline/support.c 2026-03-20 23:06:30.000000000 +0100 +++ new/snapraid-14.1/cmdline/support.c 2026-04-01 00:28:05.000000000 +0200 @@ -2541,7 +2541,7 @@ return p; } -int wnmatch(const char* p, const char* t) +int wnmatch_sub(const char* p, const char* t, int match_sub) { char p1 = 0; /* previous char */ while (*p) { @@ -2582,20 +2582,20 @@ */ if (*p == '/' && (p1 == 0 || p1 == '/')) { /* try reducing to nothing */ - if (wnmatch(p + 1, t) == 0) + if (wnmatch_sub(p + 1, t, match_sub) == 0) return 0; /* otherwise / should match in the text */ } /* try matching with 0 or more characters */ while (*t) { - if (wnmatch(p, t) == 0) + if (wnmatch_sub(p, t, match_sub) == 0) return 0; ++t; } /* try matching at the end */ - return wnmatch(p, t); + return wnmatch_sub(p, t, match_sub); } } else { /* skip the * */ @@ -2611,13 +2611,13 @@ /* try matching with 0 or more characters */ while (*t && *t != '/') { - if (wnmatch(p, t) == 0) + if (wnmatch_sub(p, t, match_sub) == 0) return 0; ++t; } /* try matching at the end */ - return wnmatch(p, t); + return wnmatch_sub(p, t, match_sub); case '[' : /* character class */ if (*t == 0 || *t == '/') @@ -2640,7 +2640,13 @@ p1 = p0; } - /* match successful if we've consumed all text */ - return *t != 0; + /* if we match sub directory */ + if (match_sub) { + /* match successfully only if we are at a directory border */ + return *t != '/'; + } else { + /* match successfully if we've consumed all text */ + return *t != 0; + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/cmdline/support.h new/snapraid-14.1/cmdline/support.h --- old/snapraid-14.0/cmdline/support.h 2026-02-28 15:37:12.000000000 +0100 +++ new/snapraid-14.1/cmdline/support.h 2026-04-01 00:32:07.000000000 +0200 @@ -523,14 +523,24 @@ /* * Wild match function. * + * If match_sub is !=0, it matches sub directory. Specifically it matches if the + * string "t" is not fully consumed and the next character to consume is a /. + * * - ? matches any single character except / * - * matches any sequence of characters except / * - ** (nearby a /) matches everything including / * - ** (not near a /) like * - * - ##/ reduces to nothing in addition to the normal matching of ** (using # instead of * to mess the C comment) + * - ##/ reduces to nothing in addition to the normal matching of ** (using # instead of * to not mess the C comment) * - [...] matches character classes with support for ranges and negation lile [!...] or [^...], except / + * + * \return 0 if it matches */ -int wnmatch(const char* p, const char* t); +int wnmatch_sub(const char* p, const char* t, int match_sub); + +static inline int wnmatch(const char* p, const char* t) +{ + return wnmatch_sub(p, t, 0); +} #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/configure new/snapraid-14.1/configure --- old/snapraid-14.0/configure 2026-03-30 10:08:43.000000000 +0200 +++ new/snapraid-14.1/configure 2026-04-01 00:44:26.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for SnapRAID CLI 14.0. +# Generated by GNU Autoconf 2.72 for SnapRAID CLI 14.1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @@ -600,8 +600,8 @@ # Identity of this package. PACKAGE_NAME='SnapRAID CLI' PACKAGE_TARNAME='snapraid' -PACKAGE_VERSION='14.0' -PACKAGE_STRING='SnapRAID CLI 14.0' +PACKAGE_VERSION='14.1' +PACKAGE_STRING='SnapRAID CLI 14.1' PACKAGE_BUGREPORT='' PACKAGE_URL='https://www.snapraid.it' @@ -1336,7 +1336,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures SnapRAID CLI 14.0 to adapt to many kinds of systems. +'configure' configures SnapRAID CLI 14.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1407,7 +1407,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of SnapRAID CLI 14.0:";; + short | recursive ) echo "Configuration of SnapRAID CLI 14.1:";; esac cat <<\_ACEOF @@ -1530,7 +1530,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -SnapRAID CLI configure 14.0 +SnapRAID CLI configure 14.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2116,7 +2116,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by SnapRAID CLI $as_me 14.0, which was +It was created by SnapRAID CLI $as_me 14.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3415,7 +3415,7 @@ # Define the identity of the package. PACKAGE='snapraid' - VERSION='14.0' + VERSION='14.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -6675,6 +6675,12 @@ printf "%s\n" "#define HAVE_SYS_MKDEV_H 1" >>confdefs.h fi +ac_fn_c_check_header_compile "$LINENO" "sys/mount.h" "ac_cv_header_sys_mount_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mount_h" = xyes +then : + printf "%s\n" "#define HAVE_SYS_MOUNT_H 1" >>confdefs.h + +fi ac_fn_c_check_header_compile "$LINENO" "linux/fiemap.h" "ac_cv_header_linux_fiemap_h" "$ac_includes_default" if test "x$ac_cv_header_linux_fiemap_h" = xyes @@ -9198,7 +9204,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by SnapRAID CLI $as_me 14.0, which was +This file was extended by SnapRAID CLI $as_me 14.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9263,7 +9269,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -SnapRAID CLI config.status 14.0 +SnapRAID CLI config.status 14.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/configure.ac new/snapraid-14.1/configure.ac --- old/snapraid-14.0/configure.ac 2026-03-09 16:16:49.000000000 +0100 +++ new/snapraid-14.1/configure.ac 2026-03-31 12:47:02.000000000 +0200 @@ -49,7 +49,7 @@ AC_CHECK_HEADERS([fcntl.h stddef.h stdint.h stdlib.h string.h limits.h time.h sys/time.h]) AC_CHECK_HEADERS([unistd.h getopt.h io.h inttypes.h byteswap.h]) AC_CHECK_HEADERS([pthread.h math.h]) -AC_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/sysmacros.h sys/mkdev.h]) +AC_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/sysmacros.h sys/mkdev.h sys/mount.h]) AC_CHECK_HEADERS([linux/fiemap.h linux/fs.h mach/mach_time.h execinfo.h]) dnl Checks for typedefs, structures, and compiler characteristics. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/doc/snapraid.1 new/snapraid-14.1/doc/snapraid.1 --- old/snapraid-14.0/doc/snapraid.1 2026-03-17 00:49:40.000000000 +0100 +++ new/snapraid-14.1/doc/snapraid.1 2026-03-31 12:47:57.000000000 +0200 @@ -2030,7 +2030,23 @@ This affects only the printed file names; if you redirect the console output to a file, the resulting file is always in UTF\-8 format. +.SH EXIT CODE +SnapRAID terminates with the following error codes: +.RS 0 +.PD 0 +.HP 4 +.I 0 +Everything OK. +.HP 4 +.I 1 +The command encountered some errors. +.HP 4 +.I 2 +The \`diff\` command found everything is OK, but a \`sync\` is +needed. +.PD +.RE .SH COPYRIGHT -This file is Copyright (C) 2025 Andrea Mazzoleni +This file is Copyright (C) 2026 Andrea Mazzoleni .SH SEE ALSO snapraid_log(1), snapraidd(1), rsync(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/doc/snapraid.d new/snapraid-14.1/doc/snapraid.d --- old/snapraid-14.0/doc/snapraid.d 2026-03-17 00:48:55.000000000 +0100 +++ new/snapraid-14.1/doc/snapraid.d 2026-03-30 22:44:50.000000000 +0200 @@ -1573,8 +1573,16 @@ redirect the console output to a file, the resulting file is always in UTF-8 format. +Exit Code + SnapRAID terminates with the following error codes: + + 0 - Everything OK. + 1 - The command encountered some errors. + 2 - The `diff` command found everything is OK, but a `sync` is + needed. + Copyright - This file is Copyright (C) 2025 Andrea Mazzoleni + This file is Copyright (C) 2026 Andrea Mazzoleni See Also snapraid_log(1), snapraidd(1), rsync(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/snapraid-14.0/doc/snapraid.txt new/snapraid-14.1/doc/snapraid.txt --- old/snapraid-14.0/doc/snapraid.txt 2026-03-17 00:49:40.000000000 +0100 +++ new/snapraid-14.1/doc/snapraid.txt 2026-03-31 12:49:12.000000000 +0200 @@ -1689,13 +1689,24 @@ in UTF-8 format. -13 COPYRIGHT +13 EXIT CODE ============ -This file is Copyright (C) 2025 Andrea Mazzoleni +SnapRAID terminates with the following error codes: +0 - Everything OK. +1 - The command encountered some errors. +2 - The `diff` command found everything is OK, but a `sync` is + needed. -14 SEE ALSO + +14 COPYRIGHT +============ + +This file is Copyright (C) 2026 Andrea Mazzoleni + + +15 SEE ALSO =========== snapraid_log(1), snapraidd(1), rsync(1)
