Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package photocraft for openSUSE:Factory 
checked in at 2026-10-30 18:13:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/photocraft (Old)
 and      /work/SRC/openSUSE:Factory/.photocraft.new.1255 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "photocraft"

Fri Oct 30 18:13:18 2026 rev:2 rq:1393779 version:0.17.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/photocraft/photocraft.changes    2026-10-28 
21:10:46.365665537 +0100
+++ /work/SRC/openSUSE:Factory/.photocraft.new.1255/photocraft.changes  
2026-10-30 18:21:45.013002849 +0100
@@ -1,0 +2,39 @@
+Thu Oct 29 17:32:21 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.17.0 (upstream tag v0.17.0, 2026-10-28):
+  * 0.15.1: security-hardening patch release, no user-facing
+    changes: bounded codec, compose, plugin and GPU work and
+    allocations, linear-time table and gradient lookups, ICC
+    curve charge, PSD/RAW/TIFF buffer bounds.
+  * 0.16.0: crop box snaps the image under it, locked layers
+    become the Auto-Align reference, pick-on-press colour
+    pickers, resizable Curves graph and dialog, Slice tool
+    Fixed Ratio/Fixed Size styles, XCF import and PSD pattern
+    transparency fixes, WebP export keeps the resolution, GPU
+    canvas rebuilds after out-of-memory.
+  * 0.17.0: egui 0.37 UI stack, New Document artboards, Camera
+    Raw Calibration panel with Auto and sidecars, live Mixer
+    Brush strokes, History snapshots, TIFF spot/alpha extra
+    samples read and write, lossy-DNG Raw open, startup
+    self-update prompt, many tool, PSD, ATN and type fixes.
+  * Security hardening (no CVE ids): spaced-step and primitive
+    caps in paint, hostile geometry and raster bounds, refined
+    truncated-scan budgets, .pcraft manifest value cap.
+  * Re-vendored (update=false, lockfile respected): eframe/egui
+    0.36 to 0.37 on the reviewed storytold fork, new craft-update
+    self-update client, clap CLI parsing, ureq/zip stacks (all
+    MIT OR Apache-2.0) and Unicode-3.0 ICU crates; MPL-2.0
+    colored and CDLA webpki-root-certs stay unlinked leftovers
+    as in 0.14.0; license re-derived over the shipped targets,
+    no new copyleft, tag stands; no new system deps; the
+    cargo_vendor lockfile audit reports no advisories.
+- Set the fixed metainfo release date to 2026-10-28 (v0.17.0).
+- Disable the upstream self-update install path
+  (photocraft-no-self-update.patch): automatic update checks
+  default to off (opt-in via preferences), and the
+  Update-and-Restart prompt is removed, so upstream RPMs can never
+  be installed over distro files. The manual Help check stays.
+- Add photocraft-drop-unused-egui-patches.patch:
+  drop unused [patch.crates-io] pins the vendor omits
+
+-------------------------------------------------------------------

Old:
----
  photocraft-0.14.0.tar.zst

New:
----
  photocraft-0.17.0.tar.zst
  photocraft-drop-unused-egui-patches.patch
  photocraft-no-self-update.patch

----------(New B)----------
  New:  be installed over distro files. The manual Help check stays.
- Add photocraft-drop-unused-egui-patches.patch:
  drop unused [patch.crates-io] pins the vendor omits
  New:- Disable the upstream self-update install path
  (photocraft-no-self-update.patch): automatic update checks
  default to off (opt-in via preferences), and the
----------(New E)----------

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

Other differences:
------------------
++++++ photocraft.spec ++++++
--- /var/tmp/diff_new_pack.gMvmVO/_old  2026-10-30 18:21:53.260348100 +0100
+++ /var/tmp/diff_new_pack.gMvmVO/_new  2026-10-30 18:21:53.264348267 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           photocraft
-Version:        0.14.0
+Version:        0.17.0
 Release:        0
 Summary:        Native image editor with layers, masks, type and PSD support
 # Legal-Review-Notice: scope is the two shipped targets (photocraft, 
photocraft-cli)
@@ -40,6 +40,16 @@
 URL:            https://github.com/storytold/photocraft
 Source0:        %{name}-%{version}.tar.zst
 Source1:        vendor.tar.zst
