Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ocaml-logs for openSUSE:Factory checked in at 2026-07-17 01:38:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ocaml-logs (Old) and /work/SRC/openSUSE:Factory/.ocaml-logs.new.24530 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ocaml-logs" Fri Jul 17 01:38:25 2026 rev:6 rq:1365556 version:0.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/ocaml-logs/ocaml-logs.changes 2025-07-16 17:36:14.678688793 +0200 +++ /work/SRC/openSUSE:Factory/.ocaml-logs.new.24530/ocaml-logs.changes 2026-07-17 01:40:24.743030707 +0200 @@ -1,0 +2,6 @@ +Tue Jul 7 07:07:07 UTC 2026 - [email protected] + +- Update to version 0.10.0 + see included CHANGES.md file for details + +------------------------------------------------------------------- Old: ---- ocaml-logs-0.9.0.tar.xz New: ---- ocaml-logs-0.10.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ocaml-logs.spec ++++++ --- /var/tmp/diff_new_pack.ewvi8F/_old 2026-07-17 01:40:25.623060421 +0200 +++ /var/tmp/diff_new_pack.ewvi8F/_new 2026-07-17 01:40:25.623060421 +0200 @@ -1,7 +1,7 @@ # # spec file for package ocaml-logs # -# Copyright (c) 2025 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 @@ -19,18 +19,18 @@ %bcond_with ocaml_lwt Name: ocaml-logs -Version: 0.9.0 +Version: 0.10.0 Release: 0 %{?ocaml_preserve_bytecode} Summary: Logging infrastructure for OCaml License: ISC -Group: Development/Languages/OCaml -URL: https://opam.ocaml.org/packages/logs +ExclusiveArch: aarch64 ppc64le riscv64 s390x x86_64 +URL: https://opam.ocaml.org/packages/logs/ Source0: %name-%version.tar.xz Patch0: ocaml-logs.patch BuildRequires: ocaml(ocaml_base_version) >= 4.14 BuildRequires: ocaml-dune -BuildRequires: ocaml-rpm-macros >= 20250517 +BuildRequires: ocaml-rpm-macros >= 20260707 BuildRequires: ocamlfind(cmdliner) BuildRequires: ocamlfind(compiler-libs) BuildRequires: ocamlfind(fmt) @@ -47,8 +47,7 @@ %package devel Summary: Development files for %name -Group: Development/Languages/OCaml -Requires: %name = %version +Requires: %name = %version-%release %description devel The %name-devel package contains libraries and signature files for ++++++ _service ++++++ --- /var/tmp/diff_new_pack.ewvi8F/_old 2026-07-17 01:40:25.663061772 +0200 +++ /var/tmp/diff_new_pack.ewvi8F/_new 2026-07-17 01:40:25.667061907 +0200 @@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="manual"> <param name="filename">ocaml-logs</param> - <param name="revision">52d9dbde9d72fd029fe6df0fa4867c343aaed493</param> + <param name="revision">350985691e41c4be23b3aadd0e875af669dfc702</param> <param name="scm">git</param> <param name="submodules">disable</param> <param name="url">https://github.com/dbuenzli/logs.git</param> ++++++ ocaml-logs-0.9.0.tar.xz -> ocaml-logs-0.10.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/B0.ml new/ocaml-logs-0.10.0/B0.ml --- old/ocaml-logs-0.9.0/B0.ml 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/B0.ml 2025-11-04 16:50:35.000000000 +0100 @@ -80,6 +80,9 @@ let test_threaded = test ~/"test/test_threaded.ml" ~requires:[logs_fmt; logs_threaded; threads] +let test_mutext_safe = + test ~/"test/test_mutex_safe.ml" ~requires:[logs_fmt; logs_threaded; threads] + let test_lwt = let requires = [b0_std; logs_fmt; logs_lwt; fmt; fmt_tty; lwt; lwt_unix] in test ~/"test/test_lwt.ml" ~requires @@ -121,7 +124,7 @@ [ "ocaml", {|>= "4.14.0"|}; "ocamlfind", {|build|}; "ocamlbuild", {|build|}; - "topkg", {|build & >= "1.0.3"|}; + "topkg", {|build & >= "1.1.0"|}; "mtime", {|with-test|};] in B0_pack.make "default" ~doc:"logs package" ~meta ~locked:true @@ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/CHANGES.md new/ocaml-logs-0.10.0/CHANGES.md --- old/ocaml-logs-0.9.0/CHANGES.md 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/CHANGES.md 2025-11-04 16:50:35.000000000 +0100 @@ -1,3 +1,9 @@ +v0.10.0 2025-11-04 Zagreb +------------------------- + +* Make log mutex immune to raising logging functions. + Thanks to Nathan Taylor for the report and the repro (#57). + v0.9.0 2025-07-08 Zagreb ------------------------ @@ -11,7 +17,7 @@ * `Logs.format_reporter` and `Logs_fmt.reporter` replace a few format strings and `^^` uses by direct calls to `Format` primitives. * Requires OCaml >= 4.14. -* Use Format.pp_print_text instead of your own. +* Use Format.pp_print_text instead of our own. * Export `logs` from each sub library. v0.8.0 2025-03-10 La Forclaz (VS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/opam new/ocaml-logs-0.10.0/opam --- old/ocaml-logs-0.9.0/opam 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/opam 2025-11-04 16:50:35.000000000 +0100 @@ -36,7 +36,7 @@ "ocaml" {>= "4.14.0"} "ocamlfind" {build} "ocamlbuild" {build} - "topkg" {build & >= "1.0.3"} + "topkg" {build & >= "1.1.0"} "mtime" {with-test} ] depopts: ["cmdliner" "js_of_ocaml-compiler" "fmt" "lwt" "base-threads"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/src/cli/logs_cli.mli new/ocaml-logs-0.10.0/src/cli/logs_cli.mli --- old/ocaml-logs-0.9.0/src/cli/logs_cli.mli 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/src/cli/logs_cli.mli 2025-11-04 16:50:35.000000000 +0100 @@ -46,7 +46,7 @@ Logs.warn (fun m -> m "Something bad may happen in the future."); if Logs.err_count () > 0 then 1 else 0 -let setup_log style_renderer level = +let setup_log ~style_renderer ~level = Fmt_tty.setup_std_outputs ?style_renderer (); Logs.set_level level; Logs.set_reporter (Logs_fmt.reporter ()) @@ -54,19 +54,22 @@ (* Command line interface *) open Cmdliner +open Cmdliner.Term.Syntax -let setup_log = +let cmd = + Cmd.make (Cmd.info "tool") @@ let env = Cmd.Env.info "TOOL_VERBOSITY" in - Term.(const setup_log $ Fmt_cli.style_renderer () $ Logs_cli.level ~env ()) + let+ style_renderer = Fmt_cli.style_renderer () + and+ level = Logs_cli.level ~env () + and+ msg = + let doc = "The message to output." in + Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) + in + setup_log ~style_renderer ~level; + hello msg -let msg = - let doc = "The message to output." in - Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) - -let main () = - let cmd = Cmd.make (Cmd.info "tool") Term.(const hello $ setup_log $ msg) in - Cmd.eval' cmd +let main () = Cmd.eval' cmd let () = if !Sys.interactive then () else exit (main ()) ]} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/src/logs.ml new/ocaml-logs-0.10.0/src/logs.ml --- old/ocaml-logs-0.9.0/src/logs.ml 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/src/logs.ml 2025-11-04 16:50:35.000000000 +0100 @@ -188,7 +188,11 @@ let mutex = Atomic.get reporter_mutex' in let over () = over (); mutex.unlock () in mutex.lock (); - (Atomic.get reporter').report src level ~over k msgf + try (Atomic.get reporter').report src level ~over k msgf with + | exn -> + let bt = Printexc.get_raw_backtrace () in + over (); + Printexc.raise_with_backtrace exn bt let pp_brackets pp_v ppf v = Format.pp_print_char ppf '['; pp_v ppf v; Format.pp_print_char ppf ']' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/test/test_mutex_safe.ml new/ocaml-logs-0.10.0/test/test_mutex_safe.ml --- old/ocaml-logs-0.9.0/test/test_mutex_safe.ml 1970-01-01 01:00:00.000000000 +0100 +++ new/ocaml-logs-0.10.0/test/test_mutex_safe.ml 2025-11-04 16:50:35.000000000 +0100 @@ -0,0 +1,23 @@ +(*--------------------------------------------------------------------------- + Copyright (c) 2025 The logs programmers. All rights reserved. + SPDX-License-Identifier: ISC + ---------------------------------------------------------------------------*) + +(* See https://github.com/dbuenzli/logs/issues/57 *) + +let src = Logs.Src.create "repro case" +module Log = (val Logs.src_log src) + +let setup_logs () = + Logs.set_reporter (Logs_fmt.reporter ()); + Logs.set_level ~all:true (Some Logs.Debug); + Logs_threaded.enable (); + () + +let main () = + setup_logs (); + (try Logs.app (fun _m -> failwith "uh oh...") with Failure _ -> ()); + Logs.app (fun m -> m "It works!"); + 0 + +let () = if !Sys.interactive then () else exit (main ()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ocaml-logs-0.9.0/test/tool.ml new/ocaml-logs-0.10.0/test/tool.ml --- old/ocaml-logs-0.9.0/test/tool.ml 2025-07-08 23:08:59.000000000 +0200 +++ new/ocaml-logs-0.10.0/test/tool.ml 2025-11-04 16:50:35.000000000 +0100 @@ -2,7 +2,7 @@ (* Example setup for a simple command line tool with colorful output. *) -let hello _ msg = +let hello msg = Logs.app (fun m -> m "%s" msg); Logs.info (fun m -> m "End-user information."); Logs.debug (fun m -> m "Developer information."); @@ -10,7 +10,7 @@ Logs.warn (fun m -> m "Something bad may happen in the future."); if Logs.err_count () > 0 then 1 else 0 -let setup_log style_renderer level = +let setup_log ~style_renderer ~level = Fmt_tty.setup_std_outputs ?style_renderer (); Logs.set_level level; Logs.set_reporter (Logs_fmt.reporter ()) @@ -18,17 +18,20 @@ (* Command line interface *) open Cmdliner +open Cmdliner.Term.Syntax -let setup_log = +let cmd = + Cmd.make (Cmd.info "tool") @@ let env = Cmd.Env.info "TOOL_VERBOSITY" in - Term.(const setup_log $ Fmt_cli.style_renderer () $ Logs_cli.level ~env ()) + let+ style_renderer = Fmt_cli.style_renderer () + and+ level = Logs_cli.level ~env () + and+ msg = + let doc = "The message to output." in + Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) + in + setup_log ~style_renderer ~level; + hello msg -let msg = - let doc = "The message to output." in - Arg.(value & pos 0 string "Hello horrible world!" & info [] ~doc) - -let main () = - let cmd = Cmd.v (Cmd.info "tool") Term.(const hello $ setup_log $ msg) in - Cmd.eval' cmd +let main () = Cmd.eval' cmd let () = if !Sys.interactive then () else exit (main ())
