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