+# PATCH-FIX-OPENSUSE photocraft-no-self-update.patch: upstream's craft-update
+# client installs upstream RPMs over distro files; default checks to off
+# (opt-in via preferences) and drop the Update-and-Restart install prompt.
+Patch0:         photocraft-no-self-update.patch
+# PATCH-FIX-OPENSUSE photocraft-drop-unused-egui-patches.patch: NOT
+# UPSTREAM (downstream build fix). Upstream pins three egui crates in
+# [patch.crates-io] that nothing uses (lock [[patch.unused]]), which
+# cargo_vendor omits, breaking the offline resolve; drop those pins
+# (egui_extras stays, crates/ui-egui needs it). [[package]] unchanged.
+Patch1:         photocraft-drop-unused-egui-patches.patch
 BuildRequires:  appstream-glib
 BuildRequires:  c_compiler
 BuildRequires:  cargo >= 1.95
@@ -92,6 +102,9 @@
 
 %build
 %limit_build -m 2000
+# NOTE: keep the cargo macros in this spec in braced form. The bare form
+# misparses trailing arguments (sibling craft packages of the adi:5 wave
+# broke the build this way); the braced form passes args through intact.
 # Upstream has no `cargo install` story; package.sh builds these two workspace
 # members by hand. heif matches the official builds (pure-Rust heic-rs, no
 # system library). CRAFT_FONTS_DIR stays unset: the build then uses the
@@ -104,10 +117,10 @@
 install -Dm0644 packaging/linux/ai.storyteller.photocraft.desktop 
%{buildroot}%{_datadir}/applications/ai.storyteller.photocraft.desktop
 install -Dm0644 packaging/linux/ai.storyteller.photocraft.mime.xml 
%{buildroot}%{_datadir}/mime/packages/ai.storyteller.photocraft.xml
 install -d -m 0755 %{buildroot}%{_datadir}/metainfo
-# Fixed upstream release date (v0.14.0, 2026-10-23): a build-time date would
+# Fixed upstream release date (v0.17.0, 2026-10-28): a build-time date would
 # make the metainfo differ on every rebuild, and spec-cleaner macro-expands
 # the %-sequences of any date format string, so keep this a plain string.
-sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-10-23/g" 
packaging/linux/ai.storyteller.photocraft.metainfo.xml.in > 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.photocraft.metainfo.xml
+sed -e "s/@VERSION@/%{version}/g" -e "s/@DATE@/2026-10-28/g" 
packaging/linux/ai.storyteller.photocraft.metainfo.xml.in > 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.photocraft.metainfo.xml
 # Upstream declares the app icon as type="stock" but it is a custom hicolor
 # icon, so declare it as cached for appstream validation.
 sed -i 's|<icon type="stock">ai.storyteller.photocraft</icon>|<icon 
type="cached" width="64" height="64">ai.storyteller.photocraft.png</icon>|' 
%{buildroot}%{_datadir}/metainfo/ai.storyteller.photocraft.metainfo.xml

++++++ _service ++++++
--- /var/tmp/diff_new_pack.gMvmVO/_old  2026-10-30 18:21:53.384353291 +0100
+++ /var/tmp/diff_new_pack.gMvmVO/_new  2026-10-30 18:21:53.393353667 +0100
@@ -2,7 +2,7 @@
   <service mode="manual" name="tar_scm">
     <param name="url">https://github.com/storytold/photocraft.git</param>
     <param name="scm">git</param>
-    <param name="revision">v0.14.0</param>
+    <param name="revision">v0.17.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ photocraft-0.14.0.tar.zst -> photocraft-0.17.0.tar.zst ++++++
/work/SRC/openSUSE:Factory/photocraft/photocraft-0.14.0.tar.zst 
/work/SRC/openSUSE:Factory/.photocraft.new.1255/photocraft-0.17.0.tar.zst 
differ: char 7, line 1

++++++ photocraft-drop-unused-egui-patches.patch ++++++
From: openSUSE Publishing <[email protected]>
Subject: [PATCH] Drop unused egui patch pins so the offline vendor build 
resolves

PATCH-FIX-OPENSUSE: photocraft-drop-unused-egui-patches.patch: NOT
UPSTREAM (downstream build fix). Upstream pins three egui crates
(egui_demo_lib, egui_inspection, egui_system_font_provider) in
[patch.crates-io] that nothing in the workspace uses (Cargo.lock lists
all three under [[patch.unused]]; egui_extras stays pinned, it is a
real dependency of crates/ui-egui). cargo_vendor therefore omits them
from vendor.tar.zst, and any --offline/--locked resolve against the
vendor directory fails with "patch location ... does not contain
packages matching ...". Drop the three unused pins (plus their
[[patch.unused]] lock stanzas, so --locked stays satisfied); the
[[package]] set is unchanged.

--- a/Cargo.toml
+++ b/Cargo.toml
@@ -194,8 +194,5 @@
 egui_glow = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
 egui_extras = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
 egui_kittest = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
