Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-dm-tree for openSUSE:Factory checked in at 2026-04-11 22:26:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-dm-tree (Old) and /work/SRC/openSUSE:Factory/.python-dm-tree.new.21863 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-dm-tree" Sat Apr 11 22:26:23 2026 rev:2 rq:1346058 version:0.1.10 Changes: -------- --- /work/SRC/openSUSE:Factory/python-dm-tree/python-dm-tree.changes 2024-07-11 20:30:12.050311118 +0200 +++ /work/SRC/openSUSE:Factory/.python-dm-tree.new.21863/python-dm-tree.changes 2026-04-11 22:31:34.809165946 +0200 @@ -1,0 +2,8 @@ +Sat Apr 11 11:59:42 UTC 2026 - Dirk Müller <[email protected]> + +- update to 0.1.10: + * Added support for Python 3.14. + * Dropped support for Python <3.10. +- remove-abseil.patch, use-system-pybind11.patch: refresh + +------------------------------------------------------------------- Old: ---- dm-tree-0.1.8.tar.gz New: ---- dm_tree-0.1.10.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-dm-tree.spec ++++++ --- /var/tmp/diff_new_pack.Fxd5WW/_old 2026-04-11 22:31:35.701202431 +0200 +++ /var/tmp/diff_new_pack.Fxd5WW/_new 2026-04-11 22:31:35.701202431 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-dm-tree # -# 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,41 +17,41 @@ Name: python-dm-tree -Version: 0.1.8 +Version: 0.1.10 Release: 0 Summary: Tree is a library for working with nested data structures License: Apache-2.0 URL: https://github.com/deepmind/tree -Source: https://files.pythonhosted.org/packages/source/d/dm-tree/dm-tree-%{version}.tar.gz +Source: https://files.pythonhosted.org/packages/source/d/dm_tree/dm_tree-%{version}.tar.gz # PATCH-FIX-UPSTREAM https://github.com/google-deepmind/tree/pull/50 Patch0: remove-abseil.patch # PATCH-FIX-UPSTREAM Based on https://github.com/google-deepmind/tree/pull/73 Patch1: use-system-pybind11.patch # PATCH-FIX-OPENSUSE Set debug build so we get symbols Patch2: set-debug.patch -BuildRequires: python-rpm-macros -BuildRequires: cmake -BuildRequires: gcc-c++ -BuildRequires: %{python_module pip} -BuildRequires: %{python_module setuptools} BuildRequires: %{python_module devel} +BuildRequires: %{python_module pip} BuildRequires: %{python_module pybind11-devel} +BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} +BuildRequires: cmake +BuildRequires: fdupes +BuildRequires: gcc-c++ +BuildRequires: python-rpm-macros # SECTION test requirements BuildRequires: %{python_module absl-py >= 0.6.1} BuildRequires: %{python_module attrs >= 18.2.0} -BuildRequires: %{python_module numpy >= 1.15.4} -BuildRequires: %{python_module wrapt >= 1.11.2} +BuildRequires: %{python_module numpy >= 1.21} BuildRequires: %{python_module pytest} +BuildRequires: %{python_module wrapt >= 1.11.2} # /SECTION -BuildRequires: fdupes %python_subpackages %description Tree is a library for working with nested data structures. %prep -%autosetup -p1 -n dm-tree-%{version} +%autosetup -p1 -n dm_tree-%{version} %build export CFLAGS="%{optflags}" ++++++ remove-abseil.patch ++++++ --- /var/tmp/diff_new_pack.Fxd5WW/_old 2026-04-11 22:31:35.789206030 +0200 +++ /var/tmp/diff_new_pack.Fxd5WW/_new 2026-04-11 22:31:35.797206357 +0200 @@ -1,22 +1,10 @@ -From edcb42955ad1970d0cb4924775323433ca88ce5d Mon Sep 17 00:00:00 2001 -From: Iurii Kemaev <[email protected]> -Date: Wed, 16 Jun 2021 01:45:45 -0700 -Subject: [PATCH] Remove abseil dependencies. - -PiperOrigin-RevId: 379669838 ---- - tree/BUILD | 2 -- - tree/tree.cc | 74 +++++++++++++++++++++++++++++++++------------------- - 2 files changed, 47 insertions(+), 29 deletions(-) - -Index: dm-tree-0.1.8/tree/tree.cc -=================================================================== ---- dm-tree-0.1.8.orig/tree/tree.cc -+++ dm-tree-0.1.8/tree/tree.cc -@@ -16,12 +16,11 @@ limitations under the License. - +--- dm_tree-0.1.10.orig/tree/tree.cc 2026-03-31 14:56:46.000000000 +0000 ++++ dm_tree-0.1.10/tree/tree.cc 2026-04-11 11:59:49.872591133 +0000 +@@ -17,13 +17,15 @@ #include <functional> + #include <atomic> #include <memory> ++#include <mutex> +#include <sstream> #include <string> #include <unordered_map> @@ -24,10 +12,14 @@ // logging -#include "absl/strings/str_cat.h" -#include "absl/strings/string_view.h" +-#include "absl/synchronization/mutex.h" ++ ++ ++ #include <pybind11/pybind11.h> #ifdef LOG -@@ -55,11 +54,26 @@ bool IsString(PyObject* o) { +@@ -57,11 +59,26 @@ return PyBytes_Check(o) || PyByteArray_Check(o) || PyUnicode_Check(o); } @@ -55,7 +47,7 @@ // __class__ is equivalent to type() for new style classes. // type() is equivalent to PyObject_Type() // (https://docs.python.org/3.5/c-api/object.html#c.PyObject_Type) -@@ -69,10 +83,10 @@ absl::string_view GetClassName(PyObject* +@@ -71,10 +88,10 @@ // __name__ is the value of `tp_name` after the last '.' // (https://docs.python.org/2/c-api/typeobj.html#c.PyTypeObject.tp_name) @@ -69,7 +61,7 @@ } return name; } -@@ -85,7 +99,7 @@ std::string PyObjectToString(PyObject* o +@@ -87,7 +104,7 @@ if (str) { std::string s(PyUnicode_AsUTF8(str)); Py_DECREF(str); @@ -78,7 +70,34 @@ } else { return "<failed to execute str() on object>"; } -@@ -436,7 +450,7 @@ void SetDifferentKeysError(PyObject* dic +@@ -115,7 +132,7 @@ + auto* type = Py_TYPE(o); + + { +- absl::MutexLock lock(mutex_); ++ std::lock_guard<std::mutex> lock(mutex_); + auto it = type_to_sequence_map_.find(type); + if (it != type_to_sequence_map_.end()) { + return it->second; +@@ -135,7 +152,7 @@ + // that are eligible for decref. As a precaution, we limit the size of the + // map to 1024. + { +- absl::MutexLock lock(mutex_); ++ std::lock_guard<std::mutex> lock(mutex_); + if (type_to_sequence_map_.size() < kMaxItemsInCache) { + Py_INCREF(type); + type_to_sequence_map_.insert({type, check_result}); +@@ -148,7 +165,7 @@ + private: + std::function<int(PyObject*)> ternary_predicate_; + std::unordered_map<PyTypeObject*, bool> type_to_sequence_map_; +- mutable absl::Mutex mutex_; ++ mutable std::mutex mutex_; + }; + + py::object GetCollectionsSequenceType() { +@@ -441,7 +458,7 @@ return; } *is_type_error = false; @@ -87,7 +106,7 @@ "The two dictionaries don't have the same set of keys. " "First structure has keys ", PyObjectToString(k1.get()), ", while second structure has keys ", -@@ -465,9 +479,9 @@ bool AssertSameStructureHelper(PyObject* +@@ -470,9 +487,9 @@ std::string non_seq_str = is_seq1 ? PyObjectToString(o2) : PyObjectToString(o1); *is_type_error = false; @@ -100,7 +119,7 @@ return true; } -@@ -510,7 +524,7 @@ bool AssertSameStructureHelper(PyObject* +@@ -515,7 +532,7 @@ Py_DECREF(same_tuples); if (not_same_tuples) { *is_type_error = true; @@ -109,7 +128,7 @@ "The two namedtuples don't have the same sequence type. " "First structure ", PyObjectToString(o1), " has type ", type1->tp_name, -@@ -527,7 +541,7 @@ bool AssertSameStructureHelper(PyObject* +@@ -532,7 +549,7 @@ and dict compare equal. */ && !(IsMappingHelper(o1) && IsMappingHelper(o2))) { *is_type_error = true; @@ -118,7 +137,7 @@ "The two namedtuples don't have the same sequence type. " "First structure ", PyObjectToString(o1), " has type ", type1->tp_name, -@@ -593,10 +607,10 @@ bool AssertSameStructureHelper(PyObject* +@@ -598,10 +615,10 @@ return true; } else { *is_type_error = false; @@ -133,7 +152,7 @@ return true; } } -@@ -692,7 +706,7 @@ PyObject* SameNamedtuples(PyObject* o1, +@@ -697,7 +714,7 @@ Py_RETURN_FALSE; } @@ -142,7 +161,7 @@ Py_RETURN_TRUE; } else { Py_RETURN_FALSE; -@@ -711,10 +725,10 @@ void AssertSameStructure(PyObject* o1, P +@@ -716,10 +733,10 @@ if (!error_msg.empty()) { PyErr_SetString( is_type_error ? PyExc_TypeError : PyExc_ValueError, @@ -157,64 +176,4 @@ .c_str()); } } -Index: dm-tree-0.1.8/tree/CMakeLists.txt -=================================================================== ---- dm-tree-0.1.8.orig/tree/CMakeLists.txt -+++ dm-tree-0.1.8/tree/CMakeLists.txt -@@ -64,55 +64,8 @@ if(NOT pybind11_POPULATED) - include_directories(${pybind11_INCLUDE_DIR}) - endif() - --# Needed to disable Abseil tests. --set (BUILD_TESTING OFF) -- --# Include abseil-cpp. --set(ABSEIL_VER 20210324.2) --include(ExternalProject) --set(ABSEIL_CMAKE_ARGS -- "-DCMAKE_INSTALL_PREFIX=${CMAKE_SOURCE_DIR}/abseil-cpp" -- "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" -- "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" -- "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" -- "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" -- "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}" -- "-DLIBRARY_OUTPUT_PATH=${CMAKE_SOURCE_DIR}/abseil-cpp/lib") --if(DEFINED CMAKE_OSX_ARCHITECTURES) -- set(ABSEIL_CMAKE_ARGS -- ${ABSEIL_CMAKE_ARGS} -- "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") --endif() --ExternalProject_Add(abseil-cpp -- GIT_REPOSITORY https://github.com/abseil/abseil-cpp.git -- GIT_TAG ${ABSEIL_VER} -- PREFIX ${CMAKE_SOURCE_DIR}/abseil-cpp -- CMAKE_ARGS ${ABSEIL_CMAKE_ARGS} --) --ExternalProject_Get_Property(abseil-cpp install_dir) --set(abseil_install_dir ${install_dir}) --include_directories (${abseil_install_dir}/include) -- -- - # Define pybind11 tree module. - pybind11_add_module(_tree tree.h tree.cc) --add_dependencies(_tree abseil-cpp) -- --if (WIN32 OR MSVC) -- set(ABSEIL_LIB_PREF "absl") -- set(LIB_SUFF "lib") --else() -- set(ABSEIL_LIB_PREF "libabsl") -- set(LIB_SUFF "a") --endif() -- --# Link abseil static libs. --# We don't use find_library here to force cmake to build abseil before linking. --set(ABSEIL_LIBS int128 raw_hash_set raw_logging_internal strings throw_delegate) --foreach(ABSEIL_LIB IN LISTS ABSEIL_LIBS) -- target_link_libraries(_tree PRIVATE -- "${abseil_install_dir}/lib/${ABSEIL_LIB_PREF}_${ABSEIL_LIB}.${LIB_SUFF}") --endforeach() - - # Make the module private to tree package. - set_target_properties(_tree PROPERTIES OUTPUT_NAME tree/_tree) ++++++ use-system-pybind11.patch ++++++ --- /var/tmp/diff_new_pack.Fxd5WW/_old 2026-04-11 22:31:35.825207502 +0200 +++ /var/tmp/diff_new_pack.Fxd5WW/_new 2026-04-11 22:31:35.833207829 +0200 @@ -1,49 +1,88 @@ -From 5dd767f3e60d9e4c58f6ee7764b24e1dec2c5edb Mon Sep 17 00:00:00 2001 -From: Alexander Tsvyashchenko <[email protected]> -Date: Sat, 1 Jan 2022 13:22:47 +0100 -Subject: [PATCH] Use system pybind11 and absl when available - -Current CMakeLists.txt always downloads and builds `pybind11` and `absl` which conflicts with packaging best practices in some of the distributions. This change uses system libraries (if available) and falls back to the old behavior (if not). ---- - tree/CMakeLists.txt | 122 ++++++++++++++++++++++++-------------------- - 1 file changed, 66 insertions(+), 56 deletions(-) - -Index: dm-tree-0.1.8/tree/CMakeLists.txt -=================================================================== ---- dm-tree-0.1.8.orig/tree/CMakeLists.txt -+++ dm-tree-0.1.8/tree/CMakeLists.txt -@@ -50,18 +50,21 @@ if(APPLE) - set (CMAKE_FIND_FRAMEWORK LAST) +--- dm_tree-0.1.10.orig/tree/CMakeLists.txt 2026-03-31 14:56:46.000000000 +0000 ++++ dm_tree-0.1.10/tree/CMakeLists.txt 2026-04-11 11:59:57.471680860 +0000 +@@ -7,8 +7,7 @@ + + project (tree LANGUAGES CXX) + +-option(USE_SYSTEM_ABSEIL "Force use of system abseil-cpp" OFF) +-option(USE_SYSTEM_PYBIND11 "Force use of system pybind11" OFF) ++option(USE_SYSTEM_PYBIND11 "Force use of system pybind11" ON) + + # Required for Python.h and python binding. + find_package(Python3 COMPONENTS Interpreter Development) +@@ -61,66 +60,21 @@ + # abseil-cpp and pybind11). + include(FetchContent) + +-# Needed to disable Abseil tests. +-set(BUILD_TESTING OFF) +- +-# Try to find abseil-cpp package system-wide first. +-if (USE_SYSTEM_ABSEIL) +- message(STATUS "Use system abseil-cpp: ${USE_SYSTEM_ABSEIL}") +- set(ABSEIL_FIND_PACKAGE_ARGS FIND_PACKAGE_ARGS) +-endif() +- +-# Include abseil-cpp. +-set(ABSEIL_REPO https://github.com/abseil/abseil-cpp) +-set(ABSEIL_CMAKE_ARGS +- "-DCMAKE_INSTALL_PREFIX=${CMAKE_SOURCE_DIR}/abseil-cpp" +- "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}" +- "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}" +- "-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}" +- "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}" +- "-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}" +- "-DLIBRARY_OUTPUT_PATH=${CMAKE_SOURCE_DIR}/abseil-cpp/lib" +- "-DABSL_PROPAGATE_CXX_STD=ON") +-if(DEFINED CMAKE_OSX_ARCHITECTURES) +- set(ABSEIL_CMAKE_ARGS +- ${ABSEIL_CMAKE_ARGS} +- "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}") +-endif() +- +-FetchContent_Declare( +- absl +- URL ${ABSEIL_REPO}/archive/refs/tags/20260107.1.tar.gz +- URL_HASH SHA256=4314e2a7cbac89cac25a2f2322870f343d81579756ceff7f431803c2c9090195 +- CMAKE_ARGS ${ABSEIL_CMAKE_ARGS} +- EXCLUDE_FROM_ALL +- ${ABSEIL_FIND_PACKAGE_ARGS}) +- + # Try to find pybind11 package system-wide first. + if (USE_SYSTEM_PYBIND11) +- message(STATUS "Use system pybind11: ${USE_SYSTEM_PYBIND11}") +- set(PYBIND11_FIND_PACKAGE_ARGS FIND_PACKAGE_ARGS) ++ find_package(pybind11 CONFIG) endif() --# Fetch pybind to be able to use pybind11_add_module symbol. --set(PYBIND_VER v2.10.1) --include(FetchContent) -FetchContent_Declare( - pybind11 -- GIT_REPOSITORY https://github.com/pybind/pybind11 -- GIT_TAG ${PYBIND_VER} --) --if(NOT pybind11_POPULATED) -- FetchContent_Populate(pybind11) -- add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR}) -- include_directories(${pybind11_INCLUDE_DIR}) -+find_package(pybind11 CONFIG) +- URL https://github.com/pybind/pybind11/archive/refs/tags/v3.0.1.tar.gz +- URL_HASH SHA256=741633da746b7c738bb71f1854f957b9da660bcd2dce68d71949037f0969d0ca +- ${PYBIND11_FIND_PACKAGE_ARGS}) +- +-FetchContent_MakeAvailable(absl pybind11) +if (NOT pybind11_FOUND) -+ # Fetch pybind to be able to use pybind11_add_module symbol. -+ set(PYBIND_VER v2.10.1) -+ include(FetchContent) + FetchContent_Declare( + pybind11 -+ GIT_REPOSITORY https://github.com/pybind/pybind11 -+ GIT_TAG ${PYBIND_VER} -+ ) -+ if(NOT pybind11_POPULATED) -+ FetchContent_Populate(pybind11) -+ add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR}) -+ include_directories(${pybind11_INCLUDE_DIR}) -+ endif() - endif() ++ URL https://github.com/pybind/pybind11/archive/refs/tags/v3.0.1.tar.gz ++ URL_HASH SHA256=741633da746b7c738bb71f1854f957b9da660bcd2dce68d71949037f0969d0ca) ++ FetchContent_MakeAvailable(pybind11) ++endif() # Define pybind11 tree module. + pybind11_add_module(_tree tree.h tree.cc) + +-target_link_libraries( +- _tree +- PRIVATE +- absl::int128 +- absl::raw_hash_set +- absl::raw_logging_internal +- absl::strings +- absl::synchronization +- absl::throw_delegate) +- + # Make the module private to tree package. + set_target_properties(_tree PROPERTIES OUTPUT_NAME tree/_tree)
