Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package fsarchiver for openSUSE:Factory 
checked in at 2026-02-02 14:56:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fsarchiver (Old)
 and      /work/SRC/openSUSE:Factory/.fsarchiver.new.1995 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "fsarchiver"

Mon Feb  2 14:56:57 2026 rev:31 rq:1330289 version:0.8.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/fsarchiver/fsarchiver.changes    2024-12-16 
19:17:55.124409877 +0100
+++ /work/SRC/openSUSE:Factory/.fsarchiver.new.1995/fsarchiver.changes  
2026-02-02 14:57:19.671929089 +0100
@@ -1,0 +2,7 @@
+Sun Feb  1 21:39:51 UTC 2026 - Michael Vetter <[email protected]>
+
+- Update to 0.8.9:
+  * Add support for xfs and btrfs features up to linux-6.18
+- Drop fsarchiver-types.patch
+
+-------------------------------------------------------------------

Old:
----
  fsarchiver-0.8.8.tar.gz
  fsarchiver-types.patch

New:
----
  fsarchiver-0.8.9.tar.gz

----------(Old B)----------
  Old:  * Add support for xfs and btrfs features up to linux-6.18
- Drop fsarchiver-types.patch
----------(Old E)----------

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

Other differences:
------------------
++++++ fsarchiver.spec ++++++
--- /var/tmp/diff_new_pack.3aAfqW/_old  2026-02-02 14:57:20.631969668 +0100
+++ /var/tmp/diff_new_pack.3aAfqW/_new  2026-02-02 14:57:20.631969668 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package fsarchiver
 #
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           fsarchiver
-Version:        0.8.8
+Version:        0.8.9
 Release:        0
 Summary:        Filesystem Archiver
 License:        GPL-2.0-only
@@ -25,8 +25,6 @@
 URL:            http://www.fsarchiver.org
 Source0:        
https://github.com/fdupoux/fsarchiver/releases/download/%{version}/%{name}-%{version}.tar.gz
 Source1:        HOWTO
-# PATCH-FIX-UPSTREAM Remove conflicting uses of reserved identifiers
-Patch0:         fsarchiver-types.patch
 BuildRequires:  libgcrypt-devel
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(blkid)

