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-10-28 17:48:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/snapraid (Old)
 and      /work/SRC/openSUSE:Factory/.snapraid.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "snapraid"

Wed Oct 28 17:48:51 2026 rev:14 rq:1393292 version:15.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/snapraid/snapraid.changes        2026-10-21 
20:53:48.978712807 +0200
+++ /work/SRC/openSUSE:Factory/.snapraid.new.2252680/snapraid.changes   
2026-10-28 17:48:58.879173113 +0100
@@ -1,0 +2,17 @@
+Wed Oct 28 07:32:46 UTC 2026 - Paolo Stivanin <[email protected]>
+
+- Update to 15.1:
+  * Add synthetic device IDs on Linux, allowing SnapRAID Daemon to
+    preserve history for devices without unique hardware IDs while
+    they remain connected within the same boot.
+  * Fix a failed internal inconsistency check when '--gui-touch-before'
+    is used before the first sync when no content file exists yet.
+    Also ensure that commands that can save the content file ('touch',
+    'scrub', 'rehash', 'rewrite') fail with a clear error message if the
+    array has not been synced yet. This fix is required by
+    SnapRAID-Daemon.
+  * Make test and doc variables in Makefile.am compatible with BSD make,
+    allowing builds, tests, and documentation generation on BSD systems
+    without requiring GNU make.
+
+-------------------------------------------------------------------

Old:
----
  snapraid-15.0.tar.gz

New:
----
  snapraid-15.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ snapraid.spec ++++++
--- /var/tmp/diff_new_pack.Sm5WqM/_old  2026-10-28 17:49:00.305232771 +0100
+++ /var/tmp/diff_new_pack.Sm5WqM/_new  2026-10-28 17:49:00.306232813 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           snapraid
-Version:        15.0
+Version:        15.1
 Release:        0
 Summary:        Disk array backup for many large rarely-changed files
 License:        GPL-3.0-or-later

++++++ snapraid-15.0.tar.gz -> snapraid-15.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/.version new/snapraid-15.1/.version
--- old/snapraid-15.0/.version  2026-10-16 00:03:58.000000000 +0200
+++ new/snapraid-15.1/.version  2026-10-22 21:48:34.000000000 +0200
@@ -1 +1 @@
-15.0
\ No newline at end of file
+15.1
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/HISTORY new/snapraid-15.1/HISTORY
--- old/snapraid-15.0/HISTORY   2026-10-01 19:09:57.000000000 +0200
+++ new/snapraid-15.1/HISTORY   2026-10-22 21:39:18.000000000 +0200
@@ -1,8 +1,23 @@
 SnapRAID HISTORY
 ================
 
-15.0 (Work in Progress)
-=======================
+15.1 2026/10
+============
+ * Add synthetic device IDs on Linux, allowing SnapRAID Daemon to
+   preserve history for devices without unique hardware IDs while
+   they remain connected within the same boot.
+ * Fix a failed internal inconsistency check when '--gui-touch-before'
+   is used before the first sync when no content file exists yet.
+   Also ensure that commands that can save the content file ('touch',
+   'scrub', 'rehash', 'rewrite') fail with a clear error message if the
+   array has not been synced yet. This fix is required by
+   SnapRAID-Daemon.
+ * Make test and doc variables in Makefile.am compatible with BSD make,
+   allowing builds, tests, and documentation generation on BSD systems
+   without requiring GNU make.
+
+15.0 2026/10
+============
  * Added support for automated filesystem snapshots to ensure data
    consistency and improve recovery reliability.
    When the 'snapshot' option is enabled, SnapRAID transparently manages
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/Makefile.am 
new/snapraid-15.1/Makefile.am
--- old/snapraid-15.0/Makefile.am       2026-10-08 13:16:29.000000000 +0200
+++ new/snapraid-15.1/Makefile.am       2026-10-18 22:29:14.000000000 +0200
@@ -228,13 +228,28 @@
 
 LANG_CODES = de es fr it ja ko pl pt ro ru sv uk zh
 
