Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package lager for openSUSE:Factory checked 
in at 2026-03-13 21:17:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/lager (Old)
 and      /work/SRC/openSUSE:Factory/.lager.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "lager"

Fri Mar 13 21:17:51 2026 rev:5 rq:1338671 version:0.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/lager/lager.changes      2026-01-26 
11:04:03.014331571 +0100
+++ /work/SRC/openSUSE:Factory/.lager.new.8177/lager.changes    2026-03-13 
21:21:57.786110138 +0100
@@ -1,0 +2,6 @@
+Fri Mar  6 09:46:32 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 0.1.3
+  * CMake: Improvements
+
+-------------------------------------------------------------------

Old:
----
  lager-0.1.2.tar.gz

New:
----
  lager-0.1.3.tar.gz

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

Other differences:
------------------
++++++ lager.spec ++++++
--- /var/tmp/diff_new_pack.o5xtLo/_old  2026-03-13 21:21:58.398135385 +0100
+++ /var/tmp/diff_new_pack.o5xtLo/_new  2026-03-13 21:21:58.402135550 +0100
@@ -17,14 +17,14 @@
 
 
 Name:           lager
-Version:        0.1.2
+Version:        0.1.3
 Release:        0
 Summary:        C++ library to assist value-oriented design
 License:        MIT
 URL:            https://sinusoid.es/lager/
 Source0:        
https://github.com/arximboldi/lager/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
 BuildRequires:  boost-devel
-BuildRequires:  cmake
+BuildRequires:  cmake >= 3.21
 BuildRequires:  gcc-c++
 # For tests
 BuildRequires:  cmake(Catch2) < 3.0

++++++ lager-0.1.2.tar.gz -> lager-0.1.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/CMakeLists.txt 
new/lager-0.1.3/CMakeLists.txt
--- old/lager-0.1.2/CMakeLists.txt      2026-01-13 21:45:42.000000000 +0100
+++ new/lager-0.1.3/CMakeLists.txt      2026-02-25 11:16:33.000000000 +0100
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.10)
+cmake_minimum_required(VERSION 3.21)
 cmake_policy(SET CMP0048 NEW) # enable project VERSION
 cmake_policy(SET CMP0056 NEW) # honor link flags in try_compile()
 list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
@@ -21,11 +21,11 @@
 
 include(GNUInstallDirs)
 