-egui_system_font_provider = { git = "https://github.com/storytold/egui.git";, 
rev = "6d518fc799681571963842f95b55a6b68431b15a" }
 eframe = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
-egui_demo_lib = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
-egui_inspection = { git = "https://github.com/storytold/egui.git";, rev = 
"6d518fc799681571963842f95b55a6b68431b15a" }
 winit = { git = "https://github.com/storytold/winit.git";, rev = 
"a517b3846ee8457d84ee4975110bfda6797c44dc" }
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -9564,18 +9564,3 @@
  "syn 3.0.6",
  "winnow",
 ]
-
-[[patch.unused]]
-name = "egui_demo_lib"
-version = "0.37.0"
-source = 
"git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a";
-
-[[patch.unused]]
-name = "egui_inspection"
-version = "0.37.0"
-source = 
"git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a";
-
-[[patch.unused]]
-name = "egui_system_font_provider"
-version = "0.37.0"
-source = 
"git+https://github.com/storytold/egui.git?rev=6d518fc799681571963842f95b55a6b68431b15a#6d518fc799681571963842f95b55a6b68431b15a";

++++++ photocraft-no-self-update.patch ++++++
From: Martin Pluskal <[email protected]>
Subject: [PATCH] Disable the craft-update self-update install path

PATCH-FIX-OPENSUSE: photocraft-no-self-update.patch: upstream ships a
craft-update self-update client that installs upstream RPMs over distro
files (via zypper/rpm -U). Default automatic update checks to off
(opt-in via the preferences toggle) and remove the Update-and-Restart
install prompt, so no install-over-distro path remains on fresh
preferences. The manual Help check and the toggle itself stay.

--- a/crates/engine/src/cmd/updates_cmds.rs
+++ b/crates/engine/src/cmd/updates_cmds.rs
@@ -211,7 +211,7 @@
         s.execute("help.checkForUpdates", json!({})).unwrap();
         assert_eq!(s.execute("updates.status", 
json!({})).unwrap()["result"]["status"], "failed");
         s.load_prefs_json("{}").unwrap();
-        assert!(s.prefs().general.automatically_check_updates);
+        assert!(!s.prefs().general.automatically_check_updates);
         s.execute("prefs.set", json!({"path": 
"general.automaticallyCheckUpdates", "value": false})).unwrap();
         let saved = s.prefs_to_json();
         let mut restored = Session::new();
--- a/crates/engine/src/prefs.rs
+++ b/crates/engine/src/prefs.rs
@@ -247,7 +247,7 @@
             zoom_resizes_windows: false,
             use_legacy_free_transform: false,
             auto_show_home_screen: true,
-            automatically_check_updates: true,
+            automatically_check_updates: false,
         }
     }
 }
--- a/crates/ui-egui/src/updates_ui.rs
+++ b/crates/ui-egui/src/updates_ui.rs
@@ -8,31 +8,11 @@
 pub(crate) struct Runtime {
     startup_checked: bool,
     notified_version: Option<String>,
-    /// The startup prompt and the self-update behind it (desktop).
-    #[cfg(not(target_arch = "wasm32"))]
-    updater: craft_update::updater::Updater,
 }
 
 impl Default for Runtime {
     fn default() -> Self {
-        Self {
-            startup_checked: false,
-            notified_version: None,
-            #[cfg(not(target_arch = "wasm32"))]
-            updater: 
craft_update::updater::Updater::new(&craft_update::suite::PHOTOCRAFT, 
photocraft_engine::build_info::VERSION),
-        }
-    }
-}
-
-/// The release the engine found, as `craft-update` knows it.
-#[cfg(not(target_arch = "wasm32"))]
-fn release_of(found: &photocraft_engine::updates_cmds::Release) -> 
craft_update::Release {
-    craft_update::Release {
-        tag: format!("v{}", found.version),
-        version: craft_update::parse_version(&found.version),
-        name: format!("PhotoCraft {}", found.version),
-        html_url: found.url.clone(),
-        ..Default::default()
+        Self { startup_checked: false, notified_version: None }
     }
 }
 