-LIST_D = doc/snapraid.d doc/snapraid_log.d $(patsubst %, doc/snapraid-%.d, 
$(LANG_CODES))
+LIST_LANG_D = \
+       doc/snapraid-de.d \
+       doc/snapraid-es.d \
+       doc/snapraid-fr.d \
+       doc/snapraid-it.d \
+       doc/snapraid-ja.d \
+       doc/snapraid-ko.d \
+       doc/snapraid-pl.d \
+       doc/snapraid-pt.d \
+       doc/snapraid-ro.d \
+       doc/snapraid-ru.d \
+       doc/snapraid-sv.d \
+       doc/snapraid-uk.d \
+       doc/snapraid-zh.d
 
-LIST_MAN = doc/snapraid.1 doc/snapraid_log.1 $(patsubst %, doc/snapraid-%.1, 
$(LANG_CODES))
+LIST_D = doc/snapraid.d doc/snapraid_log.d $(LIST_LANG_D)
 
-LIST_TXT = doc/snapraid.txt doc/snapraid_log.txt $(patsubst %, 
doc/snapraid-%.txt, $(LANG_CODES))
+LIST_MAN = $(LIST_D:.d=.1)
 
-LIST_XML = doc/snapraid.xml doc/snapraid_log.xml $(patsubst %, 
doc/snapraid-%.xml, $(LANG_CODES))
+LIST_TXT = $(LIST_D:.d=.txt)
+
+LIST_XML = $(LIST_D:.d=.xml)
 
 EXTRA_DIST = \
        autogen.sh autover.sh valgrind.supp \
@@ -385,8 +400,13 @@
 CHECKCOUNT_DEFAULT = 500
 endif # HAVE_POSIX
 
-CHECKCOUNT = $(if $(filter 1,$(SHORTCHECK)),500,$(CHECKCOUNT_DEFAULT))
-CHECKSIZE = $(if $(filter 1,$(SHORTCHECK)),100,4000)
+CHECKCOUNT_0 = $(CHECKCOUNT_DEFAULT)
+CHECKCOUNT_1 = 500
+CHECKCOUNT = $(CHECKCOUNT_$(SHORTCHECK))
+
+CHECKSIZE_0 = 4000
+CHECKSIZE_1 = 100
+CHECKSIZE = $(CHECKSIZE_$(SHORTCHECK))
 
 CONF = $(srcdir)/test/test-par6.conf
 THERMAL = $(srcdir)/test/test-par6-thermal.conf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/Makefile.in 
new/snapraid-15.1/Makefile.in
--- old/snapraid-15.0/Makefile.in       2026-10-16 00:02:29.000000000 +0200
+++ new/snapraid-15.1/Makefile.in       2026-10-22 21:47:05.000000000 +0200
@@ -590,10 +590,25 @@
        $(srcdir)/os/unix.h
 
 LANG_CODES = de es fr it ja ko pl pt ro ru sv uk zh
-LIST_D = doc/snapraid.d doc/snapraid_log.d $(patsubst %, doc/snapraid-%.d, 
$(LANG_CODES))
-LIST_MAN = doc/snapraid.1 doc/snapraid_log.1 $(patsubst %, doc/snapraid-%.1, 
$(LANG_CODES))
-LIST_TXT = doc/snapraid.txt doc/snapraid_log.txt $(patsubst %, 
doc/snapraid-%.txt, $(LANG_CODES))
-LIST_XML = doc/snapraid.xml doc/snapraid_log.xml $(patsubst %, 
doc/snapraid-%.xml, $(LANG_CODES))
+LIST_LANG_D = \
+       doc/snapraid-de.d \
+       doc/snapraid-es.d \
+       doc/snapraid-fr.d \
+       doc/snapraid-it.d \
+       doc/snapraid-ja.d \
+       doc/snapraid-ko.d \
+       doc/snapraid-pl.d \
+       doc/snapraid-pt.d \
+       doc/snapraid-ro.d \
+       doc/snapraid-ru.d \
+       doc/snapraid-sv.d \
+       doc/snapraid-uk.d \
+       doc/snapraid-zh.d
+
+LIST_D = doc/snapraid.d doc/snapraid_log.d $(LIST_LANG_D)
+LIST_MAN = $(LIST_D:.d=.1)
+LIST_TXT = $(LIST_D:.d=.txt)
+LIST_XML = $(LIST_D:.d=.xml)
 EXTRA_DIST = \
        autogen.sh autover.sh valgrind.supp \
        README AUTHORS HISTORY INSTALL BLUEBOX TODO CHECK INSTALL.windows \