-option(lager_BUILD_TESTS "Build tests" ON)
-option(lager_BUILD_FAILURE_TESTS "Build failure tests" ON)
-option(lager_BUILD_EXAMPLES "Build examples" ON)
-option(lager_BUILD_DEBUGGER_EXAMPLES "Build examples that showcase the web 
based debugger" ON)
-option(lager_BUILD_DOCS "Build docs" ON)
+option(lager_BUILD_TESTS "Build tests" "${PROJECT_IS_TOP_LEVEL}")
+option(lager_BUILD_FAILURE_TESTS "Build failure tests" 
"${PROJECT_IS_TOP_LEVEL}")
+option(lager_BUILD_EXAMPLES "Build examples" "${PROJECT_IS_TOP_LEVEL}")
+option(lager_BUILD_DEBUGGER_EXAMPLES "Build examples that showcase the web 
based debugger" "${PROJECT_IS_TOP_LEVEL}")
+option(lager_BUILD_DOCS "Build docs" "${PROJECT_IS_TOP_LEVEL}")
 option(lager_EMBED_RESOURCES_PATH "Embed installation paths for easier, 
non-portable resource location" ON)
 option(lager_DISABLE_STORE_DEPENDENCY_CHECKS "Disable compile-time checks for 
store dependencies" OFF)
 option(lager_ENABLE_EXCEPTIONS "Always enable exceptions regardless of 
detected compiler support" OFF)
@@ -52,8 +52,8 @@
 find_program(CCACHE ccache)
 if (CCACHE)
   message(STATUS "Using ccache: ${CCACHE}")
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CCACHE})
-  set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CCACHE})
+  set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
+  set(CMAKE_CXX_LINK_LAUNCHER ${CCACHE})
 else()
   message(STATUS "Could not find ccache")
 endif()
@@ -63,6 +63,7 @@
 
 # the library
 add_library(lager INTERFACE)
+add_library(lager::lager ALIAS lager)
 target_include_directories(lager INTERFACE
   $<BUILD_INTERFACE:${lager_BINARY_DIR}/>
   $<BUILD_INTERFACE:${lager_SOURCE_DIR}/>
@@ -83,11 +84,85 @@
   target_compile_definitions(lager INTERFACE LAGER_NO_EXCEPTIONS)
 endif()
 
-install(TARGETS lager EXPORT LagerConfig)
+target_sources(lager PUBLIC FILE_SET HEADERS
+  FILES
+    lager/commit.hpp
+    lager/config.hpp
+    lager/constant.hpp
+    lager/context.hpp
+    lager/cursor.hpp
+    lager/debug/debugger.hpp
+    lager/debug/http_server.hpp
+    lager/debug/tree_debugger.hpp
+    lager/deps.hpp
+    lager/detail/access.hpp
+    lager/detail/lens_nodes.hpp
+    lager/detail/merge_nodes.hpp
+    lager/detail/no_value.hpp
+    lager/detail/nodes.hpp
+    lager/detail/signal.hpp
+    lager/detail/smart_lens.hpp
+    lager/detail/xform_nodes.hpp
+    lager/effect.hpp
+    lager/event_loop/boost_asio.hpp
+    lager/event_loop/manual.hpp
+    lager/event_loop/qml.hpp
+    lager/event_loop/qt.hpp
+    lager/event_loop/queue.hpp
+    lager/event_loop/safe_queue.hpp
+    lager/event_loop/sdl.hpp
+    lager/extra/cereal/enum.hpp
+    lager/extra/cereal/immer_array.hpp
+    lager/extra/cereal/immer_box.hpp
+    lager/extra/cereal/immer_flex_vector.hpp
+    lager/extra/cereal/immer_map.hpp
+    lager/extra/cereal/immer_set.hpp
+    lager/extra/cereal/immer_table.hpp
+    lager/extra/cereal/immer_vector.hpp
+    lager/extra/cereal/inline.hpp
+    lager/extra/cereal/json.hpp
+    lager/extra/cereal/optional_nvp.hpp
+    lager/extra/cereal/struct.hpp
+    lager/extra/cereal/tuple.hpp
+    lager/extra/cereal/variant_with_name.hpp
+    lager/extra/derive.hpp
+    lager/extra/derive/cereal.hpp
+    lager/extra/derive/eq.hpp
+    lager/extra/derive/hana.hpp
+    lager/extra/derive/hash.hpp
+    lager/extra/derive/size_check.hpp
+    lager/extra/enum.hpp
+    lager/extra/qt.hpp
+    lager/extra/struct.hpp
+    lager/extra/thunk.hpp
+    lager/future.hpp
+    lager/lens.hpp
+    lager/lenses.hpp
+    lager/lenses/at.hpp
+    lager/lenses/at_or.hpp
+    lager/lenses/attr.hpp
+    lager/lenses/optional.hpp
+    lager/lenses/tuple.hpp
+    lager/lenses/unbox.hpp
+    lager/lenses/variant.hpp
+    lager/reader.hpp
+    lager/resources_path.hpp.in
+    lager/sensor.hpp
+    lager/setter.hpp
+    lager/state.hpp
+    lager/store.hpp
+    lager/tags.hpp
+    lager/util.hpp
+    lager/watch.hpp
+    lager/with.hpp
+    lager/writer.hpp
+)
+
+install(TARGETS lager EXPORT LagerConfig FILE_SET HEADERS)
 
 # requirements for tests and examples
 if (lager_BUILD_TESTS OR lager_BUILD_EXAMPLES)
-  find_package(Boost 1.56 CONFIG COMPONENTS system REQUIRED)
+  find_package(Boost 1.56 CONFIG)
   find_package(Threads REQUIRED)
   find_package(Immer REQUIRED)
   find_package(Zug REQUIRED)
@@ -150,8 +225,7 @@
   if (lager_BUILD_DEBUGGER_EXAMPLES)
     add_library(lager-debugger-example INTERFACE)
     target_link_libraries(lager-debugger-example INTERFACE
-      lager-example
-      Boost::system)
+      lager-example)
 
     add_custom_target(gui ALL
       COMMAND make
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/cursor.hpp 
new/lager-0.1.3/lager/cursor.hpp
--- old/lager-0.1.2/lager/cursor.hpp    2026-01-13 21:45:42.000000000 +0100
+++ new/lager-0.1.3/lager/cursor.hpp    2026-02-25 11:16:33.000000000 +0100
@@ -35,6 +35,7 @@
     using writer_mixin<DerivT>::zoom;
     using writer_mixin<DerivT>::xform;
     using reader_mixin<DerivT>::xform;
+    using reader_mixin<DerivT>::operator bool;
 
 protected:
     ~cursor_mixin() = default;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/detail/nodes.hpp 
new/lager-0.1.3/lager/detail/nodes.hpp
--- old/lager-0.1.2/lager/detail/nodes.hpp      2026-01-13 21:45:42.000000000 
+0100
+++ new/lager-0.1.3/lager/detail/nodes.hpp      2026-02-25 11:16:33.000000000 
+0100
@@ -218,11 +218,19 @@
             needs_send_down_ = false;
             needs_notify_    = true;
             has_sent_down_   = true;
-            for (auto& wchild : this->children()) {
+            
+            const auto& children = this->children();
+            const size_t n_children = children.size();
+            for (auto& wchild : children) {
                 if (auto child = wchild.lock()) {
                     child->send_down();
                 }
             }
+            assert(n_children == children.size() &&
+                   "Children must not change during send_down, \
+                    because iterators would be invalidated leading to UB. \
+                    Maybe you created a new cursor inside a cursor.map(...) \
+                    call?");
         }
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/event_loop/qt.hpp 
new/lager-0.1.3/lager/event_loop/qt.hpp
--- old/lager-0.1.2/lager/event_loop/qt.hpp     2026-01-13 21:45:42.000000000 
+0100
+++ new/lager-0.1.3/lager/event_loop/qt.hpp     2026-02-25 11:16:33.000000000 
+0100
@@ -14,9 +14,11 @@
 
 #include <lager/config.hpp>
 
-#include <QObject>
-#include <QThreadPool>
-#include <QtConcurrent>
+#include <QtConcurrent/QtConcurrent>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QEvent>
+#include <QtCore/QObject>
+#include <QtCore/QThreadPool>
 
 #include <functional>
 #include <stdexcept>
@@ -30,7 +32,11 @@
     std::reference_wrapper<QThreadPool> thread_pool =
         *QThreadPool::globalInstance();
 
-    ~with_qt_event_loop() { thread_pool.get().waitForDone(); }
+    ~with_qt_event_loop()
+    {
+        QCoreApplication::removePostedEvents(&obj.get(), QEvent::MetaCall);
+        thread_pool.get().waitForDone();
+    }
 
     template <typename Fn>
     void async(Fn&& fn)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/extra/cereal/immer_table.hpp 
new/lager-0.1.3/lager/extra/cereal/immer_table.hpp
--- old/lager-0.1.2/lager/extra/cereal/immer_table.hpp  1970-01-01 
01:00:00.000000000 +0100
+++ new/lager-0.1.3/lager/extra/cereal/immer_table.hpp  2026-02-25 
11:16:33.000000000 +0100
@@ -0,0 +1,58 @@
+//
+// lager - library for functional interactive c++ programs
+// Copyright (C) 2017 Juan Pedro Bolivar Puente
+//
+// This file is part of lager.
+//
+// lager is free software: you can redistribute it and/or modify
+// it under the terms of the MIT License, as detailed in the LICENSE
+// file located at the root of this source code distribution,
+// or here: <https://github.com/arximboldi/lager/blob/master/LICENSE>
+//
+
+#pragma once
+
+#include <lager/config.hpp>
+
+#include <cereal/cereal.hpp>
+#include <immer/table.hpp>
+
+namespace cereal {
+
+template <typename Archive,
+          typename T,
+          typename KF,
+          typename H,
+          typename E,
+          typename MP,
+          std::uint32_t B>
+void CEREAL_LOAD_FUNCTION_NAME(Archive& ar, immer::table<T, KF, H, E, MP, B>& 
m)
+{
+    size_type size;
+    ar(make_size_tag(size));
+
+    for (auto i = size_type{}; i < size; ++i) {
+        T x;
+        ar(x);
+        m = std::move(m).insert(std::move(x));
+    }
+    if (size != m.size())
+        throw std::runtime_error{"duplicate ids?"};
+}
+
+template <typename Archive,
+          typename T,
+          typename KF,
+          typename H,
+          typename E,
+          typename MP,
+          std::uint32_t B>
+void CEREAL_SAVE_FUNCTION_NAME(Archive& ar,
+                               const immer::table<T, KF, H, E, MP, B>& m)
+{
+    ar(make_size_tag(static_cast<size_type>(m.size())));
+    for (auto&& v : m)
+        ar(v);
+}
+
+} // namespace cereal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/reader.hpp 
new/lager-0.1.3/lager/reader.hpp
--- old/lager-0.1.2/lager/reader.hpp    2026-01-13 21:45:42.000000000 +0100
+++ new/lager-0.1.3/lager/reader.hpp    2026-02-25 11:16:33.000000000 +0100
@@ -32,6 +32,11 @@
 template <typename DerivT>
 struct reader_mixin
 {
+    explicit operator bool() const
+    {
+        return maybe_node_() != nullptr;
+    };
+
     decltype(auto) get() const { return node_()->last(); }
     decltype(auto) operator*() const { return get(); }
     decltype(auto) operator->() const { return &get(); }
@@ -71,12 +76,16 @@
 
     auto node_() const
     {
-        if (auto node =
-                detail::access::node(*static_cast<const DerivT*>(this))) {
+        if (auto node = maybe_node_()) {
             return node;
         }
         LAGER_THROW(std::runtime_error("Accessing uninitialized reader"));
     }
+
+    auto maybe_node_() const
+    {
+        return detail::access::node(*static_cast<const DerivT*>(this));
+    }
 };
 
 template <typename NodeT>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/lager/writer.hpp 
new/lager-0.1.3/lager/writer.hpp
--- old/lager-0.1.2/lager/writer.hpp    2026-01-13 21:45:42.000000000 +0100
+++ new/lager-0.1.3/lager/writer.hpp    2026-02-25 11:16:33.000000000 +0100
@@ -28,6 +28,11 @@
 template <typename DerivT>
 struct writer_mixin
 {
+    explicit operator bool() const
+    {
+        return maybe_node_() != nullptr;
+    };
+
     template <typename T>
     void set(T&& value)
     {
@@ -70,12 +75,16 @@
 
     auto node_() const
     {
-        if (auto node =
-                detail::access::node(*static_cast<const DerivT*>(this))) {
+        if (auto node = maybe_node_()) {
             return node;
         }
         LAGER_THROW(std::runtime_error("Accessing uninitialized writer"));
     }
+
+    auto maybe_node_() const
+    {
+        return detail::access::node(*static_cast<const DerivT*>(this));
+    }
 };
 
 template <typename NodeT>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/test/cereal/immer_table.cpp 
new/lager-0.1.3/test/cereal/immer_table.cpp
--- old/lager-0.1.2/test/cereal/immer_table.cpp 1970-01-01 01:00:00.000000000 
+0100
+++ new/lager-0.1.3/test/cereal/immer_table.cpp 2026-02-25 11:16:33.000000000 
+0100
@@ -0,0 +1,44 @@
+//
+// lager - library for functional interactive c++ programs
+// Copyright (C) 2017 Juan Pedro Bolivar Puente
+//
+// This file is part of lager.
+//
+// lager is free software: you can redistribute it and/or modify
+// it under the terms of the MIT License, as detailed in the LICENSE
+// file located at the root of this source code distribution,
+// or here: <https://github.com/arximboldi/lager/blob/master/LICENSE>
+//
+
+#include "cerealize.hpp"
+
+#include <lager/extra/cereal/immer_table.hpp>
+
+#include <catch2/catch.hpp>
+
+struct entry_t
+{
+    size_t id;
+    size_t value;
+
+    bool operator==(const entry_t& other) const
+    {
+        return id == other.id && value == other.value;
+    }
+
+    template <typename Archive>
+    void serialize(Archive& ar)
+    {
+        ar(CEREAL_NVP(id), CEREAL_NVP(value));
+    }
+};
+
+TEST_CASE("basic")
+{
+    auto x = immer::table<entry_t>{{.id = 1, .value = 2},
+                                   {.id = 3, .value = 4},
+                                   {.id = 12, .value = 42},
+                                   {.id = 0, .value = 5}};
+    auto y = cerealize(x);
+    CHECK(x == y);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lager-0.1.2/test/cursor.cpp 
new/lager-0.1.3/test/cursor.cpp
--- old/lager-0.1.2/test/cursor.cpp     2026-01-13 21:45:42.000000000 +0100
+++ new/lager-0.1.3/test/cursor.cpp     2026-02-25 11:16:33.000000000 +0100
@@ -37,30 +37,36 @@
 TEST_CASE("in, construction and assignment from temporary")
 {
     reader<int> in1;
+    CHECK(!in1);
     // Access to uninitialized reader should throw an exception
     REQUIRE_THROWS(in1.get());
     in1 = make_state(0);
+    CHECK(in1);
     reader<int> in2{make_state(0)};
 }
 
 TEST_CASE("out, construction_and_assignment_from_temporary")
 {
     writer<int> out1;
+    CHECK(!out1);
     // Access to uninitialized writer should throw an exception
     REQUIRE_THROWS(out1.set(42));
     REQUIRE_THROWS(out1.update([](auto) { return 42; }));
     out1 = make_state(0);
+    CHECK(out1);
     writer<int> out2{make_state(0)};
 }
 
 TEST_CASE("inout, construction_and_assignment_from_temporary")
 {
     cursor<int> inout1;
+    CHECK(!inout1);
     // Access to uninitialized cursor should throw an exception
     REQUIRE_THROWS(inout1.get());
     REQUIRE_THROWS(inout1.set(42));
     REQUIRE_THROWS(inout1.update([](auto) { return 42; }));
     inout1 = make_state(0);
+    CHECK(inout1);
     cursor<int> inout2{make_state(0)};
 }
 

Reply via email to