Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package at-spi2-core for openSUSE:Factory checked in at 2026-04-26 21:11:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/at-spi2-core (Old) and /work/SRC/openSUSE:Factory/.at-spi2-core.new.11940 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "at-spi2-core" Sun Apr 26 21:11:03 2026 rev:123 rq:1348427 version:2.60.1 Changes: -------- --- /work/SRC/openSUSE:Factory/at-spi2-core/at-spi2-core.changes 2026-04-10 17:47:17.683664788 +0200 +++ /work/SRC/openSUSE:Factory/.at-spi2-core.new.11940/at-spi2-core.changes 2026-04-26 21:12:16.911795266 +0200 @@ -1,0 +2,9 @@ +Fri Apr 17 16:33:27 UTC 2026 - Bjørn Lie <[email protected]> + +- Update to version 2.60.1: + + Detect unresponsive applications, and do not expose them as + children of the desktop. + + Attempt to fix a crash when opening a group chat in pidgin that + contains new messages. + +------------------------------------------------------------------- Old: ---- at-spi2-core-2.60.0.tar.xz New: ---- at-spi2-core-2.60.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ at-spi2-core.spec ++++++ --- /var/tmp/diff_new_pack.N7PueA/_old 2026-04-26 21:12:19.099884727 +0200 +++ /var/tmp/diff_new_pack.N7PueA/_new 2026-04-26 21:12:19.115885382 +0200 @@ -23,7 +23,7 @@ %define atspiconfdir %{?_distconfdir}%{!?_distconfdir:%{_sysconfdir}} Name: at-spi2-core -Version: 2.60.0 +Version: 2.60.1 Release: 0 Summary: Assistive Technology Service Provider Interface - D-Bus based implementation License: LGPL-2.1-or-later ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.N7PueA/_old 2026-04-26 21:12:19.511901573 +0200 +++ /var/tmp/diff_new_pack.N7PueA/_new 2026-04-26 21:12:19.575904190 +0200 @@ -1,6 +1,6 @@ -mtime: 1774254118 -commit: 180921bd7892840bc3f7d1cb3d4c5b5f2a8ded97e0bff1bd009cb7242ab2ea1a +mtime: 1776443682 +commit: 59b27f55dc774a49fca19b599b4b4dfdbe6766ea6f8efd49b310df7873577398 url: https://src.opensuse.org/GNOME/at-spi2-core -revision: 180921bd7892840bc3f7d1cb3d4c5b5f2a8ded97e0bff1bd009cb7242ab2ea1a +revision: 59b27f55dc774a49fca19b599b4b4dfdbe6766ea6f8efd49b310df7873577398 projectscmsync: https://src.opensuse.org/GNOME/_ObsPrj ++++++ _service ++++++ --- /var/tmp/diff_new_pack.N7PueA/_old 2026-04-26 21:12:19.807913676 +0200 +++ /var/tmp/diff_new_pack.N7PueA/_new 2026-04-26 21:12:19.819914166 +0200 @@ -3,7 +3,7 @@ <service name="obs_scm" mode="manual"> <param name="scm">git</param> <param name="url">https://gitlab.gnome.org/GNOME/at-spi2-core.git</param> - <param name="revision">2.60.0</param> + <param name="revision">2.60.1</param> <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param> <param name="versionrewrite-pattern">(.*)\+0</param> <param name="versionrewrite-replacement">\1</param> ++++++ at-spi2-core-2.60.0.tar.xz -> at-spi2-core-2.60.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.60.0/NEWS new/at-spi2-core-2.60.1/NEWS --- old/at-spi2-core-2.60.0/NEWS 2026-03-13 20:43:45.000000000 +0100 +++ new/at-spi2-core-2.60.1/NEWS 2026-04-11 17:10:26.000000000 +0200 @@ -1,3 +1,11 @@ +What's new in at-spi2-core 2.60.1: + +* Detect unresponsive applications, and do not expose them as children + of the desktop. + +* Attempt to fix a crash when opening a group chat in pidgin that contains + new messages. + What's new in at-spi2-core 2.60.0: * Fix detection of whether the org.freedesktop.a11y.PointerLocator diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.60.0/atspi/atspi-misc.c new/at-spi2-core-2.60.1/atspi/atspi-misc.c --- old/at-spi2-core-2.60.0/atspi/atspi-misc.c 2026-03-13 20:43:45.000000000 +0100 +++ new/at-spi2-core-2.60.1/atspi/atspi-misc.c 2026-04-11 17:10:26.000000000 +0200 @@ -580,7 +580,7 @@ { DBusMessageIter iter_struct, iter_array; AtspiAccessible *accessible; - AtspiAccessible *parent; + AtspiAccessible *parent, *old_parent; const char *name, *description; dbus_uint32_t role; gboolean children_cached = FALSE; @@ -598,8 +598,7 @@ /* get parent */ parent = _atspi_dbus_consume_accessible (&iter_struct); - if (accessible->accessible_parent) - g_object_unref (accessible->accessible_parent); + old_parent = accessible->accessible_parent; if (parent == accessible) { guint pid = atspi_accessible_get_process_id (accessible, NULL); @@ -609,6 +608,7 @@ } else accessible->accessible_parent = parent; + g_clear_object (&old_parent); if (dbus_message_iter_get_arg_type (&iter_struct) == 'i') { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.60.0/meson.build new/at-spi2-core-2.60.1/meson.build --- old/at-spi2-core-2.60.0/meson.build 2026-03-13 20:43:45.000000000 +0100 +++ new/at-spi2-core-2.60.1/meson.build 2026-04-11 17:10:26.000000000 +0200 @@ -1,5 +1,5 @@ project('at-spi2-core', 'c', - version: '2.60.0', + version: '2.60.1', license: 'LGPLv2.1+', default_options: [ 'buildtype=debugoptimized', diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.60.0/registryd/registry.c new/at-spi2-core-2.60.1/registryd/registry.c --- old/at-spi2-core-2.60.0/registryd/registry.c 2026-03-13 20:43:45.000000000 +0100 +++ new/at-spi2-core-2.60.1/registryd/registry.c 2026-04-11 17:10:26.000000000 +0200 @@ -44,32 +44,35 @@ { gchar *name; gchar *path; -} SpiReference; + DBusPendingCall *pending; + gboolean disabled; + pid_t pid; +} SpiApplication; -static SpiReference * -spi_reference_new (const gchar *name, const gchar *path) +static SpiApplication * +spi_application_new (const gchar *name, const gchar *path) { - SpiReference *ref; + SpiApplication *app; - ref = g_new0 (SpiReference, 1); - ref->name = g_strdup (name); - ref->path = g_strdup (path); + app = g_new0 (SpiApplication, 1); + app->name = g_strdup (name); + app->path = g_strdup (path); - return ref; + return app; } -static SpiReference * -spi_reference_null (const char *bus_name) +static SpiApplication * +spi_application_null (const char *bus_name) { - return spi_reference_new (bus_name, SPI_DBUS_PATH_NULL); + return spi_application_new (bus_name, SPI_DBUS_PATH_NULL); } static void -spi_reference_free (SpiReference *ref) +spi_application_free (SpiApplication *app) { - g_free (ref->name); - g_free (ref->path); - g_free (ref); + g_free (app->name); + g_free (app->path); + g_free (app); } /*---------------------------------------------------------------------------*/ @@ -82,6 +85,7 @@ SpiRegistry *registry = SPI_REGISTRY (object); g_clear_pointer (®istry->bus_unique_name, g_free); + g_source_remove (registry->ping_applications_source); G_OBJECT_CLASS (spi_registry_parent_class)->finalize (object); } @@ -100,7 +104,7 @@ static void spi_registry_init (SpiRegistry *registry) { - registry->apps = g_ptr_array_new_with_free_func ((GDestroyNotify) spi_reference_free); + registry->apps = g_ptr_array_new_with_free_func ((GDestroyNotify) spi_application_free); } /*---------------------------------------------------------------------------*/ @@ -121,7 +125,7 @@ } static void -append_reference (DBusMessageIter *iter, SpiReference *ref) +append_reference (DBusMessageIter *iter, SpiApplication *app) { DBusMessageIter iter_struct; @@ -131,15 +135,15 @@ g_error ("Out of memory"); } - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &ref->name); - dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &ref->path); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_STRING, &app->name); + dbus_message_iter_append_basic (&iter_struct, DBUS_TYPE_OBJECT_PATH, &app->path); dbus_message_iter_close_container (iter, &iter_struct); } /*---------------------------------------------------------------------------*/ static gboolean -compare_reference (const SpiReference *one, const SpiReference *two) +compare_reference (const SpiApplication *one, const SpiApplication *two) { if (g_strcmp0 (one->name, two->name) == 0 && g_strcmp0 (one->path, two->path) == 0) @@ -149,7 +153,7 @@ } static gboolean -find_index_of_reference (GPtrArray *arr, const SpiReference *ref, guint *index) +find_index_of_reference (GPtrArray *arr, const SpiApplication *ref, guint *index) { gboolean found = FALSE; guint i = 0; @@ -168,14 +172,25 @@ } static void -emit_children_changed (DBusConnection *bus, - const char *operation, - dbus_int32_t index, - SpiReference *app) +emit_children_changed (SpiRegistry *registry, + gboolean add, + SpiApplication *app) { DBusMessage *sig; DBusMessageIter iter, iter_variant, iter_array; + dbus_uint32_t index = 0; dbus_int32_t unused = 0; + gint i; + const char *operation = (add ? "add" : "remove"); + + for (i = 0; i < registry->apps->len; i++) + { + SpiApplication *other_app = g_ptr_array_index (registry->apps, i); + if (other_app == app) + break; + if (!other_app->disabled) + index++; + } sig = dbus_message_new_signal (SPI_DBUS_PATH_ROOT, SPI_DBUS_INTERFACE_EVENT_OBJECT, @@ -196,23 +211,53 @@ &iter_array); dbus_message_iter_close_container (&iter, &iter_array); - dbus_connection_send (bus, sig, NULL); + dbus_connection_send (registry->bus, sig, NULL); dbus_message_unref (sig); } static void -add_application (SpiRegistry *registry, SpiReference *app_root) +set_app_pid (DBusPendingCall *pending, void *user_data) { - gint index; + SpiApplication *app = user_data; + DBusMessage *reply = dbus_pending_call_steal_reply (pending); + dbus_uint32_t pid = 0; - g_ptr_array_add (registry->apps, app_root); - index = registry->apps->len - 1; + if (!strcmp (dbus_message_get_signature (reply), "u")) + { + dbus_message_get_args (reply, NULL, DBUS_TYPE_UINT32, &pid, DBUS_TYPE_INVALID); + app->pid = pid; + g_debug ("App with bus name '%s' has pid %d", app->name, app->pid); + } + dbus_message_unref (reply); + dbus_pending_call_unref (pending); +} - emit_children_changed (registry->bus, "add", index, app_root); +static void +add_application (SpiRegistry *registry, SpiApplication *app) +{ + DBusMessage *message; + DBusPendingCall *pending; + + g_debug ("Adding application with name '%s'", app->name); + + g_ptr_array_add (registry->apps, app); + + emit_children_changed (registry, TRUE, app); + + message = dbus_message_new_method_call ("org.freedesktop.DBus", + "/org/freedesktop/DBus", + "org.freedesktop.DBus", + "GetConnectionUnixProcessID"); + dbus_message_append_args (message, DBUS_TYPE_STRING, + &app->name, + DBUS_TYPE_INVALID); + dbus_connection_send_with_reply (registry->bus, message, &pending, 10000); + dbus_pending_call_set_notify (pending, set_app_pid, app, NULL); + dbus_message_unref (message); } static void -call_set_id (SpiRegistry *registry, SpiReference *app, dbus_int32_t id) +call_set_id (SpiRegistry *registry, SpiApplication *app, dbus_int32_t id) { DBusMessage *message; DBusMessageIter iter, iter_variant; @@ -234,12 +279,14 @@ } static void -remove_application (SpiRegistry *registry, guint index) +remove_application (SpiRegistry *registry, guint index, const gchar *reason) { - SpiReference *ref = g_ptr_array_index (registry->apps, index); + SpiApplication *app = g_ptr_array_index (registry->apps, index); - spi_remove_device_listeners (registry->dec, ref->name); - emit_children_changed (registry->bus, "remove", index, ref); + g_debug ("Removing application with name '%s' due to %s", app->name, reason); + + spi_remove_device_listeners (registry->dec, app->name); + emit_children_changed (registry, FALSE, app); g_ptr_array_remove_index (registry->apps, index); } @@ -332,10 +379,10 @@ guint i; for (i = 0; i < registry->apps->len; i++) { - SpiReference *ref = g_ptr_array_index (registry->apps, i); - if (!g_strcmp0 (old, ref->name)) + SpiApplication *app = g_ptr_array_index (registry->apps, i); + if (!g_strcmp0 (old, app->name)) { - remove_application (registry, i); + remove_application (registry, i, "NameOwnerChanged"); i--; } } @@ -413,12 +460,12 @@ /*---------------------------------------------------------------------------*/ static DemarshalStatus -demarshal_reference (DBusMessage *message, SpiReference **out_reference) +demarshal_reference (DBusMessage *message, SpiApplication **out_app) { DBusMessageIter iter, iter_struct; const gchar *app_name, *obj_path; - *out_reference = NULL; + *out_app = NULL; dbus_message_iter_init (message, &iter); dbus_message_iter_recurse (&iter, &iter_struct); @@ -433,26 +480,26 @@ return DEMARSHAL_STATUS_INVALID_SIGNATURE; dbus_message_iter_get_basic (&iter_struct, &obj_path); - *out_reference = spi_reference_new (app_name, obj_path); + *out_app = spi_application_new (app_name, obj_path); return DEMARSHAL_STATUS_SUCCESS; } -static SpiReference * -socket_embed (SpiRegistry *registry, SpiReference *app_root) +static SpiApplication * +socket_embed (SpiRegistry *registry, SpiApplication *app_root) { add_application (registry, app_root); call_set_id (registry, app_root, registry->id); /* TODO: This will cause problems if we cycle through 2^31 ids */ registry->id++; - return spi_reference_new (registry->bus_unique_name, SPI_DBUS_PATH_ROOT); + return spi_application_new (registry->bus_unique_name, SPI_DBUS_PATH_ROOT); } static DBusMessage * impl_Embed (DBusMessage *message, SpiRegistry *registry) { - SpiReference *app_root = NULL; - SpiReference *result; + SpiApplication *app_root = NULL; + SpiApplication *result; if (demarshal_reference (message, &app_root) != DEMARSHAL_STATUS_SUCCESS) { @@ -467,7 +514,7 @@ reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &reply_iter); append_reference (&reply_iter, result); - spi_reference_free (result); + spi_application_free (result); return reply; } @@ -475,18 +522,18 @@ static DBusMessage * impl_Unembed (DBusMessage *message, SpiRegistry *registry) { - SpiReference *app_reference; + SpiApplication *app; guint index; - if (demarshal_reference (message, &app_reference) != DEMARSHAL_STATUS_SUCCESS) + if (demarshal_reference (message, &app) != DEMARSHAL_STATUS_SUCCESS) { return dbus_message_new_error (message, DBUS_ERROR_FAILED, "Invalid arguments"); } - if (find_index_of_reference (registry->apps, app_reference, &index)) - remove_application (registry, index); + if (find_index_of_reference (registry->apps, app, &index)) + remove_application (registry, index, "Unembed"); - spi_reference_free (app_reference); + spi_application_free (app); return NULL; } @@ -511,12 +558,12 @@ { DBusMessage *reply = NULL; DBusMessageIter iter; - SpiReference *null_ref = spi_reference_null (registry->bus_unique_name); + SpiApplication *null_app = spi_application_null (registry->bus_unique_name); reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); - append_reference (&iter, null_ref); - spi_reference_free (null_ref); + append_reference (&iter, null_app); + spi_application_free (null_app); return reply; } @@ -636,12 +683,12 @@ impl_get_Parent (DBusMessageIter *iter, SpiRegistry *registry) { DBusMessageIter iter_variant; - SpiReference *null_ref = spi_reference_null (""); + SpiApplication *null_app = spi_application_null (""); dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "(so)", &iter_variant); - append_reference (&iter_variant, null_ref); - spi_reference_free (null_ref); + append_reference (&iter_variant, null_app); + spi_application_free (null_app); dbus_message_iter_close_container (iter, &iter_variant); return TRUE; } @@ -649,9 +696,17 @@ static dbus_bool_t impl_get_ChildCount (DBusMessageIter *iter, SpiRegistry *registry) { - dbus_int32_t rv = registry->apps->len; + dbus_int32_t rv = 0; dbus_bool_t result; DBusMessageIter iter_variant; + gint i; + + for (i = 0; i < registry->apps->len; i++) + { + SpiApplication *current = g_ptr_array_index (registry->apps, i); + if (!current->disabled) + rv++; + } if (!dbus_message_iter_open_container (iter, DBUS_TYPE_VARIANT, "i", &iter_variant)) @@ -673,13 +728,35 @@ return_v_string (iter, "2.0"); } +static SpiApplication * +get_application_at_index (SpiRegistry *registry, gint index) +{ + gint i; + gint count = 0; + + if (index < 0) + return NULL; + + for (i = 0; i < registry->apps->len; i++) + { + SpiApplication *current = g_ptr_array_index (registry->apps, i); + if (current->disabled) + continue; + if (index == count) + return current; + count++; + } + + return NULL; +} + static DBusMessage * impl_GetChildAtIndex (DBusMessage *message, SpiRegistry *registry) { DBusMessage *reply; DBusMessageIter iter; DBusError error; - SpiReference *ref; + SpiApplication *app; dbus_int32_t i; dbus_error_init (&error); @@ -691,16 +768,14 @@ reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); - if (i < 0 || i >= registry->apps->len) - { - SpiReference *null_ref = spi_reference_null (SPI_DBUS_NAME_REGISTRY); - append_reference (&iter, null_ref); - spi_reference_free (null_ref); - } + app = get_application_at_index (registry, i); + if (app) + append_reference (&iter, app); else { - ref = g_ptr_array_index (registry->apps, i); - append_reference (&iter, ref); + SpiApplication *null_app = spi_application_null (SPI_DBUS_NAME_REGISTRY); + append_reference (&iter, null_app); + spi_application_free (null_app); } return reply; @@ -719,8 +794,9 @@ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "(so)", &iter_array); for (i = 0; i < registry->apps->len; i++) { - SpiReference *current = g_ptr_array_index (registry->apps, i); - append_reference (&iter_array, current); + SpiApplication *current = g_ptr_array_index (registry->apps, i); + if (!current->disabled) + append_reference (&iter_array, current); } dbus_message_iter_close_container (&iter, &iter_array); return reply; @@ -828,12 +904,12 @@ { DBusMessage *reply = NULL; DBusMessageIter iter; - SpiReference *null_ref = spi_reference_null (registry->bus_unique_name); + SpiApplication *null_app = spi_application_null (registry->bus_unique_name); reply = dbus_message_new_method_return (message); dbus_message_iter_init_append (reply, &iter); - append_reference (&iter, null_ref); - spi_reference_free (null_ref); + append_reference (&iter, null_app); + spi_application_free (null_app); return reply; } @@ -1028,7 +1104,7 @@ { DBusMessage *sig; DBusMessageIter iter; - SpiReference root_ref = { + SpiApplication root_ref = { SPI_DBUS_NAME_REGISTRY, SPI_DBUS_PATH_ROOT, }; @@ -1409,6 +1485,77 @@ NULL, NULL, NULL, NULL }; +static void +disable_app (SpiRegistry *registry, SpiApplication *app) +{ + if (app->disabled) + return; + + g_warning ("Disabling unresponsive app with pid %d", app->pid); + app->disabled = TRUE; + emit_children_changed (registry, FALSE, app); +} + +static void +enable_app (SpiRegistry *registry, SpiApplication *app) +{ + if (!app->disabled) + return; + + g_warning ("Re-enabling app with pid %d", app->pid); + app->disabled = FALSE; + emit_children_changed (registry, TRUE, app); +} + +static void +handle_app_ping (DBusPendingCall *pending, void *user_data) +{ + SpiRegistry *registry = user_data; + gint i; + + for (i = 0; i < registry->apps->len; i++) + { + SpiApplication *app = g_ptr_array_index (registry->apps, i); + if (app->pending == pending) + { + DBusMessage *reply = dbus_pending_call_steal_reply (pending); + + if (dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR) + { + disable_app (registry, app); + } + else + enable_app (registry, app); + dbus_message_unref (reply); + app->pending = NULL; + break; + } + } + + dbus_pending_call_unref (pending); +} + +static gboolean +ping_applications (gpointer data) +{ + SpiRegistry *registry = data; + DBusMessage *message; + gint i; + + for (i = 0; i < registry->apps->len; i++) + { + SpiApplication *app = g_ptr_array_index (registry->apps, i); + + message = dbus_message_new_method_call (app->name, "/", "org.freedesktop.DBus.Peer", "Ping"); + dbus_connection_send_with_reply (registry->bus, message, &app->pending, 10000); + if (app->pending) + dbus_pending_call_set_notify (app->pending, handle_app_ping, registry, NULL); + dbus_message_unref (message); + } + + return G_SOURCE_CONTINUE; +} + static gchar *app_sig_match_name_owner = "type='signal', interface='org.freedesktop.DBus', member='NameOwnerChanged'"; @@ -1436,7 +1583,7 @@ emit_Available (bus); - registry->events = NULL; + registry->ping_applications_source = g_timeout_add_seconds (30, ping_applications, registry); return registry; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/at-spi2-core-2.60.0/registryd/registry.h new/at-spi2-core-2.60.1/registryd/registry.h --- old/at-spi2-core-2.60.0/registryd/registry.h 2026-03-13 20:43:45.000000000 +0100 +++ new/at-spi2-core-2.60.1/registryd/registry.h 2026-04-11 17:10:26.000000000 +0200 @@ -52,6 +52,7 @@ DBusConnection *bus; char *bus_unique_name; GList *events; + guint ping_applications_source; }; struct _SpiRegistryClass ++++++ at-spi2-core.obsinfo ++++++ --- /var/tmp/diff_new_pack.N7PueA/_old 2026-04-26 21:12:20.751952273 +0200 +++ /var/tmp/diff_new_pack.N7PueA/_new 2026-04-26 21:12:20.787953745 +0200 @@ -1,5 +1,5 @@ name: at-spi2-core -version: 2.60.0 -mtime: 1773431025 -commit: d8ab833f0230fccc009c271d9f23f53df2a32c88 +version: 2.60.1 +mtime: 1775920226 +commit: ea37f283d06e556dcffad036623107dc20f419c5 ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-04-18 16:28:50.000000000 +0200 @@ -0,0 +1,5 @@ +*.obscpio +*.osc +_build.* +.pbuild +osc-collab.*