@@ -61,8 +41,6 @@
     {
         app.updates_rt.notified_version = Some(release.version.clone());
         app.ui.updates_open = true;
-        #[cfg(not(target_arch = "wasm32"))]
-        app.updates_rt.updater.offer(release_of(release));
     }
     if app.session.updates.check.is_none() {
         return;
@@ -81,27 +59,6 @@
 pub(crate) fn show(app: &mut PhotocraftApp, ctx: &egui::Context) {
     let mut download: Option<String> = None;
 
-    #[cfg(not(target_arch = "wasm32"))]
-    {
-        let was_open = app.updates_rt.updater.prompt_open();
-        app.updates_rt.updater.tick(ctx);
-        // The restart helper is scheduled before the app closes, so no update 
starts over unsaved work.
-        let clean = !app.has_unsaved_work();
-        match app.updates_rt.updater.show_if(ctx, clean) {
-            craft_update::updater::Action::None => {}
-            craft_update::updater::Action::OpenUrl(url) => download = 
Some(url),
-            // The guarded close path asks about unsaved work and waits for 
saves; the restart helper
-            // relaunches once the process exits.
-            craft_update::updater::Action::Close => 
ctx.send_viewport_cmd(egui::ViewportCommand::Close),
-        }
-        if was_open && !app.updates_rt.updater.prompt_open() {
-            app.ui.updates_open = false;
-        }
-        if app.updates_rt.updater.prompt_open() {
-            return;
-        }
-    }
-
     if !app.ui.updates_open {
         if let Some(url) = download {
             crate::links::open(app, ctx, &url);
@@ -131,13 +88,8 @@
                 Status::Available { release } => {
                     ui.label(crate::i18n::fmt(crate::i18n::t("PhotoCraft 
{version} is available."), &[("version", &release.version)]));
                     #[cfg(not(target_arch = "wasm32"))]
-                    {
-                        if crate::widgets::primary_button(ui, tl!("Update and 
Restart"), 180.0).clicked() {
-                            app.updates_rt.updater.offer(release_of(release));
-                        }
-                        if ui.button(tl!("Release Notes")).clicked() {
-                            download = Some(release.url.clone());
-                        }
+                    if ui.button(tl!("Release Notes")).clicked() {
+                        download = Some(release.url.clone());
                     }
                     #[cfg(target_arch = "wasm32")]
                     if crate::widgets::primary_button(ui, tl!("Open Download 
Page"), 160.0).clicked() {
@@ -205,6 +157,7 @@
     #[test]
     fn 
automatic_check_runs_once_per_launch_even_after_days_or_preference_changes() {
         let (mut app, calls, sender) = app();
+        app.session.edit_prefs(|p| p.general.automatically_check_updates = 
true);
         let ctx = egui::Context::default();
         at(&mut app, &ctx, 0.0);
         at(&mut app, &ctx, 1.0);
@@ -235,6 +188,7 @@
         assert_eq!(*calls.lock().unwrap(), 0, "opt-out is evaluated at 
startup");
 
         let (mut failed, calls, sender) = app();
+        failed.session.edit_prefs(|p| p.general.automatically_check_updates = 
true);
         at(&mut failed, &ctx, 0.0);
         
sender.lock().unwrap().as_ref().unwrap().send(Err("offline".into())).unwrap();
         at(&mut failed, &ctx, 1.0);
@@ -264,6 +218,7 @@
     #[test]
     fn available_release_notifies_once_even_when_automation_polls_first() {
         let (mut app, _, sender) = app();
+        app.session.edit_prefs(|p| p.general.automatically_check_updates = 
true);
         let ctx = egui::Context::default();
         at(&mut app, &ctx, 0.0);
         sender
@@ -282,9 +237,9 @@
     }
 
     #[test]
-    #[cfg(not(target_arch = "wasm32"))]
-    fn startup_update_prompt_appears_and_can_be_dismissed() {
+    fn startup_release_notifies_without_an_install_prompt() {
         let (mut app, _, sender) = app();
+        app.session.edit_prefs(|p| p.general.automatically_check_updates = 
true);
         let ctx = egui::Context::default();
         at(&mut app, &ctx, 0.0);
         sender
@@ -295,14 +250,14 @@
             .send(Ok(Some(Release { version: "99.0.0".into(), url: 
"https://github.com/storytold/photocraft/releases/tag/v99.0.0".into() })))
             .unwrap();
         at(&mut app, &ctx, 1.0);
-        assert!(app.updates_rt.updater.prompt_open(), "startup prompt 
initialized on available release");
+        assert!(app.ui.updates_open, "an available release still notifies");
 
-        // Rendering show() renders the prompt modal
+        // Rendering show() shows the status window; there is no install 
prompt to dismiss.
         let mut output = ctx.run_ui(egui::RawInput::default(), |ui| {
             show(&mut app, ui.ctx());
         });
         output.textures_delta.clear();
-        assert!(app.updates_rt.updater.prompt_open());
+        assert!(app.ui.updates_open);
     }
 
     #[test]

++++++ vendor.tar.zst ++++++
/work/SRC/openSUSE:Factory/photocraft/vendor.tar.zst 
/work/SRC/openSUSE:Factory/.photocraft.new.1255/vendor.tar.zst differ: char 7, 
line 1

Reply via email to