++++++ fsarchiver-0.8.8.tar.gz -> fsarchiver-0.8.9.tar.gz ++++++
++++ 2540 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/ChangeLog new/fsarchiver-0.8.9/ChangeLog
--- old/fsarchiver-0.8.8/ChangeLog      2024-12-14 10:13:37.000000000 +0100
+++ new/fsarchiver-0.8.9/ChangeLog      2026-02-01 15:58:35.000000000 +0100
@@ -1,5 +1,7 @@
 fsarchiver: Filesystem Archiver for Linux [http://www.fsarchiver.org]
 =====================================================================
+* 0.8.9 (2026-02-01):
+  - Add support for xfs and btrfs features up to linux-6.18
 * 0.8.8 (2024-12-14):
   - Provide compatibility with e2fsprogs >= 1.47.2 (#154)
   - Accept -j arguments greater than FSA_MAX_COMPJOBS (#146)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/INSTALL new/fsarchiver-0.8.9/INSTALL
--- old/fsarchiver-0.8.8/INSTALL        2024-12-14 10:28:34.000000000 +0100
+++ new/fsarchiver-0.8.9/INSTALL        2026-02-01 16:09:06.000000000 +0100
@@ -13,7 +13,10 @@
 
 should configure, build, and install this package.  The first line,
 which bootstraps, is intended for developers; when building from
-distribution tarballs it does nothing and can be skipped.
+distribution tarballs it does nothing and can be skipped.  A package
+might name the bootstrapping script differently; if the name is
+‘autogen.sh’, for example, the first line should say ‘./autogen.sh’
+instead of ‘./bootstrap’.
 
    The following more-detailed instructions are generic; see the
 ‘README’ file for instructions specific to this package.  Some packages
@@ -25,23 +28,22 @@
    Many packages have scripts meant for developers instead of ordinary
 builders, as they may use developer tools that are less commonly
 installed, or they may access the network, which has privacy
-implications.  If the ‘bootstrap’ shell script exists, it attempts to
-build the ‘configure’ shell script and related files, possibly using
-developer tools or the network.  Because the output of ‘bootstrap’ is
-system-independent, it is normally run by a package developer so that
-its output can be put into the distribution tarball and ordinary
-builders and users need not run ‘bootstrap’.  Some packages have
-commands like ‘./autopull.sh’ and ‘./autogen.sh’ that you can run
-instead of ‘./bootstrap’, for more fine-grained control over
-bootstrapping.
-
-   The ‘configure’ shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a ‘Makefile’ in each directory of the package.
-It may also create one or more ‘.h’ files containing system-dependent
-definitions.  Finally, it creates a shell script ‘config.status’ that
-you can run in the future to recreate the current configuration, and a
-file ‘config.log’ containing output useful for debugging ‘configure’.
+implications.  These scripts attempt to bootstrap by building the
+‘configure’ script and related files, possibly using developer tools or
+the network.  Because the output of bootstrapping is system-independent,
+it is normally run by a package developer so that its output can be put
+into the distribution tarball and ordinary builders and users need not
+bootstrap.  Some packages have commands like ‘./autopull.sh’ and
+‘./autogen.sh’ that you can run instead of ‘./bootstrap’, for more
+fine-grained control over bootstrapping.
+
+   The ‘configure’ script attempts to guess correct values for various
+system-dependent variables used during compilation.  It uses those
+values to create a ‘Makefile’ in each directory of the package.  It may
+also create one or more ‘.h’ files containing system-dependent
+definitions.  Finally, it creates a script ‘config.status’ that you can
+run in the future to recreate the current configuration, and a file
+‘config.log’ containing output useful for debugging ‘configure’.
 
    It can also use an optional file (typically called ‘config.cache’ and
 enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves the
@@ -64,9 +66,10 @@
   1. ‘cd’ to the directory containing the package’s source code.
 
   2. If this is a developer checkout and file ‘configure’ does not yet
-     exist, type ‘./bootstrap’ to create it.  You may need special
-     developer tools and network access to bootstrap, and the network
-     access may have privacy implications.
+     exist, run the bootstrapping script (typically ‘./bootstrap’ or
+     ‘./autogen.sh’) to bootstrap and create the file.  You may need
+     special developer tools and network access to bootstrap, and the
+     network access may have privacy implications.
 
   3. Type ‘./configure’ to configure the package for your system.  This
      might take a while.  While running, ‘configure’ prints messages
@@ -101,6 +104,18 @@
   9. If the package follows the GNU Coding Standards, you can type ‘make
      uninstall’ to remove the installed files.
 
+Installation Prerequisites
+==========================
+
+   Installation requires a POSIX-like environment with a shell and at
+least the following standard utilities:
+
+     awk cat cp diff echo expr false ls mkdir mv printf pwd rm rmdir sed
+     sort test tr
+
+This package’s installation may need other standard utilities such as
+‘grep’, ‘make’, ‘sleep’ and ‘touch’, along with compilers like ‘gcc’.
+
 Compilers and Options
 =====================
 
@@ -356,7 +371,7 @@
 Copyright notice
 ================
 
-   Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2024 Free Software
+   Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2025 Free Software
 Foundation, Inc.
 
    Copying and distribution of this file, with or without modification,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/compile new/fsarchiver-0.8.9/compile
--- old/fsarchiver-0.8.8/compile        2024-12-14 10:28:34.000000000 +0100
+++ new/fsarchiver-0.8.9/compile        2026-02-01 16:09:06.000000000 +0100
@@ -1,9 +1,9 @@
 #! /bin/sh
 # Wrapper for compilers which do not understand '-c -o'.
 
-scriptversion=2024-06-19.01; # UTC
+scriptversion=2025-06-18.21; # UTC
 
-# Copyright (C) 1999-2024 Free Software Foundation, Inc.
+# Copyright (C) 1999-2025 Free Software Foundation, Inc.
 # Written by Tom Tromey <[email protected]>.
 #
 # This program is free software; you can redistribute it and/or modify
@@ -37,11 +37,11 @@
 
 file_conv=
 
-# func_file_conv build_file lazy
+# func_file_conv build_file unneeded_conversions
 # Convert a $build file to $host form and store it in $file
 # Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
+# type is listed in (the comma separated) UNNEEDED_CONVERSIONS, no
+# conversion will take place.
 func_file_conv ()
 {
   file=$1
@@ -51,9 +51,20 @@
        # lazily determine how to convert abs files
        case `uname -s` in
          MINGW*)
-           file_conv=mingw
+           if test -n "$MSYSTEM" && (cygpath --version) >/dev/null 2>&1; then
+             # MSYS2 environment.
+             file_conv=cygwin
+           else
+             # Original MinGW environment.
+             file_conv=mingw
+           fi
            ;;
-         CYGWIN* | MSYS*)
+         MSYS*)
+           # Old MSYS environment, or MSYS2 with 32-bit MSYS2 shell.
+           file_conv=cygwin
+           ;;
+         CYGWIN*)
+           # Cygwin environment.
            file_conv=cygwin
            ;;
          *)
