Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package upower for openSUSE:Factory checked in at 2023-08-09 17:23:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/upower (Old) and /work/SRC/openSUSE:Factory/.upower.new.11712 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "upower" Wed Aug 9 17:23:59 2023 rev:84 rq:1102812 version:1.90.2 Changes: -------- --- /work/SRC/openSUSE:Factory/upower/upower.changes 2023-07-06 18:28:31.539091511 +0200 +++ /work/SRC/openSUSE:Factory/.upower.new.11712/upower.changes 2023-08-09 17:24:04.936942844 +0200 @@ -1,0 +2,17 @@ +Sat Jul 15 14:51:51 UTC 2023 - Dirk Müller <dmuel...@suse.com> + +- update to 1.90.2: + * Note that this is the last release of UPower with lid + handling. OS components that rely on the lid status + should get it from logind instead. + * Fix wireless devices not disappearing from Settings when + disconnected + * Require a newer libgudev to avoid bugs related to newline + stripping when reading sysfs attributes + * Add installed-tests files for use with gnome-desktop-testing + * Fix integration test to work with system installed upower + binary and under jhbuild +- add skip-tests-install.patch to skip installation of test-only + assets + +------------------------------------------------------------------- Old: ---- upower-v1.90.1.tar.bz2 New: ---- skip-tests-install.patch upower-v1.90.2.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ upower.spec ++++++ --- /var/tmp/diff_new_pack.u5dneH/_old 2023-08-09 17:24:05.512946430 +0200 +++ /var/tmp/diff_new_pack.u5dneH/_new 2023-08-09 17:24:05.516946455 +0200 @@ -23,13 +23,15 @@ %endif Name: upower -Version: 1.90.1 +Version: 1.90.2 Release: 0 Summary: Power Device Enumeration Framework License: GPL-2.0-or-later Group: System/Daemons URL: https://upower.freedesktop.org/ Source: https://gitlab.freedesktop.org/upower/upower/-/archive/v%{version}/upower-v%{version}.tar.bz2 +# PATCH-FIX-OPENSUSE: Skip installation of test-only dependencies +Patch1: skip-tests-install.patch BuildRequires: gobject-introspection-devel >= 0.9.9 BuildRequires: gtk-doc >= 1.11 BuildRequires: intltool @@ -103,7 +105,7 @@ %lang_package %prep -%setup -q -n %{name}-v%{version} +%autosetup -p1 -n %{name}-v%{version} %build %meson \ ++++++ skip-tests-install.patch ++++++ Index: upower-v1.90.2/src/meson.build =================================================================== --- upower-v1.90.2.orig/src/meson.build +++ upower-v1.90.2/src/meson.build @@ -120,7 +120,7 @@ test( # On Linux, we can run the additional integration test; # defined here as we would have a circular dependency otherwise. -if os_backend == 'linux' and gobject_introspection.found() +if false and os_backend == 'linux' and gobject_introspection.found() env = environment() env.prepend('top_builddir', join_paths(meson.project_build_root())) env.prepend('LD_LIBRARY_PATH', join_paths(meson.project_build_root(), 'libupower-glib')) ++++++ upower-v1.90.1.tar.bz2 -> upower-v1.90.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/.gitlab-ci.yml new/upower-v1.90.2/.gitlab-ci.yml --- old/upower-v1.90.1/.gitlab-ci.yml 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/.gitlab-ci.yml 2023-07-06 10:52:27.000000000 +0200 @@ -37,6 +37,7 @@ rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' - if: $CI_PIPELINE_SOURCE == 'push' + - if: $CI_PIPELINE_SOURCE == 'schedule' stages: - check-source @@ -59,6 +60,14 @@ build: stage: build + before_script: + - git clone https://gitlab.gnome.org/GNOME/libgudev.git + - cd libgudev + - dnf install -y 'dnf-command(builddep)' + - dnf builddep -y libgudev + - meson _build -Dprefix=/usr + - ninja -C _build install + - cd .. script: - meson _build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - ninja -C _build @@ -115,6 +124,11 @@ - meson _build -Dprefix=/usr - ninja -C _build install - cd .. + - cd libgudev + - dnf builddep -y libgudev + - meson _build -Dprefix=/usr + - ninja -C _build install + - cd .. script: - meson _build -Dintrospection=enabled -Dman=true -Dgtk-doc=true -Didevice=enabled - ninja -C _build @@ -132,6 +146,13 @@ check_abi: stage: test + before_script: + - cd libgudev + - dnf install -y 'dnf-command(builddep)' + - dnf builddep -y libgudev + - meson _build -Dprefix=/usr + - ninja -C _build install + - cd .. script: - check-abi --suppr .ci/upower.suppr --parameters="-Dman=false -Dgtk-doc=false -Didevice=enabled" ${LAST_ABI_BREAK} $(git rev-parse HEAD) except: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/NEWS new/upower-v1.90.2/NEWS --- old/upower-v1.90.1/NEWS 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/NEWS 2023-07-06 10:52:27.000000000 +0200 @@ -1,3 +1,18 @@ +Version 1.90.2 +-------------- +Released: 2023-07-06 + +Note that this is the last release of UPower with lid handling. OS components +that rely on the lid status should get it from logind instead. See: +https://www.freedesktop.org/software/systemd/man/org.freedesktop.login1.html + +- Fix wireless devices not disappearing from Settings when disconnected +- Require a newer libgudev to avoid bugs related to newline stripping + when reading sysfs attributes +- Add installed-tests files for use with gnome-desktop-testing +- Fix integration test to work with system installed upower binary and + under jhbuild + Version 1.90.1 -------------- Released: 2023-07-04 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/meson.build new/upower-v1.90.2/meson.build --- old/upower-v1.90.1/meson.build 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/meson.build 2023-07-06 10:52:27.000000000 +0200 @@ -1,5 +1,5 @@ project('upower', 'c', - version: '1.90.1', + version: '1.90.2', license: 'GPLv2+', default_options: [ 'buildtype=debugoptimized', @@ -69,7 +69,7 @@ if os_backend == 'linux' - gudev_dep = dependency('gudev-1.0', version: '>= 235') + gudev_dep = dependency('gudev-1.0', version: '>= 238') idevice_dep = dependency('libimobiledevice-1.0', version : '>= 0.9.7', required : get_option('idevice')) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/linux/integration-test.py new/upower-v1.90.2/src/linux/integration-test.py --- old/upower-v1.90.1/src/linux/integration-test.py 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/src/linux/integration-test.py 2023-07-06 10:52:27.000000000 +0200 @@ -102,22 +102,26 @@ builddir = os.getenv('top_builddir', '.') if os.access(os.path.join(builddir, 'src', 'upowerd'), os.X_OK): cls.daemon_path = os.path.join(builddir, 'src', 'upowerd') + cls.upower_path = os.path.join(builddir, 'tools', 'upower') print('Testing binaries from local build tree') cls.local_daemon = True elif os.environ.get('UNDER_JHBUILD', False): jhbuild_prefix = os.environ['JHBUILD_PREFIX'] cls.daemon_path = os.path.join(jhbuild_prefix, 'libexec', 'upowerd') + cls.upower_path = os.path.join(jhbuild_prefix, 'bin', 'upower') print('Testing binaries from JHBuild') cls.local_daemon = False else: print('Testing installed system binaries') cls.daemon_path = None + cls.upower_path = shutil.which('upower') with open('/usr/share/dbus-1/system-services/org.freedesktop.UPower.service') as f: for line in f: if line.startswith('Exec='): cls.daemon_path = line.split('=', 1)[1].strip() break assert cls.daemon_path, 'could not determine daemon path from D-BUS .service file' + assert cls.upower_path, 'could not determine upower path' cls.local_daemon = False # fail on CRITICALs on client side @@ -321,6 +325,11 @@ else: self.fail(message or 'timed out waiting for ' + str(condition)) + def wait_for_mainloop(self): + ml = GLib.MainLoop() + GLib.timeout_add(100, ml.quit) + ml.run() + # # Actual test cases # @@ -2463,6 +2472,7 @@ self.testbed.add_from_file(os.path.join(edir, 'tests/steelseries-headset.device')) card = '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.0/sound/card1' + self.wait_for_mainloop() devs = self.proxy.EnumerateDevices() self.assertEqual(len(devs), 1) @@ -2486,24 +2496,40 @@ intf = '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-5/1-5:1.3' self.testbed.set_attribute(intf, 'wireless_status', 'connected') + num_devices = 0 + self.start_daemon() devs = self.proxy.EnumerateDevices() - self.assertEqual(len(devs), 1) + num_devices = len(devs) + self.assertEqual(num_devices, 1) headset_up = devs[0] self.assertEqual(self.get_dbus_dev_property(headset_up, 'Percentage'), 69.0) + client = UPowerGlib.Client.new() + + def device_added_cb(client, device): + nonlocal num_devices + num_devices += 1 + def device_removed_cb(client, path): + nonlocal num_devices + num_devices -= 1 + + client.connect('device-added', device_added_cb) + client.connect('device-removed', device_removed_cb) + self.testbed.set_attribute(intf, 'wireless_status', 'disconnected') self.testbed.uevent(intf, 'change') + self.wait_for_mainloop() - devs = self.proxy.EnumerateDevices() - self.assertEqual(len(devs), 0) + self.assertEqual(num_devices, 0) self.testbed.set_attribute(intf, 'wireless_status', 'connected') self.testbed.uevent(intf, 'change') + self.wait_for_mainloop() + self.assertEqual(num_devices, 1) devs = self.proxy.EnumerateDevices() - self.assertEqual(len(devs), 1) headset_up = devs[0] self.assertEqual(self.get_dbus_dev_property(headset_up, 'Percentage'), 69.0) @@ -2514,9 +2540,8 @@ self.testbed.add_from_file(os.path.join(edir, 'tests/usb-headset.device')) bat = '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.3/0003:046D:0A87.0004/power_supply/hidpp_battery_0' - upower_path = os.path.dirname(os.path.dirname(self.daemon_path)) + '/tools/upower' self.start_daemon() - process = subprocess.Popen([upower_path, '-m']) + process = subprocess.Popen([self.upower_path, '-m']) for i in range(10): # Replace daemon diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/linux/up-backend.c new/upower-v1.90.2/src/linux/up-backend.c --- old/upower-v1.90.1/src/linux/up-backend.c 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/src/linux/up-backend.c 2023-07-06 10:52:27.000000000 +0200 @@ -148,7 +148,8 @@ return ret; } -static void +/* Returns TRUE if the added_device should be visible */ +static gboolean update_added_duplicate_device (UpBackend *backend, UpDevice *added_device) { @@ -159,7 +160,7 @@ other_device = find_duplicate_device (backend, added_device); if (!other_device) - return; + return TRUE; if (UP_IS_DEVICE_BLUEZ (added_device)) bluez_device = added_device; @@ -189,15 +190,19 @@ g_object_get (G_OBJECT (added_device), "serial", &serial, NULL); g_debug ("Device %s is a duplicate, but we don't know if most interesting", serial); - return; + return TRUE; } unreg_device = tested_device; } g_object_get (G_OBJECT (unreg_device), "serial", &serial, NULL); - up_device_unregister (unreg_device); + if (up_device_is_registered (unreg_device)) { + g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, unreg_device); + up_device_unregister (unreg_device); + } g_debug ("Hiding duplicate device %s", serial); + return unreg_device != added_device; } static void @@ -211,7 +216,8 @@ return; /* Re-add the old duplicate device that got hidden */ - up_device_register (other_device); + if (up_device_register (other_device)) + g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, other_device); } static gboolean @@ -278,7 +284,8 @@ return; g_debug ("emitting device-removed: %s", g_dbus_object_get_object_path (bus_object)); - g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, UP_DEVICE (object)); + if (up_device_is_registered (UP_DEVICE (object))) + g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, UP_DEVICE (object)); g_object_unref (object); } @@ -308,8 +315,8 @@ NULL); if (device) { g_debug ("emitting device-added: %s", g_dbus_object_get_object_path (bus_object)); - update_added_duplicate_device (backend, device); - g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device); + if (update_added_duplicate_device (backend, device)) + g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device); } } @@ -389,7 +396,8 @@ object = G_DBUS_OBJECT (up_device_get_native (device)); g_debug ("emitting device-removed: %s", g_dbus_object_get_object_path (object)); - g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, device); + if (up_device_is_registered (device)) + g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, device); } } @@ -403,6 +411,7 @@ GParamSpec *pspec, gpointer user_data) { + UpBackend *backend = user_data; g_autofree char *path = NULL; gboolean disconnected; @@ -412,10 +421,14 @@ NULL); if (disconnected) { g_debug("Device %s became disconnected, hiding device", path); - up_device_unregister (UP_DEVICE (gobject)); + if (up_device_is_registered (UP_DEVICE (gobject))) { + g_signal_emit (backend, signals[SIGNAL_DEVICE_REMOVED], 0, gobject); + up_device_unregister (UP_DEVICE (gobject)); + } } else { g_debug ("Device %s became connected, showing device", path); - up_device_register (UP_DEVICE (gobject)); + if (up_device_register (UP_DEVICE (gobject))) + g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, gobject); } } @@ -423,10 +436,10 @@ udev_device_added_cb (UpBackend *backend, UpDevice *device) { g_debug ("Got new device from udev enumerator: %p", device); - update_added_duplicate_device (backend, device); g_signal_connect (device, "notify::disconnected", G_CALLBACK (up_device_disconnected_cb), backend); - g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device); + if (update_added_duplicate_device (backend, device)) + g_signal_emit (backend, signals[SIGNAL_DEVICE_ADDED], 0, device); } static void diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/meson.build new/upower-v1.90.2/src/meson.build --- old/upower-v1.90.1/src/meson.build 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/src/meson.build 2023-07-06 10:52:27.000000000 +0200 @@ -142,4 +142,21 @@ timeout: 80, ) endforeach + + install_data( [ + 'linux/integration-test.py', + 'linux/output_checker.py', + ], + install_dir: get_option('prefix') / get_option('libexecdir') / 'upower' + ) + install_subdir('linux/tests/', + install_dir: get_option('prefix') / get_option('libexecdir') / 'upower' + ) + + configure_file( + input: 'upower-integration.test.in', + output: 'upower-integration.test', + install_dir: get_option('datadir') / 'installed-tests' / 'upower', + configuration: cdata + ) endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/up-device.c new/upower-v1.90.2/src/up-device.c --- old/upower-v1.90.1/src/up-device.c 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/src/up-device.c 2023-07-06 10:52:27.000000000 +0200 @@ -429,16 +429,17 @@ return object_path; } -void +gboolean up_device_register (UpDevice *device) { g_autofree char *computed_object_path = NULL; if (g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (device)) != NULL) - return; + return FALSE; computed_object_path = up_device_compute_object_path (device); g_debug ("Exported UpDevice with path %s", computed_object_path); up_device_export_skeleton (device, computed_object_path); + return TRUE; } void @@ -453,6 +454,12 @@ } } +gboolean +up_device_is_registered (UpDevice *device) +{ + return g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (device)) != NULL; +} + /** * up_device_refresh: * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/up-device.h new/upower-v1.90.2/src/up-device.h --- old/upower-v1.90.1/src/up-device.h 2023-07-04 15:51:22.000000000 +0200 +++ new/upower-v1.90.2/src/up-device.h 2023-07-06 10:52:27.000000000 +0200 @@ -72,7 +72,8 @@ gboolean up_device_refresh_internal (UpDevice *device, UpRefreshReason reason); void up_device_unregister (UpDevice *device); -void up_device_register (UpDevice *device); +gboolean up_device_register (UpDevice *device); +gboolean up_device_is_registered (UpDevice *device); G_END_DECLS diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/upower-v1.90.1/src/upower-integration.test.in new/upower-v1.90.2/src/upower-integration.test.in --- old/upower-v1.90.1/src/upower-integration.test.in 1970-01-01 01:00:00.000000000 +0100 +++ new/upower-v1.90.2/src/upower-integration.test.in 2023-07-06 10:52:27.000000000 +0200 @@ -0,0 +1,3 @@ +[Test] +Type=session +Exec=@libexecdir@/upower/integration-test.py