@@ -687,8 +702,12 @@
 
 # Number of files to create
 @HAVE_POSIX_TRUE@CHECKCOUNT_DEFAULT = 1000
-CHECKCOUNT = $(if $(filter 1,$(SHORTCHECK)),500,$(CHECKCOUNT_DEFAULT))
-CHECKSIZE = $(if $(filter 1,$(SHORTCHECK)),100,4000)
+CHECKCOUNT_0 = $(CHECKCOUNT_DEFAULT)
+CHECKCOUNT_1 = 500
+CHECKCOUNT = $(CHECKCOUNT_$(SHORTCHECK))
+CHECKSIZE_0 = 4000
+CHECKSIZE_1 = 100
+CHECKSIZE = $(CHECKSIZE_$(SHORTCHECK))
 CONF = $(srcdir)/test/test-par6.conf
 THERMAL = $(srcdir)/test/test-par6-thermal.conf
 HOLE = $(srcdir)/test/test-par6-hole.conf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/TODO new/snapraid-15.1/TODO
--- old/snapraid-15.0/TODO      2026-09-30 08:59:23.000000000 +0200
+++ new/snapraid-15.1/TODO      2026-10-18 22:19:53.000000000 +0200
@@ -6,19 +6,23 @@
 16.x Releases
 =============
 
-* Use statx() instead of lstat() when scanning directories.
+* Support a `[power_control: off]` tag in `smartctl` options to disable power
+  management (`up` and `down`) on specific disks (e.g. for SAS drives that
+  fail to wake up on write). Emit an attribute tag in probe for 
snapraid-daemon.
+
+* Enable MuseAir and disable random seed
 
 * Add a new 'restore' command, similar to 'fix', that recovers a whole disk 
   using the same multithreaded approach as sync/scrub.
 
+* Use statx() instead of lstat() when scanning directories.
+
 * Integration with MergerFS ?
 
 * Restore ownership and permissions, at least in Unix.
 
 * Restore directory timestamps.
 
-* Enable MuseAir and disable random seed
-
 * Check Reliability Test. We can derive Failure probability from MBTF
 https://github.com/linuxhw/SMART
 https://github.com/linuxhw/EnterpriseDrive
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/cmdline/snapraid.c 
new/snapraid-15.1/cmdline/snapraid.c
--- old/snapraid-15.0/cmdline/snapraid.c        2026-10-07 09:04:46.000000000 
+0200
+++ new/snapraid-15.1/cmdline/snapraid.c        2026-10-18 11:07:27.000000000 
+0200
@@ -1530,7 +1530,8 @@
                if (state.opt.force_realloc)
                        state_locate_mark_tail_blocks_for_resync(&state, 
opt.parity_tail);
 
-               if (opt.gui_touch_before) {
+               /* skip touch itself until content is loaded and sync has 
initialized parity sizes */
+               if (opt.gui_touch_before && state_is_write_ready(&state)) {
                        ret = state_touch(&state);
 
                        /* save the new state if required */
@@ -1627,6 +1628,9 @@
        } else if (operation == OPERATION_REHASH) {
                state_read(&state);
 
+               /* prevent saving content with uninitialized parity split sizes 
*/
+               state_require_write_ready(&state);
+
                state_rehash(&state);
 
                /*
@@ -1645,6 +1649,9 @@
        } else if (operation == OPERATION_SCRUB) {
                state_read(&state);
 
+               /* prevent saving content with uninitialized parity split sizes 
*/
+               state_require_write_ready(&state);
+
                /* refresh the size info before the content write */
                state_refresh(&state);
 
@@ -1667,6 +1674,9 @@
        } else if (operation == OPERATION_REWRITE) {
                state_read(&state);
 
+               /* prevent saving content with uninitialized parity split sizes 
*/
+               state_require_write_ready(&state);
+
                /* intercept signals while operating */
                os_signal_init(app_signal_handler, app_signal_handler);
 
@@ -1682,6 +1692,9 @@
        } else if (operation == OPERATION_TOUCH) {
                state_read(&state);
 
+               /* prevent saving content with uninitialized parity split sizes 
*/
+               state_require_write_ready(&state);
+
                memory();
 
                ret = state_touch(&state);
@@ -1696,6 +1709,7 @@
                 */
                os_signal_init(app_signal_handler, app_signal_handler);
 
+               /* save the new state if required */
                if (state.need_write)
                        state_write(&state);
        } else if (operation == OPERATION_SPINUP) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/cmdline/state.c 
new/snapraid-15.1/cmdline/state.c
--- old/snapraid-15.0/cmdline/state.c   2026-10-07 09:04:46.000000000 +0200
+++ new/snapraid-15.1/cmdline/state.c   2026-10-18 11:14:39.000000000 +0200
@@ -171,7 +171,6 @@
        state->autosave = 0;
        state->need_write = 0;
        state->written = 0;
-       state->checked_read = 0;
        state->block_size = 256 * KIBI; /* default 256 KiB */
        state->raid_mode = RAID_MODE_CAUCHY_RAID;
        state->file_mode = ADVISE_DEFAULT;
@@ -5423,9 +5422,37 @@
                log_tag("content_info:read_unixtime:%" PRId64 "\n", 
(int64_t)st.st_mtime);
        }
        log_flush();