@@ -63,12 +74,14 @@
       fi
       case $file_conv/,$2, in
        *,$file_conv,*)
+         # This is the optimization mentioned above:
+         # If UNNEEDED_CONVERSIONS contains $file_conv, don't convert.
          ;;
        mingw/*)
          file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
          ;;
-       cygwin/* | msys/*)
-         file=`cygpath -m "$file" || echo "$file"`
+       cygwin/*)
+         file=`cygpath -w "$file" || echo "$file"`
          ;;
        wine/*)
          file=`winepath -w "$file" || echo "$file"`
@@ -343,9 +356,9 @@
 # Local Variables:
 # mode: shell-script
 # sh-indentation: 2
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp nil t)
 # time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-format: "%Y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/configure.ac new/fsarchiver-0.8.9/configure.ac
--- old/fsarchiver-0.8.8/configure.ac   2024-12-14 10:19:08.000000000 +0100
+++ new/fsarchiver-0.8.9/configure.ac   2026-02-01 15:57:07.000000000 +0100
@@ -1,25 +1,33 @@
 # Copyright (C) 2008-2010 Francois Dupoux
 # Distributed under the GPL-2 license (GNU General Public License version 2)
 
-AC_PREREQ(2.59)
+AC_PREREQ([2.72])
 
-AC_INIT([fsarchiver], 0.8.8)
-AC_DEFINE([PACKAGE_RELDATE], "2024-12-14", [Define the date of the release])
+AC_INIT([fsarchiver],[0.8.9])
+AC_DEFINE([PACKAGE_RELDATE], "2026-02-01", [Define the date of the release])
 AC_DEFINE([PACKAGE_FILEFMT], "FsArCh_002", [Define the version of the file 
format])
 AC_DEFINE([PACKAGE_VERSION_A], 0, [Major version number])
 AC_DEFINE([PACKAGE_VERSION_B], 8, [Medium version number])
-AC_DEFINE([PACKAGE_VERSION_C], 8, [Minor version number])
+AC_DEFINE([PACKAGE_VERSION_C], 9, [Minor version number])
 AC_DEFINE([PACKAGE_VERSION_D], 0, [Patch version number])
 
 AC_CANONICAL_HOST([])
 AC_CANONICAL_TARGET([])
 AM_INIT_AUTOMAKE
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-AM_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
 
-AC_ISC_POSIX
+AC_SEARCH_LIBS([strerror],[cposix])
 AC_PROG_CC
-AC_HEADER_STDC
+m4_warn([obsolete],
+[The preprocessor macro 'STDC_HEADERS' is obsolete.
+  Except in unusual embedded environments, you can safely include all
+  C89 headers unconditionally.])dnl
+# Autoupdate added the next two lines to ensure that your configure
+# script's behavior did not change.  They are probably safe to remove.
+AC_CHECK_INCLUDES_DEFAULT
+AC_PROG_EGREP
+
 AC_PROG_INSTALL
 AM_PROG_CC_C_O
 AC_SYS_LARGEFILE
@@ -39,12 +47,12 @@
 esac
 
 dnl 
=======================================================================================
-AC_CHECKING([for libz (library and header files)])
+AS_MESSAGE([checking for libz (library and header files)...])
 AC_CHECK_LIB([z], [compress], [LIBS="$LIBS -lz"],
     AC_MSG_ERROR([*** gzip library (libz) not found (you may also have to 
install zlib-devel)]))
 AC_CHECK_HEADERS(zlib.h)
 
-AC_CHECKING([for libbz2 (library and header files) ... ])
+AS_MESSAGE([checking for libbz2 (library and header files) ... ...])
 AC_CHECK_LIB([bz2], [BZ2_bzBuffToBuffCompress], [LIBS="$LIBS -lbz2"],
     AC_MSG_ERROR([*** bzip2 library (libbz2) not found or too old (you may 
also have to install bzip2-devel)]))
 AC_CHECK_HEADERS(bzlib.h)
@@ -68,7 +76,7 @@
 if test "x$enable_lzo" = "xyes"
 then
     AC_DEFINE([OPTION_LZO_SUPPORT], 1, [Define to 1 to enable the support for 
lzo compression])
-    AC_CHECKING([for liblzo2 (library and header files)])
+    AS_MESSAGE([checking for liblzo2 (library and header files)...])
     AC_CHECK_LIB([lzo2], [lzo1x_1_compress], [LIBS="$LIBS -llzo2"],
         AC_MSG_ERROR([*** lzo library (liblzo2) not found: please install 
liblzo (you may also have to install lzo-devel) or disable lzo support using 
--disable-lzo]))
     AC_CHECK_HEADERS(lzo/lzo1x.h)
@@ -82,7 +90,7 @@
 if test "x$enable_lz4" = "xyes"
 then
     AC_DEFINE([OPTION_LZ4_SUPPORT], 1, [Define to 1 to enable the support for 
lz4 compression])
-    AC_CHECKING([for lz4 (library and header files)])
+    AS_MESSAGE([checking for lz4 (library and header files)...])
     AC_CHECK_LIB([lz4], [LZ4_compress], [LIBS="$LIBS -llz4"], 
AC_MSG_ERROR([*** lz4 not found or disable lz4 support using --disable-lz4 ***] 
))
     AC_CHECK_HEADERS(lz4.h)
 fi
@@ -95,13 +103,13 @@
 if test "x$enable_zstd" = "xyes"
 then
     AC_DEFINE([OPTION_ZSTD_SUPPORT], 1, [Define to 1 to enable the support for 
zstd compression])
-    AC_CHECKING([for zstd (library and header files)])
+    AS_MESSAGE([checking for zstd (library and header files)...])
     AC_CHECK_LIB([zstd], [ZSTD_compress], [LIBS="$LIBS -lzstd"], 
AC_MSG_ERROR([*** zstd not found or disable zstd support using --disable-zstd 
***] ))
     AC_CHECK_HEADERS(zstd.h)
 fi
 
 dnl check libgcrypt (required for crypto and md5)
-AC_CHECKING([for libgcrypt (library and header files)])
+AS_MESSAGE([checking for libgcrypt (library and header files)...])
 AC_CHECK_LIB([gcrypt], [gcry_cipher_encrypt], [LIBS="$LIBS -lgcrypt 
-lgpg-error"], AC_MSG_ERROR([*** libgcrypt not found]))
 AC_CHECK_HEADERS(gcrypt.h)
 
@@ -125,7 +133,15 @@
 AC_CHECK_FUNCS(strerror open64 lstat64 stat64 fstatfs64 fstatvfs64 mempcpy 
lutimes)
 
 # checks for header files.
-AC_HEADER_STDC
+m4_warn([obsolete],
+[The preprocessor macro 'STDC_HEADERS' is obsolete.
+  Except in unusual embedded environments, you can safely include all
+  C89 headers unconditionally.])dnl
+# Autoupdate added the next two lines to ensure that your configure
+# script's behavior did not change.  They are probably safe to remove.
+AC_CHECK_INCLUDES_DEFAULT
+AC_PROG_EGREP
+
 
 dnl 
=======================================================================================
 dnl with-log-dir option.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/distrib/rpm/fsarchiver.spec 
new/fsarchiver-0.8.9/distrib/rpm/fsarchiver.spec
--- old/fsarchiver-0.8.8/distrib/rpm/fsarchiver.spec    2023-03-19 
15:35:09.000000000 +0100
+++ new/fsarchiver-0.8.9/distrib/rpm/fsarchiver.spec    2024-12-14 
10:42:38.000000000 +0100
@@ -1,5 +1,5 @@
 Name:          fsarchiver
-Version:       0.8.8
+Version:       0.8.9
 Release:       1%{?dist}
 Summary:       Safe and flexible file-system backup/deployment tool
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/missing new/fsarchiver-0.8.9/missing
--- old/fsarchiver-0.8.8/missing        2024-12-14 10:28:34.000000000 +0100
+++ new/fsarchiver-0.8.9/missing        2026-02-01 16:09:06.000000000 +0100
@@ -1,11 +1,11 @@
 #! /bin/sh
 # Common wrapper for a few potentially missing GNU and other programs.
 
-scriptversion=2024-06-07.14; # UTC
+scriptversion=2025-06-18.21; # UTC
 
 # shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells
 
-# Copyright (C) 1996-2024 Free Software Foundation, Inc.
+# Copyright (C) 1996-2025 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <[email protected]>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
@@ -228,9 +228,9 @@
 exit $st
 
 # Local variables:
-# eval: (add-hook 'before-save-hook 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp nil t)
 # time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-format: "%Y-%02m-%02d.%02H"
 # time-stamp-time-zone: "UTC0"
 # time-stamp-end: "; # UTC"
 # End:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/src/fs_btrfs.c new/fsarchiver-0.8.9/src/fs_btrfs.c
--- old/fsarchiver-0.8.8/src/fs_btrfs.c 2023-03-19 14:12:31.000000000 +0100
+++ new/fsarchiver-0.8.9/src/fs_btrfs.c 2026-02-01 16:00:19.000000000 +0100
@@ -41,27 +41,49 @@
     // to preserve the filesystem attributes, fsa must know all the features 
including the COMPAT ones
     if (compat & ~FSA_BTRFS_FEATURE_COMPAT_SUPP)
         return -1;
-    
+
     if (incompat & ~FSA_BTRFS_FEATURE_INCOMPAT_SUPP)
         return -1;
-    
+
     if (ro_compat & ~FSA_BTRFS_FEATURE_COMPAT_RO_SUPP)
         return -1;
-    
+
     return 0;
 }
 
 int btrfs_mkfs(cdico *d, char *partition, char *fsoptions, char *mkfslabel, 
char *mkfsuuid)
 {
+    char stdoutbuf[2048];
     char command[2048];
     char buffer[2048];
     char options[2048];
+    char features[2048];
+    u64 btrfstoolver;
     u64 compat_flags;
     u64 incompat_flags;
     u64 compat_ro_flags;
+    int x, y, z;
     int exitst;
     u64 temp64;
-    
+
+    memset(features, 0, sizeof(features));
+    memset(options, 0, sizeof(options));
+
+    // ---- check that mkfs is installed and get its version
+    if (exec_command(command, sizeof(command), NULL, stdoutbuf, 
sizeof(stdoutbuf), NULL, 0, "btrfs --version")!=0)
+    {   errprintf("btrfs command not found. please install btrfs-progs on your 
system or check the PATH.\n");
+        return -1;
+    }
+
+    x=y=z=0;
+    sscanf(stdoutbuf, "btrfs-progs v%d.%d.%d", &x, &y, &z);
+    if (x==0 && y==0)
+    {   errprintf("Can't parse btrfs-progs version number: x=y=0\n");
+        return -1;
+    }
+    btrfstoolver=PROGVER(x,y,z);
+    msgprintf(MSG_VERB2, "Detected btrfs-progs version %d.%d.%d\n", x, y, z);
+
     // ---- get original filesystem features (if the original filesystem was a 
btrfs)
     if (dico_get_u64(d, 0, FSYSHEADKEY_BTRFSFEATURECOMPAT, &compat_flags)!=0 ||
         dico_get_u64(d, 0, FSYSHEADKEY_BTRFSFEATUREINCOMPAT, 
&incompat_flags)!=0 ||
@@ -71,22 +93,36 @@
         incompat_flags=0;
         compat_ro_flags=0;
     }
-    
+
     // ---- check there is no unsuported feature in that filesystem
     if (btrfs_check_compatibility(compat_flags, incompat_flags, 
compat_ro_flags)!=0)
     {   errprintf("this filesystem has features which are not supported by 
this fsarchiver version.\n");
         return -1;
     }
-    
+
     // ---- there is no option that just displays the version and return 0 in 
mkfs.btrfs-0.16
     if (exec_command(command, sizeof(command), NULL, NULL, 0, NULL, 0, 
"mkfs.btrfs")!=0)
     {   errprintf("mkfs.btrfs not found. please install btrfs-progs on your 
system or check the PATH.\n");
         return -1;
     }
-    
-    // ---- set the advanced filesystem settings from the dico
-    memset(options, 0, sizeof(options));
 
+    if (btrfstoolver >= PROGVER(5,12,0))
+    {
+        if (incompat_flags & BTRFS_FEATURE_INCOMPAT_ZONED)
+            strlcatf(features, sizeof(features), "zoned,");
+        else
+            strlcatf(features, sizeof(features), "^zoned,");
+    }
+
+    if (btrfstoolver >= PROGVER(6,7,0))
+    {
+        if (incompat_flags & BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA)
+            strlcatf(features, sizeof(features), "squota,");
+        else
+            strlcatf(features, sizeof(features), "^squota,");
+    }
+
+    // ---- set the advanced filesystem settings from the dico
     if (strlen(mkfslabel) > 0)
         strlcatf(options, sizeof(options), " -L '%s' ", mkfslabel);
     else if (dico_get_string(d, 0, FSYSHEADKEY_FSLABEL, buffer, 
sizeof(buffer))==0 && strlen(buffer)>0)
@@ -97,6 +133,9 @@
     else if (dico_get_string(d, 0, FSYSHEADKEY_FSUUID, buffer, 
sizeof(buffer))==0)
         strlcatf(options, sizeof(options), " -U '%s' ", buffer);
 
+    if (strlen(features) > 0)
+        strlcatf(options, sizeof(options), " -O '%s' ", features);
+
     if (dico_get_u64(d, 0, FSYSHEADKEY_FSBTRFSSECTORSIZE, &temp64)==0)
         strlcatf(options, sizeof(options), " -s %ld ", (long)temp64);
 
@@ -107,7 +146,7 @@
     {   errprintf("command [%s] failed\n", command);
         return -1;
     }
-    
+
     return 0;
 }
 
@@ -118,35 +157,35 @@
     u16 temp32;
     int ret=0;
     int fd;
-    
+
     if ((fd=open64(devname, O_RDONLY|O_LARGEFILE))<0)
     {   ret=-1;
         errprintf("cannot open(%s, O_RDONLY)\n", devname);
         goto btrfs_read_sb_return;
     }
-    
+
     if (lseek(fd, BTRFS_SUPER_INFO_OFFSET, SEEK_SET)!=BTRFS_SUPER_INFO_OFFSET)
     {   ret=-2;
         errprintf("cannot lseek(fd, BTRFS_SUPER_INFO_OFFSET, SEEK_SET) on 
%s\n", devname);
         goto btrfs_read_sb_close;
     }
-    
+
     if (read(fd, &sb, sizeof(sb))!=sizeof(sb))
     {   ret=-3;
         errprintf("cannot read the btrfs superblock on device [%s]\n", 
devname);
         goto btrfs_read_sb_close;
     }
-    
+
     if (strncmp((char*)&sb.magic, BTRFS_MAGIC, sizeof(sb.magic))!=0)
     {   ret=-4;
         errprintf("magic different from expectations superblock on [%s]: 
magic=[%.8s], expected=[%.8s]\n", devname, (char*)&sb.magic, BTRFS_MAGIC);
         goto btrfs_read_sb_close;
     }
-    
+
     // ---- label
     msgprintf(MSG_DEBUG1, "btrfs_label=[%s]\n", sb.label);
     dico_add_string(d, 0, FSYSHEADKEY_FSLABEL, (char*)sb.label);
-    
+
     // ---- uuid
     /*if ((str=e2p_uuid2str(sb.dev_item.fsid))!=NULL)
         dico_add_string(d, 0, FSYSHEADKEY_FSUUID, str);*/
@@ -154,12 +193,12 @@
     uuid_unparse_lower((u8*)sb.dev_item.fsid, uuid);
     dico_add_string(d, 0, FSYSHEADKEY_FSUUID, uuid);
     msgprintf(MSG_DEBUG1, "btrfs_uuid=[%s]\n", uuid);
-    
+
     // ---- sector size
     temp32=le32_to_cpu(sb.sectorsize);
     dico_add_u64(d, 0, FSYSHEADKEY_FSBTRFSSECTORSIZE, temp32);
     msgprintf(MSG_DEBUG1, "btrfs_sectorsize=[%ld]\n", (long)temp32);
-    
+
     // ---- filesystem features
     dico_add_u64(d, 0, FSYSHEADKEY_BTRFSFEATURECOMPAT, 
le64_to_cpu(sb.compat_flags));
     dico_add_u64(d, 0, FSYSHEADKEY_BTRFSFEATUREINCOMPAT, 
le64_to_cpu(sb.incompat_flags));
@@ -168,10 +207,10 @@
     {   errprintf("this filesystem has features which are not supported by 
this fsarchiver version.\n");
         return -1;
     }
-    
+
     // ---- minimum fsarchiver version required to restore
     dico_add_u64(d, 0, FSYSHEADKEY_MINFSAVERSION, FSA_VERSION_BUILD(0, 6, 4, 
0));
-    
+
 btrfs_read_sb_close:
     close(fd);
 btrfs_read_sb_return:
@@ -192,25 +231,25 @@
 {
     struct btrfs_super_block sb;
     int fd;
-    
+
     if ((fd=open64(devname, O_RDONLY|O_LARGEFILE))<0)
         return false;
-    
+
     if (lseek(fd, BTRFS_SUPER_INFO_OFFSET, SEEK_SET)!=BTRFS_SUPER_INFO_OFFSET)
     {   close(fd);
         return false;
     }
-    
+
     if (read(fd, &sb, sizeof(sb))!=sizeof(sb))
     {   close(fd);
         return false;
     }
-    
+
     if (strncmp((char*)&sb.magic, BTRFS_MAGIC, sizeof(sb.magic))!=0)
     {   close(fd);
         return false;
     }
-    
+
     close(fd);
     return true;
 }
@@ -219,7 +258,7 @@
 {
     if (!reqopt || !badopt)
         return -1;
-    
+
     strlist_add(badopt, "noacl");
     return 0;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/src/fs_btrfs.h new/fsarchiver-0.8.9/src/fs_btrfs.h
--- old/fsarchiver-0.8.8/src/fs_btrfs.h 2023-03-19 14:12:31.000000000 +0100
+++ new/fsarchiver-0.8.9/src/fs_btrfs.h 2026-02-01 15:42:57.000000000 +0100
@@ -48,6 +48,9 @@
 #define BTRFS_FEATURE_INCOMPAT_METADATA_UUID    (1ULL << 10)
 #define BTRFS_FEATURE_INCOMPAT_RAID1C34         (1ULL << 11)
 #define BTRFS_FEATURE_INCOMPAT_ZONED            (1ULL << 12)
+#define BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2   (1ULL << 13)
+#define BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE (1ULL << 14)
+#define BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA     (1ULL << 16)
 
 // compat flags: btrfs features that this fsarchiver version supports
 #define FSA_BTRFS_FEATURE_COMPAT_SUPP           0ULL
@@ -70,7 +73,10 @@
          BTRFS_FEATURE_INCOMPAT_NO_HOLES |              \
          BTRFS_FEATURE_INCOMPAT_METADATA_UUID |         \
          BTRFS_FEATURE_INCOMPAT_RAID1C34 |              \
-         BTRFS_FEATURE_INCOMPAT_ZONED)
+         BTRFS_FEATURE_INCOMPAT_ZONED |                 \
+         BTRFS_FEATURE_INCOMPAT_EXTENT_TREE_V2 |        \
+         BTRFS_FEATURE_INCOMPAT_RAID_STRIPE_TREE |      \
+         BTRFS_FEATURE_INCOMPAT_SIMPLE_QUOTA)
 
 // disk layout definitions
 #define BTRFS_SUPER_MAGIC 0x9123683E