+}
+
+/**
+ * Check if all configured parity splits have persistent sizes.
+ */
+int state_is_write_ready(struct snapraid_state* state)
+{
+       unsigned l, s;
 
-       /* mark that we read the content file, and it passed all the checks */
-       state->checked_read = 1;
+       for (l = 0; l < state->level; ++l) {
+               for (s = 0; s < state->parity[l].split_mac; ++s) {
+                       if (state->parity[l].split_map[s].size == 
PARITY_SIZE_INVALID)
+                               return 0;
+               }
+       }
+
+       return 1;
+}
+
+/**
+ * Require sync to initialize parity sizes before commands that can save 
content.
+ * Check before modifying timestamps or metadata, as a later write could fail
+ * even if the command has no blocks to process (e.g. a missing content 
replica).
+ */
+void state_require_write_ready(struct snapraid_state* state)
+{
+       if (!state_is_write_ready(state)) {
+               log_fatal(EUSER, "The array has not been synced yet, or its 
parity configuration has changed.\n");
+               log_fatal(EUSER, "Run 'snapraid sync' before '%s'.\n", 
state->command);
+               exit(EXIT_FAILURE);
+       }
 }
 
 struct state_verify_thread_context {
@@ -5936,7 +5963,6 @@
        log_flush();
 
        state->need_write = 0; /* no write needed anymore */
-       state->checked_read = 0; /* what we wrote is not checked in read */
        state->written = 1;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/cmdline/state.h 
new/snapraid-15.1/cmdline/state.h
--- old/snapraid-15.0/cmdline/state.h   2026-10-15 15:35:31.000000000 +0200
+++ new/snapraid-15.1/cmdline/state.h   2026-10-18 11:14:39.000000000 +0200
@@ -130,7 +130,6 @@
        uint64_t autosave; /**< Autosave after the specified amount of data. 0 
to disable. */
        int need_write; /**< If the state is changed. */
        int written; /**< If the state was written at least one time */
-       int checked_read; /**< If the state was read and checked. */
        uint32_t block_size; /**< Block size in bytes. */
        unsigned raid_mode; /**< Raid mode to use. RAID_MODE_DEFAULT or 
RAID_MODE_ALTERNATE. */
        int file_mode; /**< File access mode. Combination of ADVISE_* flags. */
@@ -241,6 +240,16 @@
 void state_read(struct snapraid_state* state);
 
 /**
+ * Check if all configured parity splits have persistent sizes.
+ */
+int state_is_write_ready(struct snapraid_state* state);
+
+/**
+ * Require initialized parity split sizes before commands that can save 
content.
+ */
+void state_require_write_ready(struct snapraid_state* state);
+
+/**
  * Count the number of unsynced parity positions using an event sweep across 
extents.
  * Counts positions in [blockmin, blockmax). The caller must ensure that the 
disk list,
  * extent trees, and block states remain unchanged for the duration of the 
call.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/cmdline/unixapp.c 
new/snapraid-15.1/cmdline/unixapp.c
--- old/snapraid-15.0/cmdline/unixapp.c 2026-10-07 09:04:46.000000000 +0200
+++ new/snapraid-15.1/cmdline/unixapp.c 2026-10-22 21:32:09.000000000 +0200
@@ -4447,6 +4447,7 @@
 {
 #if HAVE_LINUX_DEVICE
        char path[PATH_MAX];
+       char boot_id[64];
        DIR* d = opendir("/sys/block");
        if (!d) {
                /* LCOV_EXCL_START */
@@ -4454,6 +4455,22 @@
                /* LCOV_EXCL_STOP */
        }
 
+       /* optional boot identity: failure must not affect hardware mappings */
+       if (sysattr("/proc/sys/kernel/random/boot_id", boot_id, 
sizeof(boot_id)) != 0 || strlen(boot_id) != 36) {
+               boot_id[0] = 0;
+       } else {
+               for (unsigned i = 0; i < 36; ++i) {
+                       if (i == 8 || i == 13 || i == 18 || i == 23) {
+                               if (boot_id[i] == '-')
+                                       continue;
+                       } else if (hexval(boot_id[i]) >= 0) {
+                               continue;
+                       }
+                       boot_id[0] = 0;
+                       break;
+               }
+       }
+
        struct dirent* dd;
        while (1) {
                char buf[256];
@@ -4517,6 +4534,20 @@
                if (sysattr(path, buf, sizeof(buf)) == 0 && buf[0] != 0) {
                        log_tag("map:/dev/%s:%s\n", dd->d_name, esc_tag(buf));
                }
+
+               /*
+                * This identifies the kernel device instance within one boot, 
not
+                * persistent hardware across reconnections. Missing attributes 
are optional.
+                */
+               if (boot_id[0] != 0) {
+                       pathprint(path, sizeof(path), "/sys/block/%s/diskseq", 
dd->d_name);
+                       if (sysattr(path, buf, sizeof(buf)) == 0) {
+                               char* end;
+                               unsigned long long diskseq = strtonll(buf, 
&end, 10);
+                               if (buf[0] >= '0' && buf[0] <= '9' && diskseq 
!= 0 && end != buf && *end == 0)
+                                       
log_tag("map:/dev/%s:linux-diskseq.%s.%llu\n", esc_tag(dd->d_name), 
esc_tag(boot_id), diskseq);
+                       }
+               }
        }
 
        closedir(d);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/snapraid-15.0/configure new/snapraid-15.1/configure
--- old/snapraid-15.0/configure 2026-10-16 00:02:28.000000000 +0200
+++ new/snapraid-15.1/configure 2026-10-22 21:47:04.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 15.0.
+# Generated by GNU Autoconf 2.72 for SnapRAID CLI 15.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='15.0'
-PACKAGE_STRING='SnapRAID CLI 15.0'
+PACKAGE_VERSION='15.1'
+PACKAGE_STRING='SnapRAID CLI 15.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL='https://www.snapraid.it'
 
@@ -1353,7 +1353,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 15.0 to adapt to many kinds of systems.
+'configure' configures SnapRAID CLI 15.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1425,7 +1425,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of SnapRAID CLI 15.0:";;
+     short | recursive ) echo "Configuration of SnapRAID CLI 15.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1559,7 +1559,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-SnapRAID CLI configure 15.0
+SnapRAID CLI configure 15.1
 generated by GNU Autoconf 2.72
 
 Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2145,7 +2145,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 15.0, which was
+It was created by SnapRAID CLI $as_me 15.1, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -3563,7 +3563,7 @@
 
 # Define the identity of the package.
  PACKAGE='snapraid'
- VERSION='15.0'
+ VERSION='15.1'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -10210,7 +10210,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 15.0, which was
+This file was extended by SnapRAID CLI $as_me 15.1, which was
 generated by GNU Autoconf 2.72.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -10279,7 +10279,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-SnapRAID CLI config.status 15.0
+SnapRAID CLI config.status 15.1
 configured by $0, generated by GNU Autoconf 2.72,
   with options \\"\$ac_cs_config\\"
 

Reply via email to