@@ -99,7 +105,7 @@
     return BTRFS_SUPER_INFO_OFFSET;
 }
 
-struct btrfs_dev_item 
+struct btrfs_dev_item
 {
     /* the internal btrfs device id */
     __le64 devid;
@@ -151,7 +157,7 @@
  * the super block basically lists the main trees of the FS
  * it currently lacks any block count etc etc
  */
-struct btrfs_super_block 
+struct btrfs_super_block
 {
     u8 csum[BTRFS_CSUM_SIZE];
     /* the first 4 fields must match struct btrfs_header */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/src/fs_xfs.c new/fsarchiver-0.8.9/src/fs_xfs.c
--- old/fsarchiver-0.8.8/src/fs_xfs.c   2023-03-19 14:12:31.000000000 +0100
+++ new/fsarchiver-0.8.9/src/fs_xfs.c   2026-02-01 14:22:56.000000000 +0100
@@ -273,6 +273,34 @@
         strlcatf(mkfsopts, sizeof(mkfsopts), " -i nrext64=%d ", (int)optval);
     }
 
+    // Determine if the "exchange range" option should be enabled
+    if (xfstoolsver >= PROGVER(6,10,0))
+    {
+        optval = !!(sb_features_incompat & XFS_SB_FEAT_INCOMPAT_EXCHRANGE);
+        strlcatf(mkfsopts, sizeof(mkfsopts), " -i exchange=%d ", (int)optval);
+    }
+
+    // Determine if the "directory parent pointers" option should be enabled
+    if (xfstoolsver >= PROGVER(6,10,0))
+    {
+        optval = !!(sb_features_incompat & XFS_SB_FEAT_INCOMPAT_PARENT);
+        strlcatf(mkfsopts, sizeof(mkfsopts), " -n parent=%d ", (int)optval);
+    }
+
+    // Determine if the "metadata directory" option should be enabled
+    if (xfstoolsver >= PROGVER(6,13,0))
+    {
+        optval = !!(sb_features_incompat & XFS_SB_FEAT_INCOMPAT_METADIR);
+        strlcatf(mkfsopts, sizeof(mkfsopts), " -m metadir=%d ", (int)optval);
+    }
+
+    // Determine if the "zoned" option should be enabled
+    if (xfstoolsver >= PROGVER(6,15,0))
+    {
+        optval = !!(sb_features_incompat & XFS_SB_FEAT_INCOMPAT_ZONED);
+        strlcatf(mkfsopts, sizeof(mkfsopts), " -r zoned=%d ", (int)optval);
+    }
+
     // ---- mkfsopt from command line
     strlcatf(mkfsopts, sizeof(mkfsopts), " %s ", fsoptions);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/fsarchiver-0.8.8/src/fs_xfs.h new/fsarchiver-0.8.9/src/fs_xfs.h
--- old/fsarchiver-0.8.8/src/fs_xfs.h   2023-03-19 14:12:31.000000000 +0100
+++ new/fsarchiver-0.8.9/src/fs_xfs.h   2026-02-01 14:22:56.000000000 +0100
@@ -65,7 +65,7 @@
 
 typedef int32_t       xfs_suminfo_t;  /* type of bitmap summary info */
 typedef int32_t       xfs_rtword_t;   /* word type for bitmap manipulations */
- 
+
 typedef int64_t       xfs_lsn_t;      /* log sequence number */
 typedef int32_t       xfs_tid_t;      /* transaction identifier */
 
@@ -192,6 +192,11 @@
 #define XFS_SB_FEAT_INCOMPAT_BIGTIME      (1 << 3)  /* large timestamps */
 #define XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR  (1 << 4)  /* needs xfs_repair */
 #define XFS_SB_FEAT_INCOMPAT_NREXT64      (1 << 5)  /* large extent counters */
+#define XFS_SB_FEAT_INCOMPAT_EXCHRANGE    (1 << 6)  /* exchangerange supported 
*/
+#define XFS_SB_FEAT_INCOMPAT_PARENT       (1 << 7)  /* parent pointers */
+#define XFS_SB_FEAT_INCOMPAT_METADIR      (1 << 8)  /* metadata dir tree */
+#define XFS_SB_FEAT_INCOMPAT_ZONED        (1 << 9)  /* zoned RT allocator */
+#define XFS_SB_FEAT_INCOMPAT_ZONE_GAPS    (1 << 10) /* RTGs have LBA gaps */
 
 // features supported by the current fsarchiver version
 #define FSA_XFS_FEATURE_COMPAT_SUPP       (u64)(0)
@@ -204,7 +209,12 @@
                                                 
XFS_SB_FEAT_INCOMPAT_META_UUID|\
                                                 XFS_SB_FEAT_INCOMPAT_BIGTIME|\
                                                 
XFS_SB_FEAT_INCOMPAT_NEEDSREPAIR|\
-                                                XFS_SB_FEAT_INCOMPAT_NREXT64)
+                                                XFS_SB_FEAT_INCOMPAT_NREXT64|\
+                                                
XFS_SB_FEAT_INCOMPAT_EXCHRANGE|\
+                                                XFS_SB_FEAT_INCOMPAT_PARENT|\
+                                                XFS_SB_FEAT_INCOMPAT_METADIR|\
+                                                XFS_SB_FEAT_INCOMPAT_ZONED|\
+                                                XFS_SB_FEAT_INCOMPAT_ZONE_GAPS)
 #define FSA_XFS_FEATURE_LOG_INCOMPAT_SUPP (u64)(0)
 
 #endif // __FS_XFS_H__

Reply